Sadržaj:
- Pribor
- Korak 1: Hardverske veze
- Korak 2: Kôd: Globalne definicije i postavljanje
- Korak 3: Kod: Petlja
- Korak 4: Kod: Funkcija kvadrata
- Korak 5: Kod: Funkcija brojeva
- Korak 6: Kod: Funkcija NumberSelect
- Korak 7: Uživajte u svom dovršenom projektu
Video: Arduino kalkulator zaslona osjetljivog na dodir: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
Zdravo! Ovo je projekt izrade kalkulatora ekrana osjetljivog na dodir pomoću Arduino Uno i TFT LCD ekrana. Osmislio sam koncept za programiranje kod kuće, a iskustvo u izgradnji ovog projekta bilo je vrlo zanimljivo. Ovaj kalkulator može izvesti četiri jednostavne matematičke operacije (zbrajanje, oduzimanje, množenje i dijeljenje). Također prikazuje do dvije decimalne točke za odgovore podjele koji ih imaju. Uronimo odmah! U nastavku su navedene zalihe za ovaj projekt.
Pribor
- Arduino Uno
-2.4 TFT LCD štit (ovdje sam ga kupio:
- USB A do B kabel (kabel za spajanje Arduina na računalo)
- Računalo s instaliranim Arduino IDE -om
- Također ćete morati preuzeti dvije biblioteke: MCUFRIEND_kbv i zaslon osjetljiv na dodir. Prvi možete pronaći na githubu (veza: https://github.com/prenticedavid/MCUFRIEND_kbv) ili možete upotrijebiti zip datoteku knjižnice koju sam naveo u nastavku. Drugi je u upravitelju Arduino knjižnice za instalaciju.
Korak 1: Hardverske veze
Spajanje ekrana osjetljivog na dodir s Arduino Uno jednostavno je i brzo. Sve što trebate učiniti je poravnati najniže igle na štitu s najnižim iglama na Arduinu i gurnuti štit u igle. Gornji pin od 5 V i neoznačeni pin na strani napajanja ne bi trebali imati pinove sa štita u sebi, s istim parametrima koji se odnose na pinove označene SCL i SDA s druge strane ploče. Sada smo spremni za kodiranje!
Korak 2: Kôd: Globalne definicije i postavljanje
#uključi
MCUFRIEND_kbv tft; // ionako spojen za UNO štitove
#uključi
#definirajte YP A3
#definirajte XM A2
#definirajte YM 9
#define XP 8
TouchScreen ts = Zaslon osjetljiv na dodir (XP, YP, XM, YM, 300);
#define MINPRESSURE 10
Ovo je početak koda, gdje uključujemo knjižnice (MCUFRIEND_kbv i zaslon osjetljiv na dodir), definiramo X i Y pinove, postavljamo parametre zaslona osjetljivog na dodir i definiramo minimalni pritisak potreban za Arduino da registrira korisnički tisak.
int ID;
int user_selection;
float spremljeni_broj = 0;
float term1;
int op_num;
plutajući rezultat;
int kurzorLocX = 5;
int cursorLocY = 20;
Neposredno prije postavljanja moramo postaviti neke globalne varijable. ID pomaže pri pokretanju zaslona osjetljivog na dodir. user_selection sadrži broj koji odgovara tipki koju korisnik odabere pritiskom na dodirni zaslon. saved_number je varijabla koju ispisujemo na zaslon nakon unosa korisnika (više o tome u petlji). On je plutajući pa može sadržavati decimalne brojeve kao i cijele brojeve. izraz1 je varijabla u koju se sprema prvi broj jednadžbe nakon odabira operanda. op_num sprema operand kao broj (1 za zbrajanje, 2 za oduzimanje, 3 za množenje i 4 za dijeljenje). rezultat je varijabla koja se ispisuje na zaslon nakon što je korisnik pritisnuo znak jednakosti. Također je i plovak. cursorLocX i cursorLocY točke su preslikavanja na zaslonu osjetljivom na dodir gdje je pokazivač postavljen na više puta (nalazi se u sivoj traci na vrhu, inače poznato kao polje rezultata).
void setup () {
tft.reset ();
ID = tft.readID ();
tft.begin (ID);
tft.setRotation (0);
tft.fillScreen (TFT_DARKGREY);
kvadrati ();
brojevi ();
tft.setTextSize (3);
tft.setTextColor (TFT_BLUE, TFT_DARKGREY);
}
Naša funkcija postavljanja prvo sadrži inicijalizaciju za zaslon osjetljiv na dodir (retci 1-3). Orijentacija štita postavlja se naredbom tft.setRotation (), pri čemu je 0 uspravno. Cijeli zaslon obojen je tamno sivom bojom pomoću naredbe tft.fillScreen () koju ćemo napisati iznad (osim polja s rezultatima). Funkcije kvadrata () i brojeva () iscrtavaju kvadrate kalkulatora, boje kvadrate crno -bijelo u šahovnici i upisuju brojeve/operande na kvadrate plavom bojom. Do njih ćemo doći u sljedećem koraku. Naredba tft.setTextSize () postavlja veličinu teksta polja s rezultatima na 3, što je srednji font. Naredba tft.setTextColor () postavlja boju teksta polja rezultata na plavu, koja se ispisuje preko tamno sivog polja.
Korak 3: Kod: Petlja
void loop () {numberSelect ();
kašnjenje (100);
if (user_selection == 16) {
;
}drugo{
if (user_selection <10) {
spremljeni_broj = spremljeni_broj * 10 + korisnički_izbor;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (spremljeni_broj);
} else if (user_selection> 10) {
switch (user_selection) {
slučaj 11:
op_broj = 1;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("+");
izraz1 = spremljeni_broj;
spremljeni_broj = 0;
pauza;
slučaj 12:
op_broj = 2;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("-");
izraz1 = spremljeni_broj;
spremljeni_broj = 0;
pauza;
slučaj 13:
op_broj = 3;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("X");
izraz1 = spremljeni_broj;
spremljeni_broj = 0;
pauza;
slučaj 14:
op_broj = 4;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("/");
izraz1 = spremljeni_broj;
spremljeni_broj = 0;
pauza;
slučaj 15:
spremljeni_broj = 0;
pojam1 = 0;
op_broj = 0;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("");
pauza;
}
tft.setCursor (cursorLocX, cursorLocY);
Ovo je puno za žvakanje pa ću objasniti ono što je gore. Počinjemo pozivanjem funkcije numberSelect () koja dodjeljuje broj svakom kvadratu na zaslonu osjetljivom na dodir. Kad korisnik pritisne jedan od tih kvadrata, funkcija postavlja varijablu user_selection na broj kvadrata. Prva naredba if će se izvoditi kroz petlju samo ako je izvršen valjani odabir korisnika. Ako jest, sljedeća naredba if pita ima li user_selection spremljen broj manji od 10 (brojevi 0-9). Ako se to dogodi, spremljeni broj pomnožava se s 10, a broj u korisničkom odabiru dodaje se spremljenom broju koji se ispisuje u polju rezultata na zaslonu osjetljivom na dodir. Ako nema, sljedeća naredba if pita ima li user_selection spremljen broj veći od 10 (brojevi operanda: 11 za +, 12 za -, 13 za X, 14 za /i 15 za čist kvadrat). Funkcija prekidača brine se za svaki slučaj (određuje user_selection). Varijabli op_num daje se broj koji odgovara operandu koji je odabran (1 za +, 2 za -, 3 za X i 4 za /). Vrijednost u spremljenom_broju sprema se u varijablu izraz1 tako da se varijabla spremljeni_broj može koristiti za drugu polovicu jednadžbe. Simbol operanda ispisuje se na ekranu zajedno s brisanjem svih brojeva u polju rezultata. Jedina iznimka je čist kvadrat zaslona, koji resetira sve varijable izračuna i briše polje rezultata s bilo čega na njemu.
}drugo{
prekidač (op_broj) {
slučaj 1:
rezultat = termin1 + spremljeni_broj;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dvostruki (rezultat));
pauza;
slučaj 2:
rezultat = termin1 - spremljeni_broj;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dvostruki (rezultat));
pauza;
slučaj 3:
rezultat = termin1 * spremljeni_broj;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dvostruki (rezultat));
pauza;
slučaj 4:
rezultat = float (termin1) / float (spremljeni_broj);
tft.setCursor (cursorLocX, cursorLocY);
tft.print (rezultat);
pauza;
}
tft.setCursor (cursorLocX, cursorLocY);
spremljeni_broj = rezultat;
pojam1 = 0;
op_broj = 0;
kašnjenje (1000);
}
}
}
Posljednji dio petlje bavi se događajem kada je korisnik odabrao znak jednakosti (user_selection == 10). Druga funkcija prekidača radi kroz četiri matematičke funkcije (određene op_num). Slučaj zbrajanja (slučaj 1) dodaje termin1 i spremljeni_broj i sprema broj u varijablu rezultata. Rezultat se ispisuje u polje rezultata kao dvostruki. Slučaj oduzimanja (slučaj 2) oduzima sačuvani_broj od termina1 i sprema broj u varijablu rezultata. Rezultat se ispisuje u polje rezultata kao dvostruki. Slučaj množenja (slučaj 3) množi izraz1 sa spremljenim brojem i sprema broj u varijablu rezultata. Rezultat se ispisuje u polje rezultata kao dvostruki. Slučaj podjele (slučaj 4) dijeli termin1 sa spremljenim_brojem zajedno i sprema broj u varijablu rezultata. Rezultat se ispisuje u polje rezultata kao float (jer odgovori podjele mogu biti decimalni brojevi). Nakon što se na ekranu ispiše događaj, broj, operand ili rezultat, kursor se resetira, broj_spremnika postavi na prethodni rezultat, a pojam1 i op_num se resetiraju.
Nekoliko napomena: korisnik ne može unijeti decimalne brojeve u kalkulator zbog nedostatka kvadrata decimalne točke. Također, korisnik može raditi samo jednu jednadžbu odjednom. Ne možete izračunati rezultat, a zatim taj rezultat zbrojiti/oduzeti/pomnožiti/podijeliti. U funkciji numberSelect () postoji funkcija koja briše zaslon nakon ispisa rezultata ako je korisnik pritisnuo drugi kvadrat.
Korak 4: Kod: Funkcija kvadrata
void squares () {{100} {101}
// crno -bijeli kvadratići izmjenjuju se u svakom redu, a prvi i treći red imaju suprotan uzorak od drugog i četvrtog reda
tft.fillRect (0, 60, 60, 65, TFT_BLACK); // počinje prvi red kvadrata, crno -bijelo tft.fillRect (60, 60, 60, 65, TFT_WHITE);
tft.fillRect (120, 60, 60, 65, TFT_BLACK);
tft.fillRect (180, 60, 60, 65, TFT_WHITE); // završava prvi red kvadrata
tft.fillRect (0, 125, 60, 65, TFT_WHITE); // počinje drugi red kvadrata, bijelo do crno tft.fillRect (60, 125, 60, 65, TFT_BLACK);
tft.fillRect (120, 125, 60, 65, TFT_WHITE);
tft.fillRect (180, 125, 60, 65, TFT_BLACK); // završava drugi red kvadrata
tft.fillRect (0, 190, 60, 65, TFT_BLACK); // počinje treći red kvadrata, crno -bijelo tft.fillRect (60, 190, 60, 65, TFT_WHITE);
tft.fillRect (120, 190, 60, 65, TFT_BLACK);
tft.fillRect (180, 190, 60, 65, TFT_WHITE); // završava treći red kvadrata
tft.fillRect (0, 255, 60, 65, TFT_WHITE); // počinje četvrti red kvadrata, bijelo do crno tft.fillRect (60, 255, 60, 65, TFT_BLACK);
tft.fillRect (120, 255, 60, 65, TFT_WHITE);
tft.fillRect (180, 255, 60, 65, TFT_BLACK); // završava četvrti red kvadrata
}
Funkcija squares () prilično je jednostavna. Naredba tft.fillRect (X1, Y1, X2, Y2, TFT_COLOR) iscrtava pravokutnik prema parametrima koji su mu preneseni, a to su prve pozicije x i y, druge pozicije x i y i boja kojom je pravokutnik ispunjen. Ova funkcija iscrtava sva četiri reda kvadrata (tehnički pravokutnici) i ispunjava svaki kvadrat bojom koja mu je prenesena.
Korak 5: Kod: Funkcija brojeva
void numbers () {
tft.setTextColor (TFT_BLUE); // postavlja boju/broj znaka na plavu
tft.setTextSize (5); // postavlja broj/veličinu znaka na 5
tft.setCursor (18, 75); // postavlja kursor za prvi red brojeva/znakova
tft.print ("7 8 9 /"); // ispisuje prvi red brojeva/znakova
tft.setCursor (18, 140); // postavlja kursor za drugi redak brojeva/znakova
tft.print ("4 5 6 X"); // ispisuje drugi red brojeva/znakova
tft.setCursor (18, 205); // postavlja kursor za treći redak brojeva/znakova
tft.print ("1 2 3 -"); // ispisuje treći red brojeva/znakova
tft.setCursor (18, 270); // postavlja kursor za četvrti red brojeva/znakova
tft.print ("C 0 = +"); // ispisuje četvrti red brojeva/znakova
}
Funkcija numbers () također je jednostavna. Prva dva retka povećavaju veličinu teksta, a boju plavu. Naredba tft.setCursor () postavlja kursor na položaj u svakom retku odakle počinje pisanje brojeva. Zatim naredba tft.print () ispisuje brojeve/znakove preko kvadrata.
Korak 6: Kod: Funkcija NumberSelect
void numberSelect () {
TSPoint p = ts.getPoint ();
pinMode (XM, OUTPUT);
pinMode (YP, OUTPUT);
if (p.z> MINPRISAK) {
p.x = karta (p.x, 250, 845, 0, 239);
p.y = karta (p.y, 245, 860, 0, 319);
if (rezultat! = 0) {
rezultat = 0;
spremljeni_broj = 0;
tft.print ("CLEAR VALUES");
kašnjenje (500);
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("");
tft.setCursor (cursorLocX, cursorLocY);
}
Za početak funkcije numberSelect (), tražimo korisnički unos s zaslona osjetljivog na dodir pomoću naredbe ts.getPoint (). Nakon što su ti podaci prikupljeni, provjeravamo je li prekoračen minimalni tlak (ili, drugim riječima, je li korisnik pritisnuo negdje na zaslonu osjetljivom na dodir). Ako jest, koordinate x i y preslikavaju se iz kartezijanskih koordinata u koordinate specifične za zaslon osjetljiv na dodir. (0, 0) je gornji lijevi kut zaslona osjetljivog na dodir, s osi x koja ide preko, a osi y prema dolje. Sljedeći dio provjerava postoji li u rezultatu spremljen broj. Ako postoji, rezultat i spremljeni_broj se poništavaju na 0. Poruka "CLEAR VALUES" se ispisuje preko polja s rezultatima, a zaslon se briše s pokazivačem natrag u početni položaj.
if (p.y 60) {// prvi red kvadrata
ako (p.x <60)
user_selection = 7;
inače ako (p.x <120)
user_selection = 8;
inače ako (p.x <180)
user_selection = 9;
else user_selection = 14;
} else if (p.y 125) {// drugi red kvadrata
ako (p.x <60)
user_selection = 4;
inače ako (p.x <120)
user_selection = 5;
inače ako (p.x <180)
user_selection = 6;
else user_selection = 13;
} else if (p.y 190) {// treći red kvadrata
ako (p.x <60)
user_selection = 1;
inače ako (p.x <120)
user_selection = 2;
inače ako (p.x <180)
user_selection = 3;
else user_selection = 12;
} else if (p.y> 255) {// četvrti red kvadrata
ako (p.x <60)
user_selection = 15;
inače ako (p.x <120)
user_selection = 0;
inače ako (p.x <180)
user_selection = 10;
else user_selection = 11;
}
}drugo{
user_selection = 16; // user_selection postavljeno je na 16 (ništa varijabilno)
}
}
Ovo je dio koji određuje koji je gumb odabran. Počevši od gornjeg reda kvadrata i završavajući donjim redom, Arduino traži mjesto na kojem je zaslon zapravo pritisnut. Zatim kvadratu dodjeljuje broj i sprema taj broj u user_selection. Brojevi 0-9 odgovaraju kvadratima brojeva, brojevi 11-15 odgovaraju kvadratima operanda i jasnom kvadratu, a broj 10 odgovara kvadratu znaka jednakosti. Ako nije odabran kvadrat, tada je user_selection postavljen na 16, što će petlju pokrenuti iznova (vidi funkciju petlje).
Korak 7: Uživajte u svom dovršenom projektu
Evo ga! Sada imate kalkulator zaslona osjetljivog na dodir koji može vršiti zbrajanje, oduzimanje, množenje i dijeljenje. Ovaj projekt promijenio je način na koji sam mislio da kalkulator radi. Dok sam radio na ovom projektu, sjećam se da sam svom instruktoru na satu rekao: "Nikad više neću gledati kalkulator na isti način!" Funkcije za koje vi kao korisnik mislite da su jednostavne donekle su teške kada stojite za računalom i pokušavate oponašati svoju ideju. Nadam se da vam se svidio projekt, i nadam se da se promijenilo i vaše razmišljanje o načinu rada kalkulatora!
Evo cijelog koda radi vaše udobnosti. Puno je komentara pa ako imate problema, trebali bi vam pokazati što svaki redak radi.
Preporučeni:
Zakretanje Raspberry Pi zaslona i zaslona osjetljivog na dodir: 4 koraka
Rotiranje Raspberry Pi zaslona i zaslona osjetljivog na dodir: Ovo je osnovno uputstvo koje će vam pokazati kako rotirati unos zaslona i zaslona osjetljivog na dodir za bilo koji Raspberry Pi koji radi na Buster Raspbian operativnom sustavu, ali ovu metodu koristim od Jessie. Slike korištene u ovome su s Raspberry Pi
Pokretanje bez zaslona / zaslona (bez glave) na Raspberry Pi ili drugim računalima temeljenim na Linuxu / unixu: 6 koraka
Pokretanje bez zaslona / zaslona (bez glave) na Raspberry Pi ili drugim računalima sa sustavom Linux / unix: Kada većina ljudi kupi Raspberry PI, misle da im je potreban zaslon računala. Ne trošite novac na nepotrebne računalne monitore i tipkovnice. Ne gubite vrijeme na premještanje tipkovnica i monitora između računala. Ne vežite televizor kad nema
Raspberry Pi Hi-Fi audio strimer s kontrolom zaslona osjetljivim na dodir i Max2Play: 9 koraka
Raspberry Pi Hi-Fi audio streamer s kontrolom zaslona osjetljivim na dodir i Max2Play: Ovdje ćemo detaljno opisati montažu novog Raspberry Pi Touch streamera. Odgovarajući paket sa svim potrebnim komponentama za ovu postavku može se pronaći u Max2Play trgovini. Ako već posjedujete ove dijelove, kućište se može kupiti i zasebno
Arduino Flappy Bird - Arduino 2.4 "TFT zaslon osjetljiv na dodir SPFD5408 Projekt igre ptica: 3 koraka
Arduino Flappy Bird | Arduino 2.4 "TFT zaslon osjetljiv na dodir SPFD5408 Projekt igre ptica: Flappy Bird je tamo bila previše popularna igra u nekoliko godina i mnogi su je stvorili na svoj način pa sam i ja stvorio svoju verziju flappy bird s Arduinom i jeftinim 2.4" TFT " Zaslon osjetljiv na dodir SPFD5408, Pa krenimo
Arduino TFT LCD kalkulator zaslona osjetljivog na dodir: 3 koraka
Arduino TFT LCD kalkulator ekrana osjetljivog na dodir: Zdravo dečki, u ovim uputama naučit ćemo kako napraviti kalkulator pomoću Arduino Uno sa 3.5 " TFT LCD zaslon osjetljiv na dodir. Dakle, napisat ćemo kôd i prenijeti ga na arduino koji će prikazati sučelje kalkulatora na zaslonu i