Turinys:
- Prekės
- 1 žingsnis: aparatinės įrangos jungtys
- 2 veiksmas: kodas: bendrieji apibrėžimai ir sąranka
- 3 žingsnis: kodas: ciklas
- 4 žingsnis: kodas: kvadratų funkcija
- 5 žingsnis: funkcija „Kodas: skaičiai“
- 6 veiksmas: kodas: numerio pasirinkimas funkcija
- 7 žingsnis: mėgaukitės baigtu projektu
Video: „Arduino“jutiklinio ekrano skaičiuoklė: 7 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:46
Sveiki! Tai projektas, skirtas jutikliniam ekranui skaičiuoti naudojant „Arduino Uno“ir TFT LCD ekraną. Aš sugalvojau savo namų mokyklos programavimo klasės koncepciją, o šio projekto kūrimo patirtis buvo labai įdomi. Šis skaičiuotuvas gali atlikti keturias paprastas matematines operacijas (sudėti, atimti, dauginti ir padalyti). Jame taip pat rodomi iki dviejų skaičių po kablelio esantys padalijimo atsakymai. Pasinerkime tiesiai! Šio projekto reikmenys yra išvardytos žemiau.
Prekės
- Arduino Uno
-2.4 TFT LCD skydas (čia aš jį nusipirkau:
- USB A – B kabelis (laidas, skirtas „Arduino“prijungti prie kompiuterio)
- Kompiuteris su įdiegta „Arduino IDE“
- Taip pat turėsite atsisiųsti dvi bibliotekas: MCUFRIEND_kbv ir jutiklinį ekraną. Pirmąjį galite rasti „github“(nuoroda: https://github.com/prenticedavid/MCUFRIEND_kbv) arba galite naudoti bibliotekos ZIP failą, kurį įtraukiau žemiau. Antrasis yra įdiegtas „Arduino“bibliotekos tvarkyklėje.
1 žingsnis: aparatinės įrangos jungtys
Jutiklinio ekrano skydelio prijungimas prie „Arduino Uno“yra paprastas ir greitas. Viskas, ką jums reikia padaryti, tai sujungti žemiausius skydo kaiščius su žemiausiais „Arduino“kaiščiais ir stumti skydą į kaiščius. Viršutinis 5 V kaištis ir nepažymėtas kaištis maitinimo pusėje neturėtų turėti kaiščių nuo skydo, o tie patys parametrai taikomi kaiščiams, pažymėtiems SCL ir SDA kitoje plokštės pusėje. Dabar mes pasiruošę koduoti!
2 veiksmas: kodas: bendrieji apibrėžimai ir sąranka
#įtraukti
MCUFRIEND_kbv tft; // kietas laidas UNO skydams
#įtraukti
#define YP A3
#define XM A2
#define YM 9
#define XP 8
Jutiklinis ekranas ts = jutiklinis ekranas (XP, YP, XM, YM, 300);
#define MINPRESSURE 10
Tai yra kodo pradžia, kai mes įtraukiame bibliotekas (MCUFRIEND_kbv ir jutiklinį ekraną), apibrėžiame X ir Y kaiščius, nustatome jutiklinio ekrano parametrus ir nustatome minimalų slėgį, kurio reikia, kad „Arduino“registruotų vartotojo spaudą.
int ID;
int user_selection;
plūdė išsaugota_skaičius = 0;
plūdės terminas1;
int op_num;
plūdės rezultatas;
int cursorLocX = 5;
int cursorLocY = 20;
Prieš diegdami turime nustatyti kai kuriuos pasaulinius kintamuosius. ID padeda pradėti naudoti jutiklinį ekraną. user_selection turi skaičių, kuris atitinka klavišą, kurį vartotojas pasirenka paspaudęs jutiklinį ekraną. Išsaugotas_numeris yra kintamasis, kurį spausdiname ekrane po vartotojo įvedimo (daugiau apie tai - cikle). Tai yra plūdė, todėl gali turėti dešimtainius skaičius ir sveikus skaičius. terminas1 yra kintamasis, į kurį įrašomas pirmasis lygties numeris, pasirinkus operandą. „op_num“išsaugo operandą kaip skaičių (1 - pridėjimas, 2 - atimtis, 3 - daugyba ir 4 - dalijimas). rezultatas yra kintamasis, kuris spausdinamas ekrane vartotojui paspaudus lygybės ženklą. Tai taip pat plūdė. cursorLocX ir cursorLocY yra jutiklinio ekrano atvaizdavimo taškai, kuriuose žymeklis yra nustatytas kelis kartus (jis yra pilkoje juostoje viršuje, kitaip vadinamas rezultatų lauku).
void setup () {
tft.reset ();
ID = tft.readID ();
tft.begin (ID);
tft.setRotation (0);
tft.fillScreen (TFT_DARKGREY);
kvadratai ();
skaičiai ();
tft.setTextSize (3);
tft.setTextColor (TFT_BLUE, TFT_DARKGREY);
}
Mūsų sąrankos funkcijoje pirmiausia yra jutiklinio ekrano ekrano inicijavimas (1–3 eilutės). Skydo orientacija nustatoma naudojant komandą tft.setRotation (), 0 yra vertikaliai. Visas ekranas yra tamsiai pilkos spalvos su komanda tft.fillScreen (), kurią parašysime viršuje (išskyrus rezultatų lauką). Funkcijos kvadratai () ir skaičiai () nupiešia skaičiuotuvo kvadratus, nudažo kvadratus juodai balta pagal šaškių lentos modelį, o ant kvadratų mėlynai įrašo skaičius/operandus. Mes pateksime į juos kitame žingsnyje. Komanda tft.setTextSize () nustato rezultatų lauko teksto dydį į 3, kuris yra vidutinis šriftas. Komanda tft.setTextColor () nustato rezultatų lauko teksto spalvą į mėlyną, kuri parašyta virš tamsiai pilko lauko.
3 žingsnis: kodas: ciklas
void loop () {numberSelect ();
vėlavimas (100);
if (user_selection == 16) {
;
}Kitas{
if (user_selection <10) {
išsaugotas_skaičius = išsaugotas_skaičius * 10 + vartotojo_pasirinkimas;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (išsaugotas_numeris);
} else if (user_selection> 10) {
jungiklis (vartotojo_pasirinkimas) {
11 atvejis:
op_num = 1;
tft.setCursor (cursorLocX, cursorLocY);
tft.print („+“);
terminas1 = išsaugotas_skaičius;
išsaugotas_skaičius = 0;
pertrauka;
12 atvejis:
op_num = 2;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("-");
terminas1 = išsaugotas_skaičius;
išsaugotas_skaičius = 0;
pertrauka;
13 atvejis:
op_num = 3;
tft.setCursor (cursorLocX, cursorLocY);
tft.print („X“);
terminas1 = išsaugotas_skaičius;
išsaugotas_skaičius = 0;
pertrauka;
14 atvejis:
op_num = 4;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("/");
terminas1 = išsaugotas_skaičius;
išsaugotas_skaičius = 0;
pertrauka;
15 atvejis:
išsaugotas_skaičius = 0;
terminas1 = 0;
op_num = 0;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("");
pertrauka;
}
tft.setCursor (cursorLocX, cursorLocY);
Tai daug kramtyti, todėl paaiškinsiu, kas aukščiau. Pradedame skambindami funkcijai numberSelect (), kuri kiekvienam jutikliniame ekrane priskiria numerį. Kai vartotojas paspaudžia vieną iš šių kvadratų, funkcija nustato kintamąjį user_selection į kvadrato skaičių. Pirmasis if sakinys turi būti vykdomas tik per ciklą, jei pasirinktas tinkamas vartotojas. Jei taip, tada kitas teiginys klausia, ar naudotojo pasirinkime yra išsaugotas mažesnis nei 10 skaičius (skaičiai 0–9). Jei taip, išsaugotas_skaičius padauginamas iš 10, o naudotojo pasirinkimo skaičius pridedamas prie išsaugoto skaičiaus, kuris spausdinamas jutiklinio ekrano rezultatų laukelyje. Jei ne, sakinys „Kitas, jei“klausia, ar „user_selection“yra išsaugotas didesnis nei 10 skaičius (operandų skaičiai: 11 +, 12 - -, 13 -X, 14 - /ir 15 -aiškaus ekrano kvadratas). Perjungimo funkcija rūpinasi kiekvienu atveju (nustatoma pagal vartotojo pasirinkimą). Kintamajam op_num suteikiamas skaičius, atitinkantis pasirinktą operandą (1 - +, 2 - -, 3 -X ir 4 - /). Išsaugoto skaičiaus reikšmė įrašoma į kintamąjį terminas 1, kad kintamasis įrašytas skaičius galėtų būti naudojamas antrai lygties pusei. Ekrane atspausdinamas operando simbolis ir pašalinami visi rezultatų lauke esantys skaičiai. Vienintelė išimtis yra skaidrus ekrano kvadratas, kuris iš naujo nustato visus skaičiavimo kintamuosius ir išvalo rezultatų lauką.
}Kitas{
jungiklis (op_num) {
1 atvejis:
rezultatas = terminas1 + išsaugotas_skaičius;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dvigubas (rezultatas));
pertrauka;
2 atvejis:
rezultatas = terminas1 - išsaugotas_skaičius;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dvigubas (rezultatas));
pertrauka;
3 atvejis:
rezultatas = terminas1 * išsaugotas_skaičius;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dvigubas (rezultatas));
pertrauka;
4 atvejis:
rezultatas = plūdė (terminas1) / plūdė (išsaugotas_numeris);
tft.setCursor (cursorLocX, cursorLocY);
tft.print (rezultatas);
pertrauka;
}
tft.setCursor (cursorLocX, cursorLocY);
išsaugotas_skaičius = rezultatas;
terminas1 = 0;
op_num = 0;
vėlavimas (1000);
}
}
}
Paskutinė ciklo dalis susijusi su įvykiu, kai vartotojas pasirenka lygybės ženklą (user_selection == 10). Kita jungiklio funkcija veikia per keturias matematines funkcijas (nustatomas pagal op_num). Pridėjimo atvejis (1 atvejis) prideda terminą1 ir įrašytą_skaičių kartu ir išsaugo skaičių rezultato kintamajame. Rezultatas į rezultatų lauką atspausdinamas dvigubai. Atimties atvejis (2 atvejis) iš termino 1 atima įrašytą_skaičių ir išsaugo skaičių rezultato kintamajame. Rezultatas spausdinamas į rezultatų lauką dvigubai. Padauginimo atvejis (3 atvejis) padaugina terminą 1 iš išsaugoto skaičiaus ir išsaugo skaičių rezultato kintamajame. Rezultatas į rezultatų lauką atspausdinamas dvigubai. Padalijimo atvejis (4 atvejis) padalija 1 terminą iš išsaugoto skaičiaus ir išsaugo skaičių rezultato kintamajame. Rezultatas spausdinamas rezultatų laukelyje kaip plūdė (nes padalijimo atsakymai gali būti dešimtainiai skaičiai). Kai ekrane atspausdinamas skaičius, operandas ar rezultatas, žymeklis nustatomas iš naujo, išsaugotas skaičius nustatomas į ankstesnį rezultatą, o terminas 1 ir op_num nustatomi iš naujo.
Keletas pastabų: vartotojas negali įvesti skaičiuoklės dešimtainių skaičių, nes trūksta dešimtainio taško kvadrato. Be to, vartotojas vienu metu gali atlikti tik vieną lygtį. Jūs negalite apskaičiuoti rezultato ir tada pridėti/atimti/padauginti/padalyti tą rezultatą. Funkcijoje numberSelect () yra funkcija, kuri išvalo ekraną po to, kai rezultatas buvo atspausdintas, jei vartotojas paspaudė kitą kvadratą.
4 žingsnis: kodas: kvadratų funkcija
tušti kvadratai () {
// juodi ir balti kvadratai pakaitomis kiekvienoje eilutėje, o pirmoji ir trečioji eilutės turi priešingą modelį nei antroji ir ketvirtoji eilutės
tft.fillRect (0, 60, 60, 65, TFT_BLACK); // prasideda pirmoji kvadratų eilutė, nuo juodos iki baltos tft.fillRect (60, 60, 60, 65, TFT_WHITE);
tft.fillRect (120, 60, 60, 65, TFT_BLACK);
tft.fillRect (180, 60, 60, 65, TFT_WHITE); // baigiasi pirmoji kvadratų eilutė
tft.fillRect (0, 125, 60, 65, TFT_WHITE); // prasideda antroji kvadratų eilutė, nuo baltos iki juodos tft.fillRect (60, 125, 60, 65, TFT_BLACK);
tft.fillRect (120, 125, 60, 65, TFT_WHITE);
tft.fillRect (180, 125, 60, 65, TFT_BLACK); // baigiasi antroji kvadratų eilutė
tft.fillRect (0, 190, 60, 65, TFT_BLACK); // prasideda trečioji kvadratų eilutė, nuo juodos iki baltos tft.fillRect (60, 190, 60, 65, TFT_WHITE);
tft.fillRect (120, 190, 60, 65, TFT_BLACK);
tft.fillRect (180, 190, 60, 65, TFT_WHITE); // baigiasi trečia kvadratų eilė
tft.fillRect (0, 255, 60, 65, TFT_WHITE); // prasideda ketvirta kvadratų eilutė, nuo baltos iki juodos tft.fillRect (60, 255, 60, 65, TFT_BLACK);
tft.fillRect (120, 255, 60, 65, TFT_WHITE);
tft.fillRect (180, 255, 60, 65, TFT_BLACK); // baigiasi ketvirta kvadratų eilutė
}
Funkcija kvadratai () yra gana paprasta. Komanda tft.fillRect (X1, Y1, X2, Y2, TFT_COLOR) nubrėžia stačiakampį pagal jam perduotus parametrus, kurie yra pirmosios x ir y pozicijos, x ir y antrosios pozicijos ir spalva, kuria užpildytas stačiakampis. Ši funkcija nubrėžia visas keturias kvadratų eilutes (techniškai stačiakampius) ir užpildo kiekvieną kvadratą jai perduota spalva.
5 žingsnis: funkcija „Kodas: skaičiai“
tušti skaičiai () {
tft.setTextColor (TFT_BLUE); // nustato skaičių/simbolių spalvą į mėlyną
tft.setTextSize (5); // nustato skaičiaus/simbolio dydį į 5
tft.setCursor (18, 75); // nustato žymeklį pirmajai skaičių/simbolių eilutei
tft.print ("7 8 9 /"); // spausdina pirmąją skaičių/simbolių eilutę
tft.setCursor (18, 140); // nustato žymeklį antrai skaičių/simbolių eilutei
tft.print ("4 5 6 X"); // spausdina antrąją skaičių/simbolių eilutę
tft.setCursor (18, 205); // nustato trečios skaičių/simbolių eilutės žymeklį
tft.print ("1 2 3 -"); // spausdina trečią skaičių/simbolių eilutę
tft.setCursor (18, 270); // nustato žymeklį ketvirtai skaičių/simbolių eilutei
tft.print ("C 0 = +"); // spausdina ketvirtą skaičių/simbolių eilutę
}
Skaičių () funkcija taip pat paprasta. Pirmosios dvi eilutės padidina teksto dydį ir spalvą į mėlyną. Komanda tft.setCursor () nustato žymeklį į padėtį kiekvienoje eilutėje, nuo kurios prasideda skaičių rašymas. Tada komanda tft.print () spausdina skaičius/simbolius ant kvadratų.
6 veiksmas: kodas: numerio pasirinkimas funkcija
void numberSelect () {
TSPoint p = ts.getPoint ();
pinMode (XM, OUTPUT);
pinMode (YP, OUTPUT);
if (p.z> MINPRESSURE) {
p.x = žemėlapis (p.x, 250, 845, 0, 239);
p.y = žemėlapis (p.y, 245, 860, 0, 319);
jei (rezultatas! = 0) {
rezultatas = 0;
išsaugotas_skaičius = 0;
tft.print („ŠVARIOS VERTĖS“);
vėlavimas (500);
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("");
tft.setCursor (cursorLocX, cursorLocY);
}
Norėdami pradėti funkciją numberSelect (), prašome vartotojo įvesti jutiklinį ekraną naudodami komandą ts.getPoint (). Surinkę šiuos duomenis, patikriname, ar neviršytas minimalus slėgis (arba, kitaip tariant, ar naudotojas paspaudė kažkur jutiklinį ekraną). Jei taip, x ir y koordinatės susiejamos iš stačiakampių koordinačių į jutiklinio ekrano koordinates. (0, 0) yra viršutinis kairysis jutiklinio ekrano kampas, kai x ašis eina skersai, o y - žemyn. Kitoje dalyje patikrinama, ar rezultate išsaugotas skaičius. Jei yra, rezultatas ir išsaugotas skaičius atkuriami į 0. Pranešimas „CLEAR VALUES“išspausdinamas virš rezultatų lauko, o ekranas išvalomas, kai žymeklis grįžta į pradinę padėtį.
if (p.y 60) {// pirmoji kvadratų eilutė
jei (px <60)
user_selection = 7;
kitaip, jei (p.x <120)
user_selection = 8;
kitaip, jei (p.x <180)
user_selection = 9;
else user_selection = 14;
} else if (p.y 125) {// antroji kvadratų eilutė
jei (px <60)
user_selection = 4;
kitaip, jei (p.x <120)
user_selection = 5;
kitaip, jei (p.x <180)
user_selection = 6;
else user_selection = 13;
} else if (p.y 190) {// trečioji kvadratų eilutė
jei (px <60)
user_selection = 1;
kitaip, jei (p.x <120)
user_selection = 2;
kitaip, jei (p.x <180)
user_selection = 3;
else user_selection = 12;
} else if (p.y> 255) {// ketvirtoji kvadratų eilutė
jei (px <60)
user_selection = 15;
kitaip, jei (p.x <120)
user_selection = 0;
kitaip, jei (p.x <180)
user_selection = 10;
else user_selection = 11;
}
}Kitas{
user_selection = 16; // user_selection nustatytas kaip 16 (nieko kintamo)
}
}
Ši dalis nustato, kuris mygtukas buvo pasirinktas. Pradedant viršutine kvadratų eilute ir baigiant apatine eilute, „Arduino“ieško, kur iš tikrųjų buvo paspaustas ekranas. Tada jis priskiria kvadratui skaičių ir išsaugo tą numerį į user_selection. Skaičiai 0-9 atitinka skaičių kvadratus, skaičiai 11-15-operando kvadratus ir aiškų kvadratą, o skaičius 10-lygybės ženklo kvadratą. Jei nebuvo pasirinktas kvadratas, tada user_selection yra nustatytas į 16, todėl ciklas prasidės iš naujo (žr. Ciklo funkciją).
7 žingsnis: mėgaukitės baigtu projektu
Štai ir turi! Dabar turite jutiklinio ekrano skaičiuoklę, kuri gali sudėti, atimti, dauginti ir padalyti. Šis projektas pakeitė visą mano manymu, kad veikė skaičiuotuvas. Kai dirbau prie šio projekto, prisimenu, kad pamokoje sakiau savo instruktoriui: „Daugiau niekada nežiūrėsiu į skaičiuotuvą taip pat!“Funkcijos, kurias jūs, kaip vartotojas, manote, yra paprastos, yra šiek tiek sudėtingos, kai esate už kompiuterio ir bandote sekti savo idėją. Tikiuosi, kad jums patiko projektas, ir tikiuosi, kad pasikeitė ir jūsų mąstymas, kaip veikia skaičiuotuvas!
Čia yra visas kodas jūsų patogumui. Jis užpildytas komentarais, todėl jei turite kokių nors problemų, jie turėtų parodyti, ką daro kiekviena eilutė.
Rekomenduojamas:
„Raspberry Pi“ekrano ir jutiklinio ekrano pasukimas: 4 veiksmai
Pasukti „Raspberry Pi“ekraną ir jutiklinį ekraną: tai yra pagrindinė instrukcija, skirta parodyti, kaip pasukti bet kurio „Raspberry Pi“, kuriame veikia „Buster Raspbian“operacinė sistema, ekraną ir jutiklinį ekraną, tačiau šį metodą naudoju nuo pat Jessie. Čia naudojami vaizdai yra iš Raspberry Pi
„Arduino Flappy Bird“- „Arduino“2,4 colio TFT jutiklinio ekrano SPFD5408 paukščių žaidimo projektas: 3 žingsniai
„Arduino Flappy Bird“| „Arduino“2,4 colio jutiklinio ekrano SPFD5408 paukščių žaidimo projektas: „Flappy Bird“per kelerius metus buvo per daug populiarus žaidimas, ir daugelis žmonių jį sukūrė savaip, taip ir aš, aš sukūriau savo versiją „Flappy bird“su „Arduino“ir pigų 2,4 colio TFT. Jutiklinis ekranas SPFD5408, Taigi pradėkime
„Arduino TFT LCD“jutiklinio ekrano skaičiuoklė: 3 žingsniai
„Arduino TFT LCD“jutiklinio ekrano skaičiuoklė: Sveiki, vaikinai, šioje instrukcijoje mes išmoksime padaryti skaičiuotuvą naudojant „Arduino Uno“su 3,5 " TFT LCD jutiklinis ekranas. Taigi mes parašysime kodą ir įkelsime jį į „arduino“, kuris ekrane parodys skaičiuoklės sąsają ir
„Arduino TFT“jutiklinio ekrano durų užraktas: 5 žingsniai
„Arduino TFT“jutiklinio ekrano durų užraktas: tai mano pirmasis „Instructable“. Šiame projekte naudojamas „Arduino“ir 2,8 " Jutiklinis TFT jutiklinis ekranas su slaptažodžio eskizu, kad suaktyvintų relę, kuri nutraukia grandinę iki „mag lock“durų. Fone sugedo durų RFID užraktas, o ne iš naujo prijungtas
„Raspberry Pi“jutiklinio ekrano ekrano pamoka: 5 žingsniai (su paveikslėliais)
„Raspberry Pi“jutiklinio ekrano ekrano pamoka: atmeskite savo HDMI kabelius, nes dabar galite turėti „Pi“ekraną! Ši instrukcija padės jums nustatyti „Pi“sąranką su jutikliniu ekranu ir kaip ją naudoti, kad atitiktų jūsų poreikius. Bet kokio tipo HAT stiliaus ekranas gali būti