Përmbajtje:
- Furnizimet
- Hapi 1: Lidhjet e harduerit
- Hapi 2: Kodi: Përkufizimet dhe Konfigurimi Global
- Hapi 3: Kodi: Lak
- Hapi 4: Kodi: Funksioni i shesheve
- Hapi 5: Kodi: Funksioni i Numrave
- Hapi 6: Kodi: NumberSelect Funksioni
- Hapi 7: Shijoni projektin tuaj të përfunduar
Video: Llogaritësi i ekranit me prekje Arduino: 7 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:18
Përshëndetje! Ky është një projekt për të bërë një kalkulator të ekranit me prekje duke përdorur një Arduino Uno dhe një mburojë LCD TFT. Kam dalë me konceptin për klasën time të programimit në shkollën shtëpiake, dhe përvoja në ndërtimin e këtij projekti ishte shumë interesante. Ky kalkulator mund të bëjë katër veprime të thjeshta matematikore (mbledhje, zbritje, shumëzim dhe pjesëtim). Gjithashtu shfaq deri në dy pikë dhjetore për përgjigjet e pjesëtimit që i kanë ato. Le të zhyten menjëherë! Furnizimet për këtë projekt janë të listuara më poshtë.
Furnizimet
- Arduino Uno
-2.4 TFT LCD Shield (ja ku e bleva:
- Kabllo USB A në B (kabllo për të lidhur Arduino me kompjuterin)
- Kompjuter me Arduino IDE të instaluar
- Ju gjithashtu do të duhet të shkarkoni dy biblioteka: MCUFRIEND_kbv dhe Touchscreen. E para mund ta gjeni në github (lidhja: https://github.com/prenticedavid/MCUFRIEND_kbv) ose mund të përdorni skedarin zip të bibliotekës që kam përfshirë më poshtë. E dyta është në menaxherin e Bibliotekës Arduino për instalim.
Hapi 1: Lidhjet e harduerit
Lidhja e mburojës së ekranit me prekje me Arduino Uno është e thjeshtë dhe e shpejtë. E tëra çfarë ju duhet të bëni është të vendosni kunjat më të ulët në mburojë me kunjat më të ulëta në Arduino dhe ta shtyni mburojën në kunjat. Kunja 5V e lartë dhe kunja pa etiketë në anën e energjisë nuk duhet të kenë kunja nga mburoja në to, me të njëjtat parametra që zbatohen për kunjat e etiketuar SCL dhe SDA në anën tjetër të tabelës. Tani, ne jemi gati për kodim!
Hapi 2: Kodi: Përkufizimet dhe Konfigurimi Global
#përfshi
MCUFRIEND_kbv tft; // sidoqoftë, për mburojat e OKB-së
#përfshi
#përcakto YP A3
#përcakto XM A2
#përcakto YM 9
#përcaktoni XP 8
TouchScreen ts = Ekran me prekje (XP, YP, XM, YM, 300);
#përcaktoni MINPRESIONIN 10
Ky është fillimi i kodit, ku përfshijmë bibliotekat (MCUFRIEND_kbv & Touchscreen), përcaktojmë kunjat X dhe Y, vendosim parametrat e ekranit me prekje dhe përcaktojmë presionin minimal të nevojshëm që Arduino të regjistrojë një shtyp të përdoruesit.
ID e int;
int user_selection;
noton ruajtur_numri = 0;
termi notues1;
int op_num;
rezultati notues;
int cursorLocX = 5;
int cursorLocY = 20;
Menjëherë para konfigurimit, ne duhet të krijojmë disa ndryshore globale. ID ndihmon në funksionimin e ekranit me prekje. user_selection mban një numër që korrespondon me çelësin që përdoruesi zgjedh kur shtyp ekranin me prekje. save_number është variabla që shtypim në ekran pas një hyrje të përdoruesit (më shumë për këtë në lak). Shtë një noton kështu që mund të mbajë numra dhjetorë, si dhe numra të plotë. term1 është ndryshorja në të cilën ruhet numri i parë i ekuacionit pasi është zgjedhur një operand. op_num ruan operandin si një numër (1 për mbledhjen, 2 për zbritjen, 3 për shumëzimin dhe 4 për pjesëtimin). rezultati është ndryshorja që shtypet në ekran pasi përdoruesi të ketë shtypur shenjën e barazimit. Alsoshtë gjithashtu një noton. cursorLocX dhe cursorLocY janë pikat e hartës në ekranin me prekje ku kursori është vendosur në shumë herë (ai ndodhet në shiritin gri në krye, i njohur ndryshe si fusha e rezultateve).
void setup () {
tft.reset ();
ID = tft.readID ();
tft.filloj (ID);
tft.setRotation (0);
tft.fillScreen (TFT_DARKGREY);
sheshe ();
numrat ();
tft.setTextSize (3);
tft.setTextColor (TFT_BLUE, TFT_DARKGREY);
}
Funksioni ynë i konfigurimit së pari përmban inicimin për mburojën e ekranit me prekje (rreshtat 1-3). Orientimi i mburojës vendoset duke përdorur komandën tft.setRotation (), me 0 të jetë i drejtë. I gjithë ekrani është me ngjyrë gri të errët me komandën tft.fillScreen (), të cilën do ta shkruajmë në krye (përveç fushës së rezultateve). Funksionet e katrorëve () dhe numrave () vizatojnë katrorët e kalkulatorit, ngjyrosin katrorët bardh e zi në një model të tabelës së checker -it dhe shkruajnë numra/operandë në katrorë me ngjyrë blu. Ne do të shkojmë tek ata në hapin tjetër. Komanda tft.setTextSize () vendos madhësinë e tekstit të fushës së rezultateve në 3, e cila është një font mesatar. Komanda tft.setTextColor () vendos ngjyrën e tekstit të fushës së rezultateve në blu, e cila shkruhet mbi fushën gri të errët.
Hapi 3: Kodi: Lak
void loop () {numberSelect ();
vonesë (100);
nëse (përzgjedhja e përdoruesit == 16) {
;
} tjetër {
nëse (përzgjedhja e përdoruesit <10) {
numri_i ruajtur = numri i ruajtur * 10 + përzgjedhja e përdoruesit;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (numri_i ruajtur);
} tjetër nëse (përzgjedhja e përdoruesit> 10) {
kaloni (përzgjedhja e përdoruesit) {
rasti 11:
op_num = 1;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("+");
term1 = numri_i ruajtur;
numri_i ruajtur = 0;
pushim;
rasti 12:
op_num = 2;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("-");
term1 = numri_i ruajtur;
numri_i ruajtur = 0;
pushim;
rasti 13:
op_num = 3;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("X");
term1 = numri_i ruajtur;
numri_i ruajtur = 0;
pushim;
rasti 14:
op_num = 4;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("/");
term1 = numri_i ruajtur;
numri_i ruajtur = 0;
pushim;
rasti 15:
numri_i ruajtur = 0;
term1 = 0;
op_num = 0;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("");
pushim;
}
tft.setCursor (cursorLocX, cursorLocY);
Kjo është shumë për tu përtypur, kështu që unë do të shpjegoj atë që është më lart. Fillojmë duke thirrur funksionin numberSelect (), i cili i cakton një numër secilit katror në ekranin me prekje. Kur një përdorues shtyp një nga ato sheshe, funksioni vendos ndryshoren e zgjedhjes së përdoruesit në numrin e katrorit. Deklarata e parë nëse do të kalojë përmes lakut vetëm nëse është bërë një përzgjedhje e vlefshme e përdoruesit. Nëse është, deklarata tjetër if pyet nëse user_selection ka një numër më të vogël se 10 të ruajtur në të (numrat 0-9). Nëse po, numri i ruajtur shumëzohet me 10 dhe numri në përzgjedhjen e përdoruesit i shtohet numrit të ruajtur, i cili shtypet në fushën e rezultateve në ekranin me prekje. Nëse jo, deklarata tjetër if pyet nëse user_selection ka një numër më të madh se 10 të ruajtur në të (numrat e operandit: 11 për +, 12 për -, 13 për X, 14 për /, dhe 15 për katrorin e ekranit të qartë) Një funksion ndërprerës kujdeset për secilin rast (i përcaktuar nga përzgjedhja e përdoruesit). Ndryshores op_num i jepet një numër që i përgjigjet operandit të zgjedhur (1 për +, 2 për -, 3 për X, dhe 4 për /). Vlera në numrin e ruajtur ruhet në termin e ndryshueshëm1 në mënyrë që ndryshorja e ruajtur të numrit të përdoret për gjysmën e dytë të ekuacionit. Simboli i operandit shtypet në ekran së bashku me pastrimin e çdo numri në fushën e rezultateve. Përjashtimi i vetëm është katrori i qartë i ekranit, i cili rivendos të gjitha variablat e llogaritjes dhe pastron fushën e rezultateve nga çdo gjë në të.
} tjetër {
kaloni (op_num) {
rasti 1:
rezultat = term1 + numër i ruajtur;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dyshe (rezultati));
pushim;
rasti 2:
rezultat = term1 - ruajtur_numri;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dyfish (rezultat));
pushim;
rasti 3:
rezultat = term1 * ruajtur_numer;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dyfish (rezultat));
pushim;
rasti 4:
rezultati = noton (term1) / noton (numri_i ruajtur);
tft.setCursor (cursorLocX, cursorLocY);
tft.print (rezultati);
pushim;
}
tft.setCursor (cursorLocX, cursorLocY);
ruajtur_numri = rezultati;
term1 = 0;
op_num = 0;
vonesa (1000);
}
}
}
Pjesa e fundit e lakut merret me ngjarjen e përdoruesit që zgjedh shenjën e barabartë (përzgjedhja e përdoruesit == 10). Një funksion tjetër ndërprerës punon përmes katër funksioneve matematikore (të përcaktuara nga op_num). Rasti shtesë (rasti 1) shton termin1 dhe numrin e ruajtur së bashku dhe e ruan numrin në ndryshoren e rezultatit. Rezultati shtypet në fushën e rezultateve si dyshe. Rasti i zbritjes (rasti 2) zbret numrin e ruajtur nga termi1 dhe e ruan numrin në ndryshoren e rezultatit. Rezultati shtypet në fushën e rezultateve si dyshe. Rasti i shumëzimit (rasti 3) shumëzon termin1 me numrin e ruajtur dhe ruan numrin në ndryshoren e rezultatit. Rezultati shtypet në fushën e rezultateve si dyshe. Rasti i ndarjes (rasti 4) ndan termin1 me numrin e ruajtur së bashku dhe ruan numrin në ndryshoren e rezultatit. Rezultati shtypet në fushën e rezultateve si notë (sepse përgjigjet e pjesëtimit mund të jenë numra dhjetorë). Pas rastit të shtypjes në ekran të një numri, operandi ose rezultati, kursori rivendoset, numri i ruajtur vendoset në rezultatin e mëparshëm dhe termi 1 & op_num janë rivendosur.
Disa shënime: përdoruesi nuk mund të fusë numra dhjetorë në kalkulator për shkak të mungesës së një katrori të pikës dhjetore. Gjithashtu, përdoruesi mund të bëjë vetëm një ekuacion në të njëjtën kohë. Ju nuk mund të llogaritni një rezultat dhe më pas të shtoni/zbritni/shumëzoni/ndani atë rezultat. Në funksionin numberSelect (), ekziston një funksion që pastron ekranin pasi të jetë printuar një rezultat nëse një përdorues ka shtypur një katror tjetër.
Hapi 4: Kodi: Funksioni i shesheve
katrorë të pavlefshëm () {
// Katrorët bardh e zi alternohen në secilën rresht dhe rreshtat e parë dhe të tretë kanë një model të kundërt se rreshtat e dytë dhe të katërt
tft.fillRect (0, 60, 60, 65, TFT_BLACK); // fillon rreshti i parë i katrorëve, i zi në të bardhë tft.fillRect (60, 60, 60, 65, TFT_WHITE);
tft.fillRect (120, 60, 60, 65, TFT_BLACK);
tft.fillRect (180, 60, 60, 65, TFT_WHITE); // rreshti i parë i shesheve përfundon
tft.fillRect (0, 125, 60, 65, TFT_WHITE); // fillon rreshti i dytë i shesheve, i bardhë në të zi tft.fillRect (60, 125, 60, 65, TFT_BLACK);
tft.fillRect (120, 125, 60, 65, TFT_WHITE);
tft.fillRect (180, 125, 60, 65, TFT_BLACK); // rreshti i dytë i shesheve përfundon
tft.fillRect (0, 190, 60, 65, TFT_BLACK); // fillon rreshti i tretë i shesheve, i zi në të bardhë tft.fillRect (60, 190, 60, 65, TFT_WHITE);
tft.fillRect (120, 190, 60, 65, TFT_BLACK);
tft.fillRect (180, 190, 60, 65, TFT_WHITE); // rreshti i tretë i shesheve përfundon
tft.fillRect (0, 255, 60, 65, TFT_WHITE); // rreshti i katërt i shesheve fillon, e bardhë në të zezë tft.fillRect (60, 255, 60, 65, TFT_BLACK);
tft.fillRect (120, 255, 60, 65, TFT_WHITE);
tft.fillRect (180, 255, 60, 65, TFT_BLACK); // rreshti i katërt i shesheve përfundon
}
Funksioni i shesheve () është mjaft i drejtpërdrejtë. Komanda tft.fillRect (X1, Y1, X2, Y2, TFT_COLOR) tërheq një drejtkëndësh sipas parametrave që i kalohen atij, të cilat janë pozicionet e para të x dhe y, pozicionet e dyta të x dhe y dhe ngjyrën me të cilën është mbushur drejtkëndëshi Me Ky funksion tërheq të katër rreshtat e katrorëve (teknikisht drejtkëndëshat) dhe mbush secilin katror me ngjyrën që i është kaluar.
Hapi 5: Kodi: Funksioni i Numrave
numrat e pavlefshëm () {
tft.setTextColor (TFT_BLUE); // vendos numrin/ngjyrën e karakterit në blu
tft.setTextSize (5); // vendos numrin/madhësinë e karakterit në 5
tft.setCursor (18, 75); // vendos kursorin për rreshtin e parë të numrave/karaktereve
tft.print ("7 8 9 /"); // printon rreshtin e parë të numrave/karaktereve
tft.setCursor (18, 140); // vendos kursorin për rreshtin e dytë të numrave/karaktereve
tft.print ("4 5 6 X"); // printon rreshtin e dytë të numrave/karaktereve
tft.setCursor (18, 205); // vendos kursorin për rreshtin e tretë të numrave/karaktereve
tft.print ("1 2 3 -"); // printon rreshtin e tretë të numrave/karaktereve
tft.setCursor (18, 270); // vendos kursorin për rreshtin e katërt të numrave/karaktereve
tft.print ("C 0 = +"); // printon rreshtin e katërt të numrave/karaktereve
}
Funksioni i numrave () është gjithashtu i drejtpërdrejtë. Dy rreshtat e parë e vendosin madhësinë e tekstit më të madh dhe ngjyrën në blu. Komanda tft.setCursor () e vendos kursorin në pozicionin në çdo rresht nga fillon shkrimi i numrave. Pastaj komanda tft.print () printon numrat/karakteret mbi katrorët.
Hapi 6: Kodi: NumberSelect Funksioni
void numberSelect () {
TSPoint p = ts.getPoint ();
pinMode (XM, OUTPUT);
pinMode (YP, OUTPUT);
nëse (p.z> MINPRESSURE) {
p.x = hartë (p.x, 250, 845, 0, 239);
p.y = hartë (p.y, 245, 860, 0, 319);
nëse (rezultati! = 0) {
rezultati = 0;
numri_i ruajtur = 0;
tft.print ("VLERAT E PASTRA");
vonesë (500);
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("");
tft.setCursor (cursorLocX, cursorLocY);
}
Për të filluar funksionin numberSelect (), ne kërkojmë hyrje të përdoruesit nga ekrani me prekje me komandën ts.getPoint (). Pasi të jenë mbledhur ato të dhëna, ne kontrollojmë nëse presioni minimal është tejkaluar (ose, me fjalë të tjera, nëse përdoruesi ka shtypur diku në ekranin me prekje). Nëse është, koordinatat x dhe y janë të hartuara nga koordinatat karteziane në koordinatat specifike të ekranit me prekje. (0, 0) është këndi i sipërm i majtë i ekranit me prekje, me boshtin x që kalon përtej dhe boshtin y zbret poshtë. Pjesa tjetër kontrollon për të parë nëse ka një numër të ruajtur në rezultat. Nëse ka, rezultati dhe numri i ruajtur rivendosen në 0. Mesazhi "VLERAT E FLETA" printohet në fushën e rezultateve dhe ekrani pastrohet me kursorin në pozicionin e tij fillestar.
nëse (f.y 60) {// rreshti i parë i katrorëve
nëse (p.x <60)
përzgjedhja e përdoruesit = 7;
ndryshe nëse (p.x <120)
përzgjedhja e përdoruesit = 8;
ndryshe nëse (p.x <180)
përzgjedhja e përdoruesit = 9;
tjetër_zgjedhja e përdoruesit = 14;
} tjetër nëse (p.y 125) {// rreshti i dytë i shesheve
nëse (p.x <60)
përzgjedhja e përdoruesit = 4;
ndryshe nëse (p.x <120)
përzgjedhja e përdoruesit = 5;
ndryshe nëse (p.x <180)
përzgjedhja e përdoruesit = 6;
tjetër përzgjedhja e përdoruesit = 13;
} tjetër nëse (p.y 190) {// rreshti i tretë i shesheve
nëse (p.x <60)
përzgjedhja e përdoruesit = 1;
ndryshe nëse (p.x <120)
përzgjedhja e përdoruesit = 2;
ndryshe nëse (p.x <180)
përzgjedhja e përdoruesit = 3;
tjetër përzgjedhja e përdoruesit = 12;
} tjetër nëse (p.y> 255) {// rreshti i katërt i shesheve
nëse (p.x <60)
përzgjedhja e përdoruesit = 15;
ndryshe nëse (p.x <120)
përzgjedhja e përdoruesit = 0;
ndryshe nëse (p.x <180)
përzgjedhja e përdoruesit = 10;
tjetër_zgjedhja e përdoruesit = 11;
}
} tjetër {
përzgjedhja e përdoruesit = 16; // përzgjedhja e përdoruesit është vendosur në 16 (asgjë e ndryshueshme)
}
}
Kjo është pjesa që përcakton se cili buton është zgjedhur. Duke filluar me rreshtin e parë të shesheve dhe duke përfunduar me rreshtin e poshtëm, Arduino kërkon vendin ku është shtypur në të vërtetë ekrani. Pastaj i cakton katrorit një numër dhe e ruan atë numër në zgjedhjen e përdoruesit. Numrat 0-9 korrespondojnë me katrorët e numrave, numrat 11-15 korrespondojnë me katrorët e operandit dhe katrorin e qartë, dhe numri 10 korrespondon me sheshin e shenjave të barabarta. Nëse asnjë katror nuk është zgjedhur, atëherë user_selection është vendosur në 16, gjë që do të bëjë që laku të fillojë përsëri (shiko funksionin e lakut).
Hapi 7: Shijoni projektin tuaj të përfunduar
Aty e keni! Tani keni një kalkulator të ekranit me prekje që mund të bëjë mbledhje, zbritje, shumëzim dhe pjesëtim. Ky projekt ndryshoi krejt mënyrën se si mendova se një kalkulator funksiononte. Ndërsa po punoja në këtë projekt, mbaj mend që i thashë instruktorit tim në klasë, "Unë kurrë nuk do ta shikoj llogaritësin në të njëjtën mënyrë përsëri!" Funksionet që ju si përdorues mendoni se janë të lehta janë disi të vështira kur jeni prapa kompjuterit duke u përpjekur të imitoni idenë tuaj. Shpresoj që ju ka pëlqyer projekti, dhe shpresoj që mendimi juaj se si funksionon një kalkulator ka ndryshuar gjithashtu!
Këtu keni të gjithë kodin për lehtësinë tuaj. Shtë e mbushur me komente kështu që nëse keni ndonjë problem ata duhet t'ju tregojnë se çfarë bën çdo rresht.
Recommended:
Sistemi i kyçjes së ekranit LCD të ekranit: 6 hapa
Sistemi i kyçjes së ekranit LCD të ekranit: Ky projekt do të veprojë si një kyç në shtëpi dhe e vetmja mënyrë që mund të futeni brenda shtëpisë është të shtypni kodin e saktë 3 shifror. LCD do të veprojë si një pajisje komunikimi për të informuar individin nëse ai ka futur kodin e duhur apo jo. IR -ja
Llogaritësi i ekranit me prekje Arduino TFT LCD: 3 hapa
Llogaritësi i ekranit me prekje Arduino TFT LCD: Përshëndetje djema në këtë udhëzues do të mësojmë se si të bëjmë një kalkulator duke përdorur Arduino Uno me 3.5 " Ekran me prekje TFT LCD. Pra, ne do të shkruajmë një kod dhe do ta ngarkojmë në arduino i cili do të shfaqë ndërfaqen e llogaritësit në ekran dhe do të
Bllokimi i dyerve të ekranit me prekje Arduino TFT: 5 hapa
Arduino TFT Touchscreen Door Lock: Ky është udhëzimi im i parë. Ky projekt përdor Arduino dhe një 2.8 " Ekrani me prekje TFT me një skicë të fjalëkalimit për të aktivizuar një stafetë që thyen qarkun në një derë të bllokimit mag. Në sfond, bllokimi RFID në një derë në punë u thye në vend që të rindërtonte
Udhëzues për shfaqjen e ekranit me prekje Raspberry Pi: 5 hapa (me fotografi)
Udhëzues për shfaqjen e ekranit me prekje Raspberry Pi: Hiqni kabllot tuaja HDMI sepse tani mund të keni një ekran në Pi tuaj! Ky Instructable do t'ju përcjellë përmes procesit të marrjes së konfigurimit tuaj Pi me një ekran me prekje dhe si mund ta përdorni atë për t'iu përshtatur nevojave tuaja. Çdo lloj ekrani i stilit HAT mund të jetë
Temperatura e ekranit në modulin e ekranit LED P10 duke përdorur Arduino: 3 hapa (me fotografi)
Temperatura e shfaqjes në modulin e ekranit LED P10 duke përdorur Arduino: Në tutorialin e mëparshëm është treguar se si të shfaqet teksti në modulin D10 Matrix LED P10 duke përdorur Arduino dhe DMD Connector, të cilat mund t'i kontrolloni këtu. Në këtë tutorial do të japim një mësim të thjeshtë të projektit duke përdorur modulin P10 si mediat e ekranit