Satura rādītājs:
- Piegādes
- 1. darbība. Aparatūras savienojumi
- 2. darbība. Kods: globālās definīcijas un iestatīšana
- 3. darbība: kods: cilpa
- 4. solis: kods: kvadrātu funkcija
- 5. darbība: funkcija Kods: skaitļi
- 6. darbība: kods: numursSelect Function
- 7. solis: izbaudiet pabeigto projektu
Video: Arduino skārienekrāna kalkulators: 7 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:54
Sveiki! Šis ir projekts, lai izveidotu skārienekrāna kalkulatoru, izmantojot Arduino Uno un TFT LCD ekrānu. Es izdomāju savas mājas skolas programmēšanas klases koncepciju, un pieredze šī projekta veidošanā bija ļoti interesanta. Šis kalkulators var veikt četras vienkāršas matemātiskas darbības (saskaitīšanu, atņemšanu, reizināšanu un dalīšanu). Tas arī parāda līdz divām zīmēm aiz komata sadalījuma atbildēm, kurās tās ir. Nirtam tieši iekšā! Šī projekta materiāli ir uzskaitīti zemāk.
Piegādes
- Arduino Uno
-2.4 TFT LCD vairogs (šeit es to nopirku:
- USB A līdz B kabelis (vads, lai savienotu Arduino ar datoru)
- Dators ar instalētu Arduino IDE
- Jums būs jālejupielādē arī divas bibliotēkas: MCUFRIEND_kbv un skārienekrāns. Pirmo, ko varat atrast vietnē github (saite: https://github.com/prenticedavid/MCUFRIEND_kbv), vai arī varat izmantot tālāk iekļauto bibliotēkas zip failu. Otrais ir instalēšanai Arduino bibliotēkas pārvaldniekā.
1. darbība. Aparatūras savienojumi
Skārienekrāna vairoga savienošana ar Arduino Uno ir vienkārša un ātra. Viss, kas jums jādara, ir izkārtot vairoga zemākās tapas ar zemākajām tapām uz Arduino un iespiest vairogu tapās. Augšējā 5 V tapai un nemarķētajai tapai barošanas pusē nedrīkst būt tapas no vairoga, un tie paši parametri attiecas uz tapām, kas apzīmētas ar SCL un SDA plāksnes otrā pusē. Tagad mēs esam gatavi kodēt!
2. darbība. Kods: globālās definīcijas un iestatīšana
#iekļaut
MCUFRIEND_kbv tft; // ciets savienojums UNO vairogiem jebkurā gadījumā
#iekļaut
#define YP A3
#define XM A2
#define YM 9
#define XP 8
Skārienekrāns ts = Skārienekrāns (XP, YP, XM, YM, 300);
#define MINPRESSURE 10
Tas ir koda sākums, kurā mēs iekļaujam bibliotēkas (MCUFRIEND_kbv un skārienekrānu), definējam X un Y tapas, iestatām skārienekrāna parametrus un definējam minimālo spiedienu, kas nepieciešams, lai Arduino reģistrētu lietotāja presi.
int ID;
int user_selection;
pludiņš saglabāts_numurs = 0;
pludiņa termins1;
int op_num;
pludiņa rezultāts;
int cursorLocX = 5;
int cursorLocY = 20;
Tieši pirms iestatīšanas mums ir jāiestata daži globālie mainīgie. ID palīdz izveidot un palaist skārienekrānu. user_selection satur skaitli, kas atbilst taustiņam, ko lietotājs izvēlas, nospiežot skārienekrānu. Save_number ir mainīgais, ko mēs drukājam uz ekrāna pēc lietotāja ievadīšanas (vairāk par to cilpā). Tas ir pludiņš, tāpēc tajā var būt gan decimāldaļskaitļi, gan veseli skaitļi. termins1 ir mainīgais, kurā tiek saglabāts vienādojuma pirmais numurs pēc operanda izvēles. op_num saglabā operandu kā skaitli (1 saskaitīšanai, 2 atņemšanai, 3 reizināšanai un 4 dalīšanai). rezultāts ir mainīgais, kas tiek drukāts uz ekrāna pēc tam, kad lietotājs ir nospiests vienādības zīmi. Tas ir arī pludiņš. cursorLocX un cursorLocY ir kartēšanas punkti skārienekrānā, kur kursors ir iestatīts uz vairākām reizēm (tas atrodas pelēkajā joslā augšpusē, citādi pazīstams kā rezultātu lauks).
void setup () {
tft.reset ();
ID = tft.readID ();
tft.begin (ID);
tft.setRotation (0);
tft.fillScreen (TFT_DARKGREY);
kvadrāti ();
cipari ();
tft.setTextSize (3);
tft.setTextColor (TFT_BLUE, TFT_DARKGREY);
}
Mūsu iestatīšanas funkcija vispirms ietver skārienekrāna vairoga inicializāciju (1.-3. Rindas). Vairoga orientācija tiek iestatīta, izmantojot komandu tft.setRotation (), un 0 ir vertikāli. Viss ekrāns ir iekrāsots tumši pelēkā krāsā, izmantojot komandu tft.fillScreen (), kuru mēs uzrakstīsim augšpusē (izņemot rezultātu lauku). Funkcijas kvadrāti () un skaitļi () uzzīmē kalkulatora kvadrātus, iekrāso kvadrātus melnbaltā krāsā ar dambretes modeli un uz kvadrātiem raksta skaitļus/operandus zilā krāsā. Mēs nonāksim pie tiem nākamajā solī. Komanda tft.setTextSize () nosaka rezultātu lauka teksta lielumu uz 3, kas ir vidējs fonts. Komanda tft.setTextColor () nosaka rezultātu lauka teksta krāsu uz zilu, kas ir uzrakstīta virs tumši pelēkā lauka.
3. darbība: kods: cilpa
void loop () {numberSelect ();
kavēšanās (100);
ja (user_selection == 16) {
;
} vēl {
ja (user_selection <10) {
saglabāts_numurs = saglabāts_numurs * 10 + lietotāja_izvēle;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (saglabāts_numurs);
} cits if (user_selection> 10) {
slēdzis (user_selection) {
11. gadījums:
op_num = 1;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("+");
termins1 = saglabāts_numurs;
saglabāts_numurs = 0;
pārtraukums;
12. gadījums:
op_num = 2;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("-");
termins1 = saglabāts_numurs;
saglabāts_numurs = 0;
pārtraukums;
13. gadījums:
op_num = 3;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("X");
termins1 = saglabāts_numurs;
saglabāts_numurs = 0;
pārtraukums;
14. gadījums:
op_num = 4;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("/");
termins1 = saglabāts_numurs;
saglabāts_numurs = 0;
pārtraukums;
15. gadījums:
saglabāts_numurs = 0;
termins1 = 0;
op_num = 0;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("");
pārtraukums;
}
tft.setCursor (cursorLocX, cursorLocY);
Tas ir daudz košļājams, tāpēc es paskaidrošu, kas ir iepriekš. Mēs sākam, izsaucot funkciju numberSelect (), kas katram skārienekrāna kvadrātam piešķir numuru. Kad lietotājs nospiež vienu no šiem kvadrātiem, funkcija nosaka mainīgo user_selection uz kvadrāta numuru. Pirmais, ja paziņojums tiks palaists caur cilpu tikai tad, ja ir veikta derīga lietotāja izvēle. Ja tas tā ir, nākamajā paziņojumā tiek jautāts, vai lietotāja_izvēle ir saglabāts skaitlis, kas mazāks par 10 (skaitļi 0–9). Ja tas notiek, saglabātā_numurs tiek reizināts ar 10 un skaitlis user_selection tiek pievienots sarakstam Save_number, kas tiek izdrukāts skārienekrāna rezultātu laukā. Ja tā nav, nākamajā paziņojumā tiek vaicāts, vai lietotāja_izvēle ir saglabāts skaitlis, kas lielāks par 10 (operandu skaitļi: 11 - +, 12 -, -13, -X, - -14, un -ekrāna skaidram laukumam). Slēdža funkcija rūpējas par katru gadījumu (nosaka user_selection). Mainīgajam op_num tiek dots skaitlis, kas atbilst atlasītajam operandam (1 - +, 2 -, 3 -X un 4 - /). Vērtība Save_number tiek saglabāta mainīgajā terminā1, lai mainīgo Save_number varētu izmantot vienādojuma otrajā pusē. Operanda simbols tiek drukāts uz ekrāna, kā arī tiek dzēsti visi skaitļi rezultātu laukā. Vienīgais izņēmums ir skaidra ekrāna kvadrāts, kas atiestata visus aprēķina mainīgos un attīra rezultātu lauku no visa tajā esošā.
} vēl {
slēdzis (op_num) {
1. gadījums:
rezultāts = termins1 + saglabāts_numurs;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dubultā (rezultāts));
pārtraukums;
2. gadījums:
rezultāts = termins1 - saglabāts_numurs;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dubultā (rezultāts));
pārtraukums;
3. gadījums:
rezultāts = termins1 * saglabāts_numurs;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dubultā (rezultāts));
pārtraukums;
4. gadījums:
rezultāts = pludiņš (termins1) / pludiņš (saglabāts_numurs);
tft.setCursor (cursorLocX, cursorLocY);
tft.print (rezultāts);
pārtraukums;
}
tft.setCursor (cursorLocX, cursorLocY);
saglabāts_numurs = rezultāts;
termins1 = 0;
op_num = 0;
kavēšanās (1000);
}
}
}
Pēdējā cikla daļa attiecas uz notikumu, kad lietotājs izvēlas vienādības zīmi (user_selection == 10). Vēl viena slēdža funkcija darbojas, izmantojot četras matemātiskās funkcijas (nosaka op_num). Pievienošanas gadījums (1. gadījums) saskaita kopā terminu1 un saglabāto_numuru un saglabā rezultātu mainīgajā. Rezultāts tiek izdrukāts rezultātu laukā kā dubults. Atņemšanas gadījums (2. gadījums) no termina1 atņem Save_number un saglabā rezultātu mainīgajā. Rezultāts tiek izdrukāts rezultātu laukā dubultā. Reizināšanas gadījums (3. gadījums) reizina terminu 1 ar saglabāto_numuru un saglabā rezultātu mainīgajā. Rezultāts tiek izdrukāts rezultātu laukā kā divkāršs. Sadalīšanas gadījums (4. gadījums) sadala terminu 1 ar saglabāto_skaitli kopā un saglabā rezultātu mainīgajā. Rezultāts tiek izdrukāts rezultātu laukā kā pludiņš (jo dalījuma atbildes var būt decimāldaļas). Pēc tam, kad ekrānā tiek izdrukāts skaitlis, operands vai rezultāts, kursors tiek atiestatīts, saglabātā_numurs tiek iestatīts uz iepriekšējo rezultātu un tiek atiestatīti termins1 un op_num.
Dažas piezīmes: lietotājs nevar ievadīt kalkulatorā decimāldaļskaitļus, jo trūkst decimāldaļas kvadrāta. Turklāt lietotājs vienlaikus var veikt tikai vienu vienādojumu. Jūs nevarat aprēķināt rezultātu un pēc tam saskaitīt/atņemt/reizināt/dalīt šo rezultātu. Funkcijā numberSelect () ir funkcija, kas notīra ekrānu pēc rezultāta izdrukāšanas, ja lietotājs ir nospiedis citu kvadrātu.
4. solis: kods: kvadrātu funkcija
tukši kvadrāti () {
// melnbaltie kvadrāti mainās katrā rindā, un pirmajai un trešajai rindai ir pretējs raksts nekā otrajai un ceturtajai rindai
tft.fillRect (0, 60, 60, 65, TFT_BLACK); // sākas pirmā kvadrātu rinda, melna līdz balta tft.fillRect (60, 60, 60, 65, TFT_WHITE);
tft.fillRect (120, 60, 60, 65, TFT_BLACK);
tft.fillRect (180, 60, 60, 65, TFT_WHITE); // beidzas pirmā kvadrātu rinda
tft.fillRect (0, 125, 60, 65, TFT_WHITE); // sākas otrā kvadrātu rinda, balta līdz melna tft.fillRect (60, 125, 60, 65, TFT_BLACK);
tft.fillRect (120, 125, 60, 65, TFT_WHITE);
tft.fillRect (180, 125, 60, 65, TFT_BLACK); // beidzas otrā kvadrātu rinda
tft.fillRect (0, 190, 60, 65, TFT_BLACK); // sākas trešā kvadrātu rinda, melna līdz balta tft.fillRect (60, 190, 60, 65, TFT_WHITE);
tft.fillRect (120, 190, 60, 65, TFT_BLACK);
tft.fillRect (180, 190, 60, 65, TFT_WHITE); // beidzas trešā kvadrātu rinda
tft.fillRect (0, 255, 60, 65, TFT_WHITE); // sākas ceturtā kvadrātu rinda, balta līdz melna tft.fillRect (60, 255, 60, 65, TFT_BLACK);
tft.fillRect (120, 255, 60, 65, TFT_WHITE);
tft.fillRect (180, 255, 60, 65, TFT_BLACK); // beidzas ceturtā kvadrātu rinda
}
Funkcija kvadrāti () ir diezgan vienkārša. Komanda tft.fillRect (X1, Y1, X2, Y2, TFT_COLOR) uzzīmē taisnstūri atbilstoši tai nodotajiem parametriem, kas ir x un y pirmās pozīcijas, x un y otrās pozīcijas un krāsa, ar kuru taisnstūris ir piepildīts. Šī funkcija uzzīmē visas četras kvadrātu rindas (tehniski taisnstūri) un aizpilda katru kvadrātu ar tai nodoto krāsu.
5. darbība: funkcija Kods: skaitļi
tukši skaitļi () {
tft.setTextColor (TFT_BLUE); // nosaka ciparu/rakstzīmju krāsu uz zilu
tft.setTextSize (5); // nosaka skaitļa/rakstzīmes lielumu uz 5
tft.setCursor (18, 75); // nosaka kursoru pirmajai ciparu/rakstzīmju rindai
tft.print ("7 8 9 /"); // izdrukā pirmo ciparu/rakstzīmju rindu
tft.setCursor (18, 140); // iestata kursoru ciparu/rakstzīmju otrajai rindai
tft.print ("4 5 6 X"); // izdrukā ciparu/rakstzīmju otro rindu
tft.setCursor (18, 205); // iestata kursoru ciparu/rakstzīmju trešajai rindai
tft.print ("1 2 3 -"); // izdrukā trešo ciparu/rakstzīmju rindu
tft.setCursor (18, 270); // nosaka kursoru ceturtajai ciparu/rakstzīmju rindai
tft.print ("C 0 = +"); // izdrukā ceturto ciparu/rakstzīmju rindu
}
Ciparu () funkcija ir arī vienkārša. Pirmās divas rindas nosaka teksta lielumu un krāsu zilā krāsā. Komanda tft.setCursor () nosaka kursoru pozīcijā katrā rindā, no kuras sākas skaitļu rakstīšana. Pēc tam komanda tft.print () izdrukā ciparus/rakstzīmes virs laukumiem.
6. darbība: kods: numursSelect Function
void numberSelect () {
TSPoint p = ts.getPoint ();
pinMode (XM, OUTPUT);
pinMode (YP, OUTPUT);
ja (p.z> MINPRESSURE) {
p.x = karte (p.x, 250, 845, 0, 239);
p.y = karte (p.y, 245, 860, 0, 319);
ja (rezultāts! = 0) {
rezultāts = 0;
saglabāts_numurs = 0;
tft.print ("Skaidras vērtības");
kavēšanās (500);
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("");
tft.setCursor (cursorLocX, cursorLocY);
}
Lai sāktu funkciju numberSelect (), mēs lūdzam lietotāja ievadi no skārienekrāna ar komandu ts.getPoint (). Kad šie dati ir savākti, mēs pārbaudām, vai nav pārsniegts minimālais spiediens (vai, citiem vārdiem sakot, vai lietotājs ir nospiedis kaut kur uz skārienekrāna). Ja tā ir, x un y koordinātas tiek kartētas no Dekarta koordinātām uz skārienekrānam raksturīgām koordinātām. (0, 0) ir skārienekrāna augšējais kreisais stūris, kur x ass iet pāri un y ass iet uz leju. Nākamā daļa pārbauda, vai rezultātā ir saglabāts numurs. Ja ir, rezultāts un saglabātais_numurs tiek atiestatīti uz 0. Rezultātu laukā tiek izdrukāts ziņojums "TĪRĪT VĒRTĪBAS", un ekrāns tiek notīrīts ar kursoru atpakaļ sākuma stāvoklī.
ja (p.y 60) {// pirmā kvadrātu rinda
ja (px <60)
user_selection = 7;
citādi, ja (p.x <120)
user_selection = 8;
citādi, ja (p.x <180)
user_selection = 9;
cits user_selection = 14;
} cits if (p.y 125) {// otrā kvadrātu rinda
ja (px <60)
user_selection = 4;
citādi, ja (p.x <120)
user_selection = 5;
citādi, ja (p.x <180)
user_selection = 6;
cits user_selection = 13;
} cits if (p.y 190) {// trešā kvadrātu rinda
ja (px <60)
user_selection = 1;
citādi, ja (p.x <120)
user_selection = 2;
citādi, ja (p.x <180)
user_selection = 3;
cits user_selection = 12;
} cits if (p.y> 255) {// ceturtā kvadrātu rinda
ja (px <60)
user_selection = 15;
citādi, ja (p.x <120)
user_selection = 0;
citādi, ja (p.x <180)
user_selection = 10;
cits user_selection = 11;
}
} vēl {
user_selection = 16; // user_selection ir iestatīts uz 16 (nekas nav mainīgs)
}
}
Šī ir daļa, kas nosaka, kura poga ir izvēlēta. Sākot ar augšējo kvadrātu rindu un beidzot ar apakšējo rindu, Arduino meklē vietu, kur ekrāns faktiski tika nospiests. Pēc tam tas kvadrātam piešķir skaitli un saglabā šo numuru lietotāja atlasē. Skaitļi 0-9 atbilst skaitļu kvadrātiem, skaitļi 11-15-operandu kvadrātiem un skaidrajam kvadrātam, bet skaitlis 10-vienādības zīmes kvadrātam. Ja nav atlasīts kvadrāts, tad lietotāja_izvēle ir iestatīta uz 16, kas liks ciklam sākt no jauna (sk. Cilpas funkciju).
7. solis: izbaudiet pabeigto projektu
Tur jums tas ir! Tagad jums ir skārienekrāna kalkulators, kas var veikt saskaitīšanu, atņemšanu, reizināšanu un dalīšanu. Šis projekts mainīja visu veidu, kā es domāju, ka kalkulators darbojas. Strādājot pie šī projekta, atceros, ka stundā savam instruktoram teicu: "Es nekad vairs neskatīšos uz kalkulatoru tāpat!" Funkcijas, kuras jūs kā lietotājs uzskatāt par vienkāršām, ir nedaudz sarežģītas, ja atrodaties aiz datora, mēģinot atdarināt savu ideju. Es ceru, ka jums patika projekts, un es ceru, ka ir mainījusies arī jūsu domāšana par to, kā darbojas kalkulators!
Šeit ir viss kods jūsu ērtībai. Tas ir piepildīts ar komentāriem, tādēļ, ja jums rodas kādas problēmas, viņiem jāparāda, ko katra rinda dara.
Ieteicams:
Arduino Flappy Bird - Arduino 2,4 collu TFT skārienekrāna SPFD5408 putnu spēles projekts: 3 soļi
Arduino Flappy Bird | Arduino 2,4 collu TFT skārienekrāna SPFD5408 putnu spēles projekts: Flappy Bird dažu gadu laikā bija pārāk populāra spēle, un daudzi cilvēki to izveidoja savā veidā, tāpat kā es, es izveidoju savu flappy putna versiju ar Arduino un lēto 2,4 "TFT Skārienekrāns SPFD5408, tāpēc sāksim darbu
Arduino TFT LCD skārienekrāna kalkulators: 3 soļi
Arduino TFT LCD skārienekrāna kalkulators: Sveiki, puiši, šajā pamācībā mēs iemācīsimies izveidot kalkulatoru, izmantojot Arduino Uno ar 3,5 " TFT LCD skārienekrāna displejs. Tātad mēs uzrakstīsim kodu un augšupielādēsim to arduino, kas displejā parādīs kalkulatora saskarni un
Arduino skārienekrāna displejs: 4 soļi
Arduino skārienekrāna displejs: Sveiki! Šodien es jums parādīšu, kā lietot skārienekrāna vairogu ar Arduino Uno. Jūs to varat izmantot kā nelielu displeju citātiem vai attēliem vai visa veida citām lietām
Arduino TFT skārienekrāna durvju slēdzene: 5 soļi
Arduino TFT skārienekrāna durvju slēdzene: šī ir mana pirmā pamācība. Šis projekts izmanto Arduino un 2.8 " TFT skārienekrāns ar paroles skici, lai aktivizētu releju, kas pārtrauc ķēdi līdz magnētiskās slēdzenes durvīm. Fons, durvju RFID slēdzene darbā salūza, nevis pārinstalēja
Arduino ar skārienekrāna displeju: 16 soļi
Arduino ar skārienekrāna displeju: vai vēlaties izveidot personalizētākas izvēlnes un labākas cilvēka/mašīnas saskarnes? Šādiem projektiem varat izmantot Arduino un skārienekrāna displeju. Vai šī ideja izklausās vilinoša? Ja tā, pārbaudiet videoklipu šodien, kur es jums parādīšu dupsi