Kazalo:
- Zaloge
- 1. korak: Povezave strojne opreme
- 2. korak: Koda: globalne definicije in nastavitev
- 3. korak: Koda: Zanka
- 4. korak: Koda: funkcija kvadratov
- 5. korak: Koda: funkcija številk
- Korak 6: Koda: funkcija NumberSelect
- 7. korak: Uživajte v končanem projektu
Video: Arduino kalkulator zaslona na dotik: 7 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
Zdravo! To je projekt izdelave kalkulatorja z zaslonom na dotik z uporabo Arduino Uno in TFT LCD ščita. Pripravil sem koncept za svoj razred programiranja na šoli in izkušnje pri gradnji tega projekta so bile zelo zanimive. Ta kalkulator lahko izvede štiri preproste matematične operacije (seštevanje, odštevanje, množenje in deljenje). Prikaže tudi do dve decimalni mesti za odgovore deljenja, ki jih imajo. Potopimo se takoj! Zaloge za ta projekt so navedene spodaj.
Zaloge
- Arduino Uno
-2.4 TFT LCD ščit (tukaj sem ga kupil:
- kabel USB A do B (kabel za povezavo Arduina z računalnikom)
- Računalnik z nameščenim Arduino IDE
- Prav tako boste morali prenesti dve knjižnici: MCUFRIEND_kbv in zaslon na dotik. Prvega najdete na githubu (povezava: https://github.com/prenticedavid/MCUFRIEND_kbv) ali pa uporabite zip datoteko knjižnice, ki sem jo vključil spodaj. Drugi je v upravitelju knjižnice Arduino za namestitev.
1. korak: Povezave strojne opreme
Povezava ščita zaslona na dotik z Arduino Uno je preprosta in hitra. Vse kar morate storiti je, da poravnate najnižje zatiče na ščitu z najnižjimi zatiči na Arduinu in potisnete ščit v nožice. Zgornji 5V nožica in neoznačeni zatič na strani napajanja ne smeta imeti zatičev iz ščita, z enakimi parametri, ki veljajo za nožice z oznako SCL in SDA na drugi strani plošče. Zdaj smo pripravljeni na kodiranje!
2. korak: Koda: globalne definicije in nastavitev
#vključi
MCUFRIEND_kbv tft; // vseeno trdno ožičen za UNO ščite
#vključi
#določite YP A3
#define XM A2
#določi YM 9
#define XP 8
Zaslon na dotik ts = Zaslon na dotik (XP, YP, XM, YM, 300);
#define MINPRESSURE 10
To je začetek kode, kamor vključimo knjižnice (MCUFRIEND_kbv in zaslon na dotik), določimo zatiče X in Y, nastavimo parametre zaslona na dotik in določimo najmanjši pritisk, ki je potreben, da Arduino registrira uporabniški pritisk.
int ID;
int user_selection;
float shranjeno_številko = 0;
float term1;
int op_num;
plavajoči rezultat;
int kurzorLocX = 5;
int cursorLocY = 20;
Tik pred nastavitvijo moramo nastaviti nekaj globalnih spremenljivk. ID pomaga pri zagonu zaslona na dotik. user_selection vsebuje številko, ki ustreza tipki, ki jo uporabnik izbere ob pritisku na zaslon na dotik. save_number je spremenljivka, ki jo natisnemo na zaslon po vnosu uporabnika (več o tem v zanki). Je plavajoči, tako da lahko vsebuje decimalna števila in cela števila. izraz1 je spremenljivka, v katero je shranjena prva številka enačbe, potem ko je izbran operand. op_num shrani operand kot število (1 za seštevanje, 2 za odštevanje, 3 za množenje in 4 za deljenje). rezultat je spremenljivka, ki se natisne na zaslon, potem ko je uporabnik pritisnil znak enakosti. Je tudi plovec. cursorLocX in cursorLocY sta točki preslikave na zaslonu na dotik, kjer je kazalec večkrat nastavljen (nahaja se v sivi vrstici na vrhu, sicer znani tudi kot polje z rezultati).
void setup () {
tft.reset ();
ID = tft.readID ();
tft.begin (ID);
tft.setRotation (0);
tft.fillScreen (TFT_DARKGREY);
kvadrati ();
številke ();
tft.setTextSize (3);
tft.setTextColor (TFT_BLUE, TFT_DARKGREY);
}
Naša nastavitvena funkcija najprej vsebuje inicializacijo za zaščito zaslona na dotik (vrstice 1-3). Usmerjenost ščita se nastavi z ukazom tft.setRotation (), pri čemer je 0 pokonci. Celoten zaslon je obarvan temno sivo z ukazom tft.fillScreen (), ki ga bomo zapisali na vrhu (razen polja z rezultati). Funkcije kvadratov () in številk () narišejo kvadrate kalkulatorja, polja pobarvajo črno -belo v vzorcu šahovnice in na kvadrate v modro napišejo številke/operande. Do njih bomo prišli v naslednjem koraku. Ukaz tft.setTextSize () nastavi velikost besedila polja z rezultati na 3, kar je srednja pisava. Ukaz tft.setTextColor () nastavi barvo besedila polja z rezultati na modro, ki je zapisana nad temno sivim poljem.
3. korak: Koda: Zanka
void loop () {numberSelect ();
zamuda (100);
if (user_selection == 16) {
;
} drugo {
if (user_selection <10) {
shranjeno_številko = shranjeno_številko * 10 + uporabniški_izbor;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (shranjeno_številko);
} else if (user_selection> 10) {
switch (user_selection) {
primer 11:
op_num = 1;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("+");
izraz1 = shranjeno_številko;
shranjeno_številko = 0;
zlom;
primer 12:
op_num = 2;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("-");
izraz1 = shranjeno_številko;
shranjeno_številko = 0;
zlom;
primer 13:
op_num = 3;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("X");
izraz1 = shranjeno_številko;
shranjeno_številko = 0;
zlom;
primer 14:
op_num = 4;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("/");
izraz1 = shranjeno_številko;
shranjeno_številko = 0;
zlom;
primer 15:
shranjeno_številko = 0;
izraz1 = 0;
op_številka = 0;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("");
zlom;
}
tft.setCursor (cursorLocX, cursorLocY);
To je veliko za žvečenje, zato bom razložil, kar je zgoraj. Začnemo s klicem funkcije numberSelect (), ki vsakemu kvadratu na zaslonu na dotik dodeli številko. Ko uporabnik pritisne enega od teh kvadratov, funkcija nastavi spremenljivko user_selection na številko kvadrata. Prvi stavek if naj teče skozi zanko le, če je bil opravljen veljaven izbor uporabnika. Če je tako, naslednji stavek if vpraša, ali ima user_selection shranjeno število, manjše od 10 (številke 0-9). Če se to zgodi, se shranjeno_številko pomnoži z 10 in številka v user_selection se doda shranjeni_številki, ki je natisnjena v polju z rezultati na zaslonu na dotik. Če se ne, se naslednji stavek if vpraša, ali je vanj shranjeno število, večje od 10 (številke operandov: 11 za +, 12 za -, 13 za X, 14 za /in 15 za kvadrat čistega zaslona). Preklopna funkcija skrbi za vsak primer (določi ga user_selection). Spremenljivki op_num je dodeljena številka, ki ustreza izbranemu operandu (1 za +, 2 za -, 3 za X in 4 za /). Vrednost v shranjenem_številku je shranjena v spremenljivko izraz1, tako da se lahko spremenljivko shranjeno_številko uporabi za drugo polovico enačbe. Simbol operanda je natisnjen skupaj z brisanjem vseh številk v polju z rezultati. Edina izjema je čist kvadrat zaslona, ki ponastavi vse računske spremenljivke in izbriše polje z rezultati kar koli na njem.
} drugo {
switch (op_num) {
primer 1:
rezultat = termin1 + shranjeno_številko;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dvojni (rezultat));
zlom;
primer 2:
rezultat = termin1 - shranjeno_številko;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dvojni (rezultat));
zlom;
primer 3:
rezultat = termin1 * shranjeno_številko;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dvojni (rezultat));
zlom;
primer 4:
rezultat = float (termin1) / float (shranjeno_številko);
tft.setCursor (cursorLocX, cursorLocY);
tft.print (rezultat);
zlom;
}
tft.setCursor (cursorLocX, cursorLocY);
shranjeno_številka = rezultat;
izraz1 = 0;
op_številka = 0;
zamuda (1000);
}
}
}
Zadnji del zanke obravnava dogodek, ko uporabnik izbere znak enakosti (user_selection == 10). Druga funkcija stikala deluje skozi štiri matematične funkcije (določene z op_num). Primer za seštevanje (primer 1) skupaj doda termin1 in shranjeno_številko ter shrani številko v spremenljivko rezultata. Rezultat je natisnjen v polje z rezultati kot dvojnik. Primer odštevanja (primer 2) odšteje shranjeno_številko od izraza1 in shrani število v spremenljivko rezultata. Rezultat je natisnjen v polje z rezultati kot dvojnik. Primer množenja (primer 3) pomnoži izraz1 s shranjeno_številko in shrani število v spremenljivko rezultata. Rezultat je natisnjen v polje z rezultati kot dvojnik. Primer deljenja (primer 4) deli termin1 s shranjeno_številko skupaj in shrani število v spremenljivko rezultata. Rezultat se natisne v polje z rezultati kot plavajoče (ker so odgovori na deljenje lahko decimalna števila). Ko se na zaslon natisnejo številka, operand ali rezultat, se kazalec ponastavi, shranjeno_številko je nastavljeno na prejšnji rezultat, izraz1 in op_num pa ponastavljena.
Nekaj opomb: uporabnik ne more vnesti decimalnih številk v kalkulator zaradi pomanjkanja kvadrata decimalne vejice. Prav tako lahko uporabnik naenkrat naredi samo eno enačbo. Ne morete izračunati rezultata in nato tega rezultata sešteti/odšteti/pomnožiti/deliti. V funkciji numberSelect () je funkcija, ki po tiskanju rezultata počisti zaslon, če je uporabnik pritisnil drug kvadrat.
4. korak: Koda: funkcija kvadratov
void squares () {
// črno -beli kvadrati se izmenjujejo v vsaki vrstici, prva in tretja vrstica pa imata nasproten vzorec kot druga in četrta vrstica
tft.fillRect (0, 60, 60, 65, TFT_BLACK); // prva vrstica kvadratov se začne, črno -bela tft.fillRect (60, 60, 60, 65, TFT_WHITE);
tft.fillRect (120, 60, 60, 65, TFT_BLACK);
tft.fillRect (180, 60, 60, 65, TFT_WHITE); // konča se prva vrstica kvadratov
tft.fillRect (0, 125, 60, 65, TFT_WHITE); // začne se druga vrstica kvadratov, bela do črna tft.fillRect (60, 125, 60, 65, TFT_BLACK);
tft.fillRect (120, 125, 60, 65, TFT_WHITE);
tft.fillRect (180, 125, 60, 65, TFT_BLACK); // konča se druga vrstica kvadratov
tft.fillRect (0, 190, 60, 65, TFT_BLACK); // začne se tretja vrstica kvadratov, črno -bela tft.fillRect (60, 190, 60, 65, TFT_WHITE);
tft.fillRect (120, 190, 60, 65, TFT_BLACK);
tft.fillRect (180, 190, 60, 65, TFT_WHITE); // konča tretja vrsta kvadratov
tft.fillRect (0, 255, 60, 65, TFT_WHITE); // začne se četrta vrstica kvadratov, bela do črna tft.fillRect (60, 255, 60, 65, TFT_BLACK);
tft.fillRect (120, 255, 60, 65, TFT_WHITE);
tft.fillRect (180, 255, 60, 65, TFT_BLACK); // konča četrta vrstica kvadratov
}
Funkcija squares () je precej preprosta. Ukaz tft.fillRect (X1, Y1, X2, Y2, TFT_COLOR) nariše pravokotnik glede na parametre, ki so mu bili posredovani, to so prvi položaji x in y, drugi položaji x in y ter barva, s katero je pravokotnik zapolnjen. Ta funkcija nariše vse štiri vrstice kvadratov (tehnično pravokotnikov) in vsake kvadrate napolni z barvo, ki ji je podana.
5. korak: Koda: funkcija številk
void numbers () {
tft.setTextColor (TFT_BLUE); // barvo številke/znaka nastavi na modro
tft.setTextSize (5); // nastavi številko/velikost znaka na 5
tft.setCursor (18, 75); // nastavi kazalec za prvo vrstico številk/znakov
tft.print ("7 8 9 /"); // natisne prvo vrstico številk/znakov
tft.setCursor (18, 140); // nastavi kazalec za drugo vrstico številk/znakov
tft.print ("4 5 6 X"); // natisne drugo vrstico številk/znakov
tft.setCursor (18, 205); // nastavi kazalec za tretjo vrstico številk/znakov
tft.print ("1 2 3 -"); // natisne tretjo vrstico številk/znakov
tft.setCursor (18, 270); // nastavi kazalec za četrto vrstico številk/znakov
tft.print ("C 0 = +"); // natisne četrto vrstico številk/znakov
}
Tudi funkcija numbers () je preprosta. Prvi dve vrstici nastavita velikost besedila in barvo modro. Ukaz tft.setCursor () nastavi kazalec na položaj v vsaki vrstici, od koder se začne pisanje številk. Nato ukaz tft.print () natisne številke/znake na kvadrate.
Korak 6: Koda: funkcija NumberSelect
void numberSelect () {
TSPoint p = ts.getPoint ();
pinMode (XM, OUTPUT);
pinMode (YP, OUTPUT);
if (p.z> MINPRESSURE) {
p.x = zemljevid (p.x, 250, 845, 0, 239);
p.y = zemljevid (p.y, 245, 860, 0, 319);
if (rezultat! = 0) {
rezultat = 0;
shranjeno_številko = 0;
tft.print ("POČISTI VREDNOSTI");
zamuda (500);
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("");
tft.setCursor (cursorLocX, cursorLocY);
}
Za začetek funkcije numberSelect () prosimo za uporabniški vnos z zaslona na dotik z ukazom ts.getPoint (). Ko so ti podatki zbrani, preverimo, ali je bil minimalni tlak presežen (ali z drugimi besedami, če je uporabnik pritisnil nekje na zaslonu na dotik). Če je, se koordinati x in y preslikata iz kartezijanskih koordinat v koordinate, značilne za zaslon na dotik. (0, 0) je zgornji levi kot zaslona na dotik, pri čemer je os x navzgor, os y pa navzdol. Naslednji del preveri, ali je v rezultatu shranjena številka. Če obstaja, sta rezultat in shranjeno_številko ponastavljeni na 0. Sporočilo "CLEAR VALUES" se natisne nad poljem z rezultati in zaslon se počisti s kazalcem nazaj v začetni položaj.
if (p.y 60) {// prva vrstica kvadratov
če (p.x <60)
user_selection = 7;
drugače če (p.x <120)
user_selection = 8;
drugače če (p.x <180)
user_selection = 9;
else user_selection = 14;
} else if (p.y 125) {// druga vrstica kvadratov
če (p.x <60)
user_selection = 4;
drugače če (p.x <120)
user_selection = 5;
drugače če (p.x <180)
user_selection = 6;
else user_selection = 13;
} else if (p.y 190) {// tretja vrstica kvadratov
če (p.x <60)
user_selection = 1;
drugače če (p.x <120)
user_selection = 2;
drugače če (p.x <180)
user_selection = 3;
else user_selection = 12;
} else if (p.y> 255) {// četrta vrstica kvadratov
če (p.x <60)
user_selection = 15;
drugače če (p.x <120)
user_selection = 0;
drugače če (p.x <180)
user_selection = 10;
else user_selection = 11;
}
} drugo {
user_selection = 16; // user_selection je nastavljeno na 16 (nič spremenljivo)
}
}
To je del, ki določa, kateri gumb je bil izbran. Začenši z zgornjo vrstico kvadratov in konča z spodnjo vrstico, Arduino išče, kje je bil zaslon dejansko pritisnjen. Nato kvadratu dodeli številko in to številko shrani v user_selection. Številke 0-9 ustrezajo številčnim kvadratom, številke 11-15 ustrezajo kvadratom operandov in čistemu kvadratu, številka 10 pa kvadratu znakov enakega. Če ni izbran noben kvadrat, je uporabniški izbor nastavljen na 16, zaradi česar se bo zanka znova zagnala (glej funkcijo zanke).
7. korak: Uživajte v končanem projektu
Evo ga! Zdaj imate kalkulator na zaslonu na dotik, ki omogoča seštevanje, odštevanje, množenje in deljenje. Ta projekt se je spremenil tako, kot sem mislil, da kalkulator deluje. Ko sem delal na tem projektu, se spomnim, da sem svojemu inštruktorju v razredu rekel: "Nikoli več ne bom gledal na kalkulator na enak način!" Uporabniške funkcije, ki se vam zdijo enostavne, so nekoliko težke, ko za računalnikom poskušate posnemati vašo idejo. Upam, da vam je bil projekt všeč, in upam, da se je spremenilo tudi vaše razmišljanje o delovanju kalkulatorja!
Tukaj je celotna koda za vaše udobje. Polno je komentarjev, zato vam morajo v primeru težav pokazati, kaj počne vsaka vrstica.
Priporočena:
Sistem zaklepanja zaslona LCD zaslona: 6 korakov
Sistem za zaklepanje doma z LCD zaslonom: Ta projekt bo deloval kot zaklepanje doma in edini način, da vstopite v hišo, je pritisk na pravilno 3 -mestno kodo. LCD bo deloval kot komunikacijska naprava, ki bo posameznika obvestila, če je vnesel pravilno kodo ali ne. IR
Hi-Fi avdio pretakanje Raspberry Pi s krmiljenjem zaslona na dotik in Max2Play: 9 korakov
Hi-Fi avdio pretakalec Raspberry Pi s krmiljenjem zaslona na dotik in Max2Play: Tu bomo podrobno opisali sestavo novega strežnika na dotik Raspberry Pi. Ustrezen sveženj z vsemi potrebnimi komponentami za to nastavitev najdete v trgovini Max2Play. Če že imate te dele, lahko ohišje kupite tudi ločeno
Arduino TFT LCD kalkulator zaslona na dotik: 3 koraki
Arduino TFT LCD kalkulator na zaslonu na dotik: Pozdravljeni, fantje, v teh navodilih se bomo naučili, kako narediti kalkulator z uporabo Arduino Uno s 3,5 " TFT LCD zaslon na dotik, zato bomo napisali kodo in jo naložili v arduino, ki bo na zaslonu prikazal vmesnik kalkulatorja in bo
Tri vezja senzorja na dotik + vezje časovnika na dotik: 4 koraki
Tri vezja senzorja na dotik + vezje časovnika na dotik: Senzor na dotik je vezje, ki se vklopi, ko zazna dotik na nožicah na dotik. Deluje na prehodni osnovi, to je, da bo obremenitev vklopljena le za čas dotika na zatičih. Tukaj vam bom pokazal tri različne načine, kako občutiti dotik
STIKALO NA DOTIK - Kako narediti stikalo na dotik s tranzistorjem in ploščico: 4 koraki
STIKALO NA DOTIK | Kako narediti stikalo na dotik z uporabo tranzistorja in tiskalne plošče.: Stikalo na dotik je zelo preprost projekt, ki temelji na uporabi tranzistorjev. V tem projektu je uporabljen tranzistor BC547, ki deluje kot stikalo na dotik. OBVEZNO OGLEDITE VIDEO, KI vam bo dal popolne podrobnosti o projektu