กลับไปหน้ารวมไฟล์
arduino-24-tft-display-calculator-0c5775.md

Arduino 2.4 tft display calculator

การแสดงผลและตรรกะของเครื่องคิดเลข

วาดปุ่มสำหรับตัวเลขและตัวดำเนินการ รวมถึงช่องแสดงผลของเครื่องคิดเลข ปุ่มตัวเลขและตัวดำเนินการทั้งหมดมีขนาดเท่ากัน ดังนั้น พิกัดของแต่ละปุ่มสามารถคำนวณได้ในโปรแกรม

เมื่อตรวจพบการกดหน้าจอ โปรแกรมจะคำนวณพิกัดแถวและคอลัมน์ และระบุปุ่มที่ถูกกด

หากกดปุ่มตัวเลข โปรแกรมจะเพิ่มตัวเลขนั้นลงใน `char array` มี `array` สองชุดสำหรับเก็บตัวเลขแรกและตัวเลขที่สอง หาก `array` แรกและ `operator` ว่างเปล่า จะเพิ่มตัวเลขที่กดลงใน `array` แรก หาก `operator` ไม่ว่างเปล่า จะเพิ่มตัวเลขลงใน `char array` ที่สอง

เมื่อกดปุ่ม ‘=’ จะตรวจสอบทั้ง `array` ทั้งสองและ `operator` หากมีอย่างน้อยหนึ่งรายการว่างเปล่า จะกลับไปยังส่วน `loop` โดยไม่คำนวณอะไร

หากทั้ง `array` ทั้งสองและ `operator` มีค่า จะทำการแปลง `array` แรกและ `array` ที่สองให้เป็นตัวเลข `integer` ก่อน ฟังก์ชันด้านล่างนี้ทำการแปลง :

int32_t chararraytoint(char *a)
{
int32_t len = strlen(a);
int32_t finalnum = 0;
int32_t intval = 0;
int32_t placeval = 1;
if (len > 0)
{
for (int i = len - 1; i >= 0; i--)
{
intval = chartoint(a[i]);
intval = intval * placeval;
finalnum = finalnum + intval;
placeval *= 10;
}
}
return finalnum;
}

ใน `character array` ตัวเลขในตำแหน่งสุดท้ายของ `array` จะอยู่ในหลักหน่วย สำหรับการแปลง `array` ให้เป็นตัวเลข เราจะวนซ้ำจากตำแหน่งสุดท้ายของ `array` ไปยังตำแหน่งที่ 0

ในการเริ่มต้น ค่าประจำหลักของตัวเลขจะถูกตั้งค่าเป็น 1 (หลักหน่วย) ลูป `for` จะวนซ้ำจนกว่าจะถึงตำแหน่งที่ 0 ของ `array`

ในการแปลงตำแหน่ง `character` ให้เป็น `integer` จะใช้ฟังก์ชัน `chartoint()` เมื่อได้ `integer` สำหรับตัวเลขนั้นแล้ว จะนำไปคูณกับค่าประจำหลักของมัน และผลลัพธ์จะถูกเพิ่มไปยังตัวแปร `finalnum` ค่า `placevalue` จะถูกคูณด้วย 10 ในการวนซ้ำแต่ละครั้งของ `loop` เพื่อให้เมื่อถึงตำแหน่งที่ 0 จะมีค่า `placevalue` สูงที่สุด

ตัวแปร `finalnum` จะมีค่า `integer` เมื่อสิ้นสุดลูป `for`

นอกจากนี้ยังมี `screen saver` ซึ่งจะทำงานหลังจากไม่มีการใช้งานเป็นเวลา 15 วินาที ตัวแปรชื่อ `time` จะเพิ่มขึ้นทีละ 1 ทุกวินาที เมื่อตรวจพบการสัมผัส จะตั้งค่าตัวแปร `time` เป็น 0 หากตัวแปร `time` เกิน 15 วินาที จะเข้าสู่ `screen saver loop` ภายใน `loop` นี้ จะอ่านค่าจาก `touchscreen` อย่างต่อเนื่อง และพิมพ์รูปทรงด้วยสีและขนาดแบบสุ่ม เมื่อใดก็ตามที่ตรวจพบการสัมผัส ตรรกะจะกลับไปยัง `main loop` โดยรีเซ็ตตัวแปร `time` เป็น 0

รายละเอียดทางเทคนิคเพิ่มเติม

การพัฒนา GUI และ Touch Interface

โปรเจกต์นี้เปลี่ยน Arduino และ TFT shield ให้เป็นเครื่องคิดเลขกราฟิกที่ทำงานได้อย่างสมบูรณ์แบบและทำงานได้ด้วยตัวเอง

  • Touchscreen Matrix: ใช้ 4-wire resistive touch interface ของ TFT ขนาด 2.4 นิ้ว Arduino ใช้ตรรกะ "Button Mapping" ซึ่งพิกัดการสัมผัส (X, Y) ที่ระบุจะถูกแปลงเป็นอินพุตตัวเลขหรือตัวดำเนินการ ('+', '-', '*', '/')
  • Arithmetic Engine: firmware จะจัดการการคำนวณ floating-point และจัดการ string-to-number buffer เพื่อให้สามารถคำนวณตัวเลขหลายหลักได้

การเรนเดอร์ภาพ

  • Adafruit_GFX UI: เค้าโครงของเครื่องคิดเลขมีปุ่มแบบมีเงาและแถบ "Result Display" แบบเรียลไทม์ โค้ดใช้การเรนเดอร์แบบ "Invalidate" ที่ปรับให้เหมาะสม โดยจะวาดซ้ำเฉพาะบางพื้นที่ของหน้าจอเท่านั้น เพื่อรักษา user interface ให้รวดเร็วและตอบสนองได้ดี

ข้อมูล Frontmatter ดั้งเดิม

title: "Arduino 2.4 tft display calculator"
description: "A calculator that work on 2.4 TFT LCD display"
author: "MinukaThesathYapa"
category: "Screens & Displays"
tags: []
views: 12707
likes: 7
price: 2450
difficulty: "Easy"
components:
  - "1x 2.4 TFT LCD display"
  - "1x Arduino UNO"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "39d9d6b6cf24cd9e74860063fdfb47e5eb06ca0976539d9348f2ec227b047753"
encryptedPayload: "U2FsdGVkX1/cyjKNxUuQLH65DQI/uSk56VXgus1ucI4eBNDQoPqVv6+Zo3ndqS/HHxLfHuqW8Mlg/28CtTOqlrSpci/ypZH9lEYGHYjf5HI="
seoDescription: "Build a calculator using Arduino and a 2.4 TFT LCD display. Features a touch screen interface and graphical output."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/arduino-24-tft-display-calculator-0c5775_cover.jpg"
lang: "th"