Turinys:

„Arduino“jutiklinio ekrano skaičiuoklė: 7 žingsniai
„Arduino“jutiklinio ekrano skaičiuoklė: 7 žingsniai

Video: „Arduino“jutiklinio ekrano skaičiuoklė: 7 žingsniai

Video: „Arduino“jutiklinio ekrano skaičiuoklė: 7 žingsniai
Video: MKS Robin Nano v2.0 - Руководство по установке TMC2208 2024, Liepa
Anonim
„Arduino“jutiklinio ekrano skaičiuoklė
„Arduino“jutiklinio ekrano skaičiuoklė

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

Techninės įrangos jungtys
Techninės įrangos jungtys
Techninės įrangos jungtys
Techninės įrangos jungtys
Techninės įrangos jungtys
Techninė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: