Indholdsfortegnelse:

Arduino Touchscreen -lommeregner: 7 trin
Arduino Touchscreen -lommeregner: 7 trin

Video: Arduino Touchscreen -lommeregner: 7 trin

Video: Arduino Touchscreen -lommeregner: 7 trin
Video: Arduino Mega HMI touch screen "7 inch TFT LCD" based Load controlling and display Seconds "Basics" 2024, Juli
Anonim
Arduino Touchscreen lommeregner
Arduino Touchscreen lommeregner

Hej! Dette er et projekt til at lave en berøringsskærmberegner ved hjælp af en Arduino Uno og et TFT LCD -skjold. Jeg kom med konceptet til min hjemmeskole programmeringsklasse, og erfaringen med at bygge dette projekt var meget interessant. Denne lommeregner kan udføre de fire enkle matematiske operationer (addition, subtraktion, multiplikation og division). Det viser også op til to decimaler for de divisionssvar, der har dem. Lad os dykke lige ind! Forsyningerne til dette projekt er angivet nedenfor.

Forbrugsvarer

- Arduino Uno

-2.4 TFT LCD Shield (her købte jeg det:

- USB A til B kabel (ledning til tilslutning af Arduino til computer)

- Computer med Arduino IDE installeret

- Du skal også downloade to biblioteker: MCUFRIEND_kbv og Touchscreen. Den første kan du finde på github (link: https://github.com/prenticedavid/MCUFRIEND_kbv) eller du kan bruge bibliotekets zip -fil, som jeg har inkluderet herunder. Den anden er i Arduino Library manager til installation.

Trin 1: Hardwareforbindelser

Hardwareforbindelser
Hardwareforbindelser
Hardwareforbindelser
Hardwareforbindelser
Hardwareforbindelser
Hardwareforbindelser

Tilslutningen af berøringsskærmen til Arduino Uno er enkel og hurtig. Alt du skal gøre er at stille de laveste stifter på skjoldet op med de laveste stifter på Arduino og skubbe skjoldet ind i stifterne. Den øverste 5V pin og den umærkede pin på power side bør ikke have pins fra skjoldet i dem, med de samme parametre, der gælder for benene mærket SCL og SDA på den anden side af brættet. Nu er vi klar til at kode!

Trin 2: Koden: Globale definitioner og opsætning

#omfatte

MCUFRIEND_kbv tft; // alligevel hard-wired til UNO-skjolde

#omfatte

#definer YP A3

#define XM A2

#definer YM 9

#define XP 8

TouchScreen ts = TouchScreen (XP, YP, XM, YM, 300);

#define MINPRESSURE 10

Dette er begyndelsen på koden, hvor vi inkluderer biblioteker (MCUFRIEND_kbv og berøringsskærm), definerer X- og Y -benene, konfigurerer berøringsskærmens parametre og definerer det minimale tryk, der er nødvendigt for Arduino for at registrere et brugerpresse.

int ID;

int user_selection;

float gemt_nummer = 0;

float term1;

int op_num;

float resultat;

int cursorLocX = 5;

int cursorLocY = 20;

Lige før opsætningen skal vi oprette nogle globale variabler. ID hjælper med at få berøringsskærmen i gang. user_selection indeholder et tal, der svarer til den tast, brugeren vælger, når der trykkes på berøringsskærmen. gemt_nummer er variablen, som vi udskriver på skærmen efter en brugerindtastning (mere om dette i løkken). Det er en float, så den kan indeholde decimaltal såvel som heltal. term1 er den variabel, som ligningens første tal gemmes i, efter at en operand er valgt. op_num gemmer operanden som et tal (1 for addition, 2 for subtraktion, 3 for multiplikation og 4 for division). resultat er variablen, der udskrives på skærmen, efter at brugeren har trykket på lighedstegnet. Det er også en float. cursorLocX og cursorLocY er kortlægningspunkterne på berøringsskærmen, hvor markøren er indstillet til flere gange (den er placeret i den grå bjælke øverst, ellers kendt som resultatfeltet).

ugyldig opsætning () {

tft.reset ();

ID = tft.readID ();

tft.begin (ID);

tft.setRotation (0);

tft.fillScreen (TFT_DARKGREY);

firkanter ();

numre ();

tft.setTextSize (3);

tft.setTextColor (TFT_BLUE, TFT_DARKGREY);

}

Vores opsætningsfunktion indeholder først initialiseringen af berøringsskærmen (linje 1-3). Skjoldets retning indstilles ved hjælp af kommandoen tft.setRotation (), hvor 0 er opretstående. Hele skærmen er farvet mørkegrå med kommandoen tft.fillScreen (), som vi skriver oven på (undtagen resultatfeltet). Firkanterne () og tal () -funktionerne tegner lommeregnerens firkanter, farver firkanterne sort og hvide i et tavlemønster og skriver tal/operander på firkanterne i blåt. Vi kommer til dem i det næste trin. Kommandoen tft.setTextSize () sætter tekststørrelsen i resultatfeltet til 3, hvilket er en mellemstor skrifttype. Kommandoen tft.setTextColor () sætter tekstfarven i resultatfeltet til blå, som skrives over det mørkegrå felt.

Trin 3: Koden: Loop

void loop () {numberSelect ();

forsinkelse (100);

hvis (user_selection == 16) {

;

}andet{

hvis (user_selection <10) {

gemt_nummer = gemt_nummer * 10 + bruger_valg;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (gemt_nummer);

} ellers hvis (user_selection> 10) {

switch (user_selection) {

sag 11:

op_num = 1;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("+");

term1 = gemt_nummer;

gemt_nummer = 0;

pause;

sag 12:

op_num = 2;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("-");

term1 = gemt_nummer;

gemt_nummer = 0;

pause;

sag 13:

op_num = 3;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("X");

term1 = gemt_nummer;

gemt_nummer = 0;

pause;

sag 14:

op_num = 4;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("/");

term1 = gemt_nummer;

gemt_nummer = 0;

pause;

sag 15:

gemt_nummer = 0;

term1 = 0;

op_num = 0;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("");

pause;

}

tft.setCursor (cursorLocX, cursorLocY);

Dette er meget at tygge, så jeg vil forklare, hvad der er ovenfor. Vi starter med at kalde funktionen numberSelect (), som tildeler et nummer til hver firkant på berøringsskærmen. Når en bruger trykker på en af disse firkanter, indstiller funktionen variablen user_selection til kvadratets nummer. Den første if -sætning skal kun køre gennem løkken, hvis der er foretaget et gyldigt brugervalg. Hvis det er det, spørger den næste if-sætning, om user_selection har et nummer mindre end 10 gemt i det (tallene 0-9). Hvis det er tilfældet, multipliceres gemt_nummer med 10, og tallet i bruger_valg tilføjes til gemt_nummer, som udskrives i resultatfeltet på berøringsskærmen. Hvis det ikke gør det, spørger den næste if -sætning, om user_selection har et tal større end 10 gemt i det (operandnumrene: 11 for +, 12 for -, 13 for X, 14 for /og 15 for den klare skærm firkant). En switch -funktion tager sig af hvert tilfælde (bestemt af user_selection). Variablen op_num får et tal, der svarer til den operand, der blev valgt (1 for +, 2 for -, 3 for X og 4 for /). Værdien i gemt_nummer gemmes i variablen term1, så den gemte_tal -variabel kan bruges til anden halvdel af ligningen. Operandsymbolet udskrives på skærmen sammen med sletning af alle tal i resultatfeltet. Den eneste undtagelse er den klare skærm firkant, som nulstiller alle beregningsvariablerne og rydder resultatfeltet for alt på den.

}andet{

switch (op_num) {

sag 1:

resultat = term1 + gemt_nummer;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (dobbelt (resultat));

pause;

sag 2:

resultat = term1 - gemt_nummer;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (dobbelt (resultat));

pause;

sag 3:

resultat = term1 * gemt_nummer;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (dobbelt (resultat));

pause;

sag 4:

resultat = float (term1) / float (gemt_nummer);

tft.setCursor (cursorLocX, cursorLocY);

tft.print (resultat);

pause;

}

tft.setCursor (cursorLocX, cursorLocY);

gemt_nummer = resultat;

term1 = 0;

op_num = 0;

forsinkelse (1000);

}

}

}

Den sidste del af sløjfen omhandler den begivenhed, hvor brugeren vælger lighedstegnet (user_selection == 10). En anden switchfunktion fungerer gennem de fire matematiske funktioner (bestemt af op_num). Tilføjelsessagen (sag 1) tilføjer term1 og gemt_nummer sammen og gemmer tallet i resultatvariablen. Resultatet udskrives i resultatfeltet som en dobbelt. Subtraktionstilfældet (case 2) trækker gemt_tal fra term1 og gemmer tallet i resultatvariablen. Resultatet udskrives i dobbeltfeltet i resultatfeltet. Multiplikationstilfældet (sag 3) multiplicerer term1 med gemt_nummer og gemmer tallet i resultatvariablen. Resultatet udskrives i resultatfeltet som en dobbelt. Divisionssagen (sag 4) deler term1 med gemt_nummer sammen og gemmer tallet i resultatvariablen. Resultatet udskrives i resultatfeltet som en float (fordi divisionssvarene kan være decimaltal). Efter at enten et tal, en operand eller et resultat blev udskrevet på skærmen, nulstilles markøren, gemt_nummer indstilles til det forrige resultat, og term1 & op_num nulstilles.

Et par bemærkninger: brugeren kan ikke indtaste decimaltal i regnemaskinen på grund af manglen på en decimaltegn. Brugeren kan også kun lave en ligning ad gangen. Du kan ikke beregne et resultat og derefter tilføje/trække/multiplicere/dividere det resultat. I funktionen numberSelect () er der en funktion, der sletter skærmen, efter at et resultat er blevet udskrevet, hvis en bruger har trykket på en anden firkant.

Trin 4: Funktionen Kode: Kvadrater

ugyldige firkanter () {

// sorte og hvide firkanter veksler på hver række, og den første og tredje række har et modsat mønster end den anden og fjerde række

tft.fillRect (0, 60, 60, 65, TFT_BLACK); // første række af firkanter starter, sort til hvid tft.fillRect (60, 60, 60, 65, TFT_WHITE);

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

tft.fillRect (180, 60, 60, 65, TFT_WHITE); // første række af firkanter ender

tft.fillRect (0, 125, 60, 65, TFT_WHITE); // anden række med firkanter starter, hvid til sort tft.fillRect (60, 125, 60, 65, TFT_BLACK);

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

tft.fillRect (180, 125, 60, 65, TFT_BLACK); // anden række af firkanter ender

tft.fillRect (0, 190, 60, 65, TFT_BLACK); // tredje række med firkanter starter, sort til hvid tft.fillRect (60, 190, 60, 65, TFT_WHITE);

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

tft.fillRect (180, 190, 60, 65, TFT_WHITE); // tredje række af firkanter ender

tft.fillRect (0, 255, 60, 65, TFT_WHITE); // fjerde række af firkanter starter, hvid til sort tft.fillRect (60, 255, 60, 65, TFT_BLACK);

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

tft.fillRect (180, 255, 60, 65, TFT_BLACK); // fjerde række af firkanter ender

}

Funktionen firkanter () er ret ligetil. Kommandoen tft.fillRect (X1, Y1, X2, Y2, TFT_COLOR) tegner et rektangel i henhold til de parametre, der sendes til den, som er x og ys første positioner, x og ys anden position, og den farve, som rektanglet er fyldt med. Denne funktion tegner alle fire rækker af firkanter (teknisk rektangler) og udfylder hver firkant med den farve, der er sendt til den.

Trin 5: Koden: Numbers -funktionen

tomrumstal () {

tft.setTextColor (TFT_BLUE); // indstiller farve til nummer/tegn til blå

tft.setTextSize (5); // sætter tal/tegnstørrelse til 5

tft.setCursor (18, 75); // indstiller markør for første linje med tal/tegn

tft.print ("7 8 9 /"); // udskriver første linje med tal/tegn

tft.setCursor (18, 140); // indstiller markør for anden linje med tal/tegn

tft.print ("4 5 6 X"); // udskriver anden linje med tal/tegn

tft.setCursor (18, 205); // indstiller markør for tredje linje med tal/tegn

tft.print ("1 2 3 -"); // udskriver tredje linje med tal/tegn

tft.setCursor (18, 270); // indstiller markør for fjerde linje med tal/tegn

tft.print ("C 0 = +"); // udskriver fjerde linje med tal/tegn

}

Numrene () -funktionen er også ligetil. De to første linjer sætter tekststørrelsen større og farven til blå. Kommandoen tft.setCursor () sætter markøren til den position på hver række, hvor skrivningen af tallene starter. Herefter udskriver kommandoen tft.print () tallene/tegnene over firkanterne.

Trin 6: Koden: NummerVælg funktion

void numberSelect () {

TSPoint p = ts.getPoint ();

pinMode (XM, OUTPUT);

pinMode (YP, OUTPUT);

hvis (p.z> MINPRESSURE) {

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

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

hvis (resultat! = 0) {

resultat = 0;

gemt_nummer = 0;

tft.print ("CLEAR VALUES");

forsinkelse (500);

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("");

tft.setCursor (cursorLocX, cursorLocY);

}

For at starte funktionen numberSelect () beder vi om brugerinput fra berøringsskærmen med kommandoen ts.getPoint (). Når disse data er blevet indsamlet, kontrollerer vi, om minimumstrykket er overskredet (eller med andre ord, om brugeren har trykket et sted på berøringsskærmen). Hvis det er, kortlægges x- og y-koordinaterne fra kartesiske koordinater til berøringsskærmsspecifikke koordinater. (0, 0) er det øverste venstre hjørne af berøringsskærmen med x -aksen på tværs og y -aksen nedad. Den næste del kontrollerer, om der er gemt et nummer i resultatet. Hvis det er tilfældet, nulstilles resultat og gemt_nummer til 0. Meddelelsen "CLEAR VALUES" udskrives over resultatfeltet, og skærmen ryddes med markøren tilbage til startpositionen.

hvis (s.y. 60) {// første firkantrække

hvis (s. x <60)

user_selection = 7;

ellers hvis (s. x <120)

user_selection = 8;

ellers hvis (s. x <180)

user_selection = 9;

ellers user_selection = 14;

} ellers hvis (s.y 125) {// anden række med firkanter

hvis (s. x <60)

user_selection = 4;

ellers hvis (s. x <120)

user_selection = 5;

ellers hvis (s. x <180)

user_selection = 6;

ellers user_selection = 13;

} ellers hvis (s.y 190) {// tredje række med firkanter

hvis (s. x <60)

user_selection = 1;

ellers hvis (s. x <120)

user_selection = 2;

ellers hvis (s. x <180)

user_selection = 3;

ellers user_selection = 12;

} ellers hvis (s.y> 255) {// fjerde række af firkanter

hvis (s. x <60)

user_selection = 15;

ellers hvis (s. x <120)

user_selection = 0;

ellers hvis (s. x <180)

user_selection = 10;

ellers user_selection = 11;

}

}andet{

user_selection = 16; // user_selection er indstillet til 16 (intet variabel)

}

}

Dette er den del, der bestemmer, hvilken knap der er valgt. Begynder med den øverste række af firkanter og slutter med den nederste række, leder Arduino efter, hvor skærmen faktisk blev trykket på. Det tildeler derefter firkanten et tal og gemmer det nummer i user_selection. Tallene 0-9 svarer til tal-firkanterne, tallene 11-15 svarer til operand-firkanterne og den klare firkant, og tallet 10 svarer til lighedstegnet firkant. Hvis der ikke er valgt en firkant, er user_selection indstillet til 16, hvilket får sløjfen til at starte forfra (se loop -funktion).

Trin 7: Nyd dit færdige projekt

Der har du det! Du har nu en berøringsskærmberegner, der kan foretage addition, subtraktion, multiplikation og division. Dette projekt ændrede hele den måde, jeg troede, at en lommeregner fungerede på. Da jeg arbejdede på dette projekt, husker jeg, at jeg sagde til min instruktør i klassen: "Jeg vil aldrig se på en lommeregner på samme måde igen!" De funktioner, du som bruger synes er lette, er noget svære, når du står bag computeren og forsøger at efterligne din idé. Jeg håber, at du nød projektet, og jeg håber, at din tankegang om, hvordan en lommeregner fungerer, også er blevet ændret!

Her er hele koden for din bekvemmelighed. Den er fyldt med kommentarer, så hvis du har problemer, skal de vise dig, hvad hver linje gør.

Anbefalede: