Sisällysluettelo:

Arduino -kosketusnäyttölaskin: 7 vaihetta
Arduino -kosketusnäyttölaskin: 7 vaihetta

Video: Arduino -kosketusnäyttölaskin: 7 vaihetta

Video: Arduino -kosketusnäyttölaskin: 7 vaihetta
Video: Using HT1621 6 Digits Seven Segment LCD Display | Lesson 103: Arduino Step By Step Course 2024, Marraskuu
Anonim
Arduino -kosketusnäyttölaskin
Arduino -kosketusnäyttölaskin

Hei! Tämä on projekti kosketusnäyttölaskurin valmistamiseksi Arduino Unon ja TFT -LCD -suojan avulla. Keksin konseptin kotikoulun ohjelmointitunnilleni, ja kokemus tämän projektin rakentamisesta oli erittäin mielenkiintoinen. Tämä laskin voi suorittaa neljä yksinkertaista matemaattista toimintoa (yhteenlasku, vähennys, kertolasku ja jako). Se näyttää myös enintään kaksi desimaalipistettä jakovastauksille, joilla on ne. Sukelletaan sisään! Tämän hankkeen tarvikkeet on lueteltu alla.

Tarvikkeet

- Arduino Uno

-2.4 TFT LCD Shield (täältä ostin sen:

- USB A - B -kaapeli (johto Arduinon liittämiseksi tietokoneeseen)

- Tietokone, johon on asennettu Arduino IDE

- Sinun on myös ladattava kaksi kirjastoa: MCUFRIEND_kbv ja kosketusnäyttö. Ensimmäinen löytyy githubista (linkki: https://github.com/prenticedavid/MCUFRIEND_kbv) tai voit käyttää alla olevaa kirjaston zip -tiedostoa. Toinen on Arduinon kirjastonhallinnassa asennusta varten.

Vaihe 1: Laitteistoyhteydet

Laitteiston liitännät
Laitteiston liitännät
Laitteiston liitännät
Laitteiston liitännät
Laitteiston liitännät
Laitteiston liitännät

Kosketusnäytön suojuksen liittäminen Arduino Unoon on helppoa ja nopeaa. Sinun tarvitsee vain järjestää kilven alimmat tapit Arduinon alimpiin nastoihin ja työntää kilpi nastoihin. Yläosassa olevassa 5 V: n tapissa ja tehopuolen merkitsemättömässä tapissa ei saa olla kilpiä olevia tappeja, ja samat parametrit koskevat levyn toisella puolella olevia SCL- ja SDA -merkittyjä nastoja. Nyt olemme valmiita koodaamaan!

Vaihe 2: Koodi: Yleiset määritelmät ja asennus

#sisältää

MCUFRIEND_kbv tft; // joka tapauksessa kiinteä UNO-kilpeille

#sisältää

#määritä YP A3

#define XM A2

#määritä YM 9

#define XP 8

Kosketusnäyttö ts = Kosketusnäyttö (XP, YP, XM, YM, 300);

#define MINPRESSURE 10

Tämä on koodin alku, johon sisällytetään kirjastot (MCUFRIEND_kbv ja kosketusnäyttö), määritetään X- ja Y -nastat, asetetaan kosketusnäytön parametrit ja määritetään vähimmäispaine, jonka Arduino tarvitsee käyttäjän painalluksen rekisteröimiseksi.

int -tunnus;

int user_selection;

kelluva tallennettu_luku = 0;

kelluva termi1;

int op_num;

float -tulos;

int cursorLocX = 5;

int cursorLocY = 20;

Ennen asennusta meidän on määritettävä joitain globaaleja muuttujia. ID auttaa kosketusnäytön käynnistämisessä. user_selection sisältää numeron, joka vastaa näppäintä, jonka käyttäjä valitsee kosketusnäyttöä painettaessa. save_number on muuttuja, jonka tulostamme näytölle käyttäjän syöttämisen jälkeen (lisää tästä silmukassa). Se on kelluva, joten se voi sisältää desimaalilukuja ja kokonaislukuja. termi1 on muuttuja, johon yhtälön ensimmäinen numero tallennetaan operandin valinnan jälkeen. op_num tallentaa operandin numeroksi (1 yhteenlaskua varten, 2 vähennyslaskua varten, 3 kertolaskua ja 4 jakamista varten). tulos on muuttuja, joka tulostetaan näytölle sen jälkeen, kun käyttäjä on painanut yhtäläisyysmerkkiä. Se on myös kelluva. cursorLocX ja cursorLocY ovat kosketusnäytön kartoituspisteitä, joissa kohdistin on asetettu useaan kertaan (se sijaitsee yläosassa olevassa harmaassa palkissa, joka tunnetaan myös tuloskentänä).

void setup () {

tft.reset ();

ID = tft.readID ();

tft.begin (tunnus);

tft.setRotation (0);

tft.fillScreen (TFT_DARKGREY);

neliöt ();

numerot ();

tft.setTextSize (3);

tft.setTextColor (TFT_BLUE, TFT_DARKGREY);

}

Asetustoiminto sisältää ensin kosketusnäytön suojan alustamisen (rivit 1-3). Kilven suunta asetetaan tft.setRotation () -komennolla ja 0 on pystyssä. Koko näyttö on väriltään tummanharmaa tft.fillScreen () -komennolla, jonka kirjoitamme päälle (paitsi tuloskenttää). Neliöt () ja numerot () -funktiot piirtävät laskimen neliöt, värittävät ruudut mustavalkoiseksi ruutulautakuviona ja kirjoittavat numeroita/operandeja sinisiin neliöihin. Pääsemme niihin seuraavassa vaiheessa. Tft.setTextSize () -komento asettaa tuloskentän tekstikooksi 3, joka on keskikokoinen fontti. Tft.setTextColor () -komento asettaa tuloskentän tekstin värin siniseksi, joka on kirjoitettu tummanharmaan kentän päälle.

Vaihe 3: Koodi: Silmukka

void loop () {numberSelect ();

viive (100);

jos (user_selection == 16) {

;

}muu{

if (user_selection <10) {

tallennettu_luku = tallennettu_numero * 10 + käyttäjän_valinta;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (tallennettu_numero);

} muu jos (user_selection> 10) {

kytkin (user_selection) {

tapaus 11:

op_num = 1;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("+");

termi 1 = tallennettu_numero;

tallennettu_luku = 0;

tauko;

tapaus 12:

op_numero = 2;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("-");

termi 1 = tallennettu_numero;

tallennettu_luku = 0;

tauko;

tapaus 13:

op_num = 3;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("X");

termi1 = tallennettu_numero;

tallennettu_luku = 0;

tauko;

tapaus 14:

op_num = 4;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("/");

termi 1 = tallennettu_numero;

tallennettu_luku = 0;

tauko;

tapaus 15:

tallennettu_luku = 0;

termi 1 = 0;

op_num = 0;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("");

tauko;

}

tft.setCursor (cursorLocX, cursorLocY);

Tämä on paljon pureskeltavaa, joten selitän yllä. Aloitamme soittamalla numeroon Valitse () -toiminto, joka määrittää numeron jokaiselle kosketusnäytön neliölle. Kun käyttäjä painaa yhtä näistä neliöistä, funktio asettaa user_selection -muuttujan neliön numeroksi. Ensimmäinen if -lause suoritetaan silmukan läpi vain, jos kelvollinen käyttäjävalinta on tehty. Jos on, seuraava if-lause kysyy, onko user_selection-numeroon tallennettu alle 10 (numerot 0-9). Jos näin on, tallennettu_numero kerrotaan 10: llä ja käyttäjän_valinnan numero lisätään tallennettuun numeroon, joka tulostetaan kosketusnäytön tuloskenttään. Jos ei, seuraava if -lause kysyy, onko user_selection -numeroon tallennettu suurempi kuin 10 (operandin numerot: 11 +, 12 for -, 13 X, 14 for /ja 15 selkeä ruudun neliö). Kytkintoiminto huolehtii jokaisesta tapauksesta (user_selection määrittää). Muuttujalle op_num annetaan luku, joka vastaa valittua operandia (1 +: lle, 2 - -, 3 X: lle ja 4 /: lle). Tallennetun_numeron arvo tallennetaan muuttujaan termi 1, jotta tallennetun numeron muuttujaa voidaan käyttää yhtälön toisella puoliskolla. Operandin symboli tulostetaan näytölle ja kaikki tuloskentän numerot poistetaan. Ainoa poikkeus on kirkas näytön neliö, joka nollaa kaikki laskentamuuttujat ja poistaa tuloskentän kaikesta siitä.

}muu{

kytkin (op_num) {

tapaus 1:

tulos = termi1 + tallennettu_numero;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (kaksinkertainen (tulos));

tauko;

tapaus 2:

tulos = termi1 - tallennettu_numero;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (kaksinkertainen (tulos));

tauko;

tapaus 3:

tulos = termi1 * tallennettu_numero;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (kaksinkertainen (tulos));

tauko;

tapaus 4:

tulos = kelluva (termi1) / kelluva (tallennettu_numero);

tft.setCursor (cursorLocX, cursorLocY);

tft.print (tulos);

tauko;

}

tft.setCursor (cursorLocX, cursorLocY);

tallennettu_luku = tulos;

termi 1 = 0;

op_num = 0;

viive (1000);

}

}

}

Silmukan viimeinen osa käsittelee tapahtumaa, jossa käyttäjä valitsee yhtäläisyysmerkin (user_selection == 10). Toinen kytkintoiminto toimii neljän matemaattisen funktion kautta (määritetty op_num). Lisäystapaus (tapaus 1) lisää termin1 ja tallennetun_numeron yhteen ja tallentaa numeron tulosmuuttujaan. Tulos tulostetaan tuloskenttään kaksinkertaisena. Tulos tulostetaan tuloskenttään kaksinkertaisena. Kertolasku (tapaus 3) kertoo termin 1 tallennetulla_numerolla ja tallentaa luvun tulosmuuttujaan. Tulos tulostetaan tuloskenttään kaksinkertaisena. Jakotapaus (tapaus 4) jakaa termin 1 tallennetulla_numerolla ja tallentaa luvun tulosmuuttujaan. Tulos tulostetaan tuloskenttään kelluvana (koska jakovastaukset voivat olla desimaalilukuja). Kun joko numero, operandi tai tulos on tulostettu näytölle, kohdistin nollataan, tallennetun_numero asetetaan edelliseen tulokseen ja termi1 ja op_numero nollataan.

Muutamia huomautuksia: käyttäjä ei voi syöttää desimaalilukuja laskimeen, koska desimaalilukua ei ole. Lisäksi käyttäjä voi tehdä vain yhden yhtälön kerrallaan. Et voi laskea tulosta ja sitten lisätä/vähentää/kertoa/jakaa tulos. NumberSelect () -toiminnossa on toiminto, joka tyhjentää näytön tuloksen tulostamisen jälkeen, jos käyttäjä on painanut toista neliötä.

Vaihe 4: Koodi: Neliöt -funktio

tyhjät neliöt () {

// mustat ja valkoiset neliöt vuorottelevat kullakin rivillä ja ensimmäisellä ja kolmannella rivillä on päinvastainen kuvio kuin toisella ja neljännellä rivillä

tft.fillRect (0, 60, 60, 65, TFT_BLACK); // ensimmäinen ruuturivi alkaa, mustasta valkoiseen tft.fillRect (60, 60, 60, 65, TFT_WHITE);

tft.fillRect (120, 60, 60, 65, TFT_BLACK);

tft.fillRect (180, 60, 60, 65, TFT_WHITE); // ensimmäinen ruuturivi päättyy

tft.fillRect (0, 125, 60, 65, TFT_WHITE); // toinen ruuturivi alkaa, valkoisesta mustaan tft.fillRect (60, 125, 60, 65, TFT_BLACK);

tft.fillRect (120, 125, 60, 65, TFT_WHITE);

tft.fillRect (180, 125, 60, 65, TFT_BLACK); // toinen ruuturivi päättyy

tft.fillRect (0, 190, 60, 65, TFT_BLACK); // kolmas ruuturivi alkaa, mustasta valkoiseen tft.fillRect (60, 190, 60, 65, TFT_WHITE);

tft.fillRect (120, 190, 60, 65, TFT_BLACK);

tft.fillRect (180, 190, 60, 65, TFT_WHITE); // kolmas ruuturivi päättyy

tft.fillRect (0, 255, 60, 65, TFT_WHITE); // neljäs ruuturivi alkaa, valkoisesta mustaan tft.fillRect (60, 255, 60, 65, TFT_BLACK);

tft.fillRect (120, 255, 60, 65, TFT_WHITE);

tft.fillRect (180, 255, 60, 65, TFT_BLACK); // neljäs ruuturivi päättyy

}

Squares () -toiminto on melko yksinkertainen. Tft.fillRect (X1, Y1, X2, Y2, TFT_COLOR) -komento piirtää suorakulmion sille annettujen parametrien mukaan, jotka ovat x: n ja y: n ensimmäiset sijainnit, x: n ja y: n toiset sijainnit ja väri, jolla suorakulmio on täytetty. Tämä toiminto piirtää kaikki neljä neliöriviä (teknisesti suorakulmioita) ja täyttää kaikki neliöt sille välitetyllä värillä.

Vaihe 5: Koodi: Numerotoiminto

mitätön numero () {

tft.setTextColor (TFT_BLUE); // asettaa numeron/merkin värin siniseksi

tft.setTextSize (5); // asettaa numeron/merkin koon 5

tft.setCursor (18, 75); // asettaa kohdistimen numeroiden/merkkien ensimmäiselle riville

tft.print ("7 8 9 /"); // tulostaa numeroiden/merkkien ensimmäisen rivin

tft.setCursor (18, 140); // asettaa kohdistimen toiselle numero-/merkkiriville

tft.print ("4 5 6 X"); // tulostaa toisen rivin numeroita/merkkejä

tft.setCursor (18, 205); // asettaa kursorin numeroiden/merkkien kolmannelle riville

tft.print ("1 2 3 -"); // tulostaa kolmannen rivin numeroita/merkkejä

tft.setCursor (18, 270); // asettaa kursorin neljännelle numero-/merkkiriville

tft.print ("C 0 = +"); // tulostaa neljännen rivin numeroita/merkkejä

}

Numerot () -toiminto on myös yksinkertainen. Kaksi ensimmäistä riviä asettavat tekstin koon suuremmaksi ja värin siniseksi. Komento tft.setCursor () asettaa kohdistimen jokaisen rivin kohtaan, josta numeroiden kirjoittaminen alkaa. Sitten tft.print () -komento tulostaa numerot/merkit neliöiden päälle.

Vaihe 6: Koodi: Numero Valitse toiminto

void numberSelect () {

TSPoint p = ts.getPoint ();

pinMode (XM, OUTPUT);

pinMode (YP, OUTPUT);

jos (s. z> MINPRESSURE) {

p.x = kartta (p.x, 250, 845, 0, 239);

p.y = kartta (p.y, 245, 860, 0, 319);

jos (tulos! = 0) {

tulos = 0;

tallennettu_luku = 0;

tft.print ("CLEAR VALUES");

viive (500);

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("");

tft.setCursor (cursorLocX, cursorLocY);

}

Jos haluat aloittaa numberSelect () -toiminnon, pyydämme käyttäjän syöttämistä kosketusnäytöltä ts.getPoint () -komennolla. Kun tiedot on kerätty, tarkistamme, onko minimipaine ylitetty (tai toisin sanoen, onko käyttäjä painanut kosketusnäytön kohtaa). Jos on, x- ja y-koordinaatit kartoitetaan suorakulmaisista koordinaateista kosketusnäyttökohtaisiin koordinaatteihin. (0, 0) on kosketusnäytön vasen yläkulma, jossa x -akseli menee poikki ja y -akseli alas. Seuraava osa tarkistaa, onko tulokseen tallennettu numero. Jos on, tulos ja tallennettu numero palautetaan arvoon 0. Viesti "CLEAR VALUES" tulostetaan tuloskentän päälle ja näyttö tyhjennetään ja kohdistin palaa aloitusasentoonsa.

if (s.y 60) {// ensimmäinen ruuturivi

jos (px <60)

user_selection = 7;

muuten jos (px <120)

user_selection = 8;

muuten jos (px <180)

user_selection = 9;

else user_selection = 14;

} else if (s.y 125) {// toinen ruuturivi

jos (px <60)

user_selection = 4;

muuten jos (px <120)

user_selection = 5;

muuten jos (px <180)

user_selection = 6;

else user_selection = 13;

} else if (s. 190) {// kolmas ruuturivi

jos (px <60)

user_selection = 1;

muuten jos (px <120)

user_selection = 2;

muuten jos (px <180)

user_selection = 3;

else user_selection = 12;

} else if (p.y> 255) {// neljäs ruuturivi

jos (px <60)

user_selection = 15;

muuten jos (px <120)

user_selection = 0;

muuten jos (px <180)

user_selection = 10;

else user_selection = 11;

}

}muu{

user_selection = 16; // user_selection on asetettu arvoon 16 (ei muuttujaa)

}

}

Tämä osa määrittää, mikä painike on valittu. Alkaen ylimmästä ruuturivistä ja päättyy alimpaan riviin, Arduino etsii, missä näyttöä todella painettiin. Sitten se antaa neliölle numeron ja tallentaa numeron user_selection -valikkoon. Numerot 0-9 vastaavat numeroneliöitä, numerot 11-15 vastaavat operandin neliöitä ja selkeää neliötä ja luku 10 vastaa yhtäläisyysmerkin neliötä. Jos neliötä ei ole valittu, user_selection on asetettu arvoon 16, jolloin silmukka alkaa uudelleen (katso silmukkatoiminto).

Vaihe 7: Nauti valmiista projektistasi

Siinä se on! Sinulla on nyt kosketusnäyttölaskin, jolla voi tehdä yhteen-, vähennys-, kerto- ja jakolaskuja. Tämä projekti muutti koko tavan, jolla luulin laskimen toimivan. Kun työskentelin tämän projektin parissa, muistan kertoneeni opettajalleni luokalla: "En enää koskaan katso laskinta samalla tavalla!" Toiminnot, jotka käyttäjän mielestä ovat helppoja, ovat hieman vaikeita, kun olet tietokoneen takana ja yrität jäljitellä ideasi. Toivottavasti piditte projektista, ja toivon, että myös ajattelutapanne laskimen toiminnasta on muuttunut!

Tässä on koko koodi avuksesi. Se on täynnä kommentteja, joten jos sinulla on ongelmia, niiden pitäisi näyttää, mitä jokainen rivi tekee.

Suositeltava: