Tartalomjegyzék:
- Kellékek
- 1. lépés: Hardverkapcsolatok
- 2. lépés: A kód: Globális definíciók és beállítás
- 3. lépés: A kód: Loop
- 4. lépés: A kód: négyzetfüggvény
- 5. lépés: A kód: számok függvény
- 6. lépés: A kód: NumberSelect Function
- 7. lépés: Élvezze a befejezett projektet
Videó: Arduino érintőképernyős számológép: 7 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Helló! Ez a projekt egy érintőképernyős számológép készítése Arduino Uno és TFT LCD pajzs használatával. Az otthoni iskolai programozási órámhoz találtam ki a koncepciót, és a projekt felépítésében szerzett tapasztalatok nagyon érdekesek voltak. Ez a számológép elvégezheti a négy egyszerű matematikai műveletet (összeadás, kivonás, szorzás és osztás). Ezenkívül legfeljebb két tizedes pontot jelenít meg a megosztási válaszokhoz. Merüljünk rögtön! Az alábbiakban felsoroljuk a projekthez szükséges kellékeket.
Kellékek
- Arduino Uno
-2.4 TFT LCD pajzs (itt vettem:
- USB A -B kábel (kábel az Arduino csatlakoztatásához a számítógéphez)
- Számítógép telepítve Arduino IDE -vel
- Két könyvtárat is le kell töltenie: MCUFRIEND_kbv és érintőképernyőt. Az elsőt megtalálhatja a github -on (link: https://github.com/prenticedavid/MCUFRIEND_kbv), vagy használhatja a könyvtár zip fájlját, amelyet alább tettem fel. A második az Arduino könyvtárkezelőben található a telepítéshez.
1. lépés: Hardverkapcsolatok
Az érintőképernyő -pajzs csatlakoztatása az Arduino Uno -hoz egyszerű és gyors. Mindössze annyit kell tennie, hogy a pajzs legalacsonyabb csapjait az Arduino legalacsonyabb csapjaival sorakoztatja, és a pajzsot a csapokba nyomja. A felső 5 V -os és a címkézetlen tűk a tápoldalon nem lehetnek tűk a pajzsból, ugyanazok a paraméterek érvényesek a tábla másik oldalán lévő SCL és SDA feliratú csapokra. Most készen állunk a kódolásra!
2. lépés: A kód: Globális definíciók és beállítás
#befoglalni
MCUFRIEND_kbv tft; // UNO pajzsokhoz amúgy is bekötött
#befoglalni
#define YP A3
#define XM A2
#define YM 9
#define XP 8
Érintőképernyő ts = Érintőképernyő (XP, YP, XM, YM, 300);
#define MINPRESSURE 10
Ez a kód kezdete, ahol könyvtárakat (MCUFRIEND_kbv és érintőképernyő) is magába foglalunk, meghatározzuk az X és Y csapokat, beállítjuk az érintőképernyő paramétereit, és meghatározzuk a minimális nyomást, amely szükséges az Arduino számára a felhasználói sajtó regisztrálásához.
int azonosító;
int user_selection;
úszó mentett_szám = 0;
lebegő kifejezés1;
int op_num;
lebegési eredmény;
int kurzorLocX = 5;
int cursorLocY = 20;
Közvetlenül a beállítás előtt be kell állítanunk néhány globális változót. Az ID segít az érintőképernyő üzembe helyezésében. A user_selection olyan számot tartalmaz, amely megfelel annak a gombnak, amelyet a felhasználó az érintőképernyő megnyomásakor választ. save_number az a változó, amelyet a felhasználó beírása után nyomtatunk a képernyőre (erről bővebben a ciklusban). Ez egy úszó, így tizedes számokat és egész számokat is tartalmazhat. a term1 az a változó, amelybe az egyenlet első száma mentésre kerül egy operandus kiválasztása után. Az op_num az operandust számként menti (1 összeadáshoz, 2 kivonáshoz, 3 szorzáshoz és 4 osztáshoz). Az eredmény az a változó, amely a képernyőre nyomtatódik, miután a felhasználó megnyomta az egyenlőségjelet. Ez is úszó. cursorLocX és cursorLocY azok a leképezési pontok az érintőképernyőn, ahol a kurzort többszörösre állítják (a felső szürke sávban található, más néven eredménymező).
void setup () {
tft.reset ();
Azonosító = tft.readID ();
tft.begin (azonosító);
tft.setRotation (0);
tft.fillScreen (TFT_DARKGREY);
négyzetek();
számok ();
tft.setTextSize (3);
tft.setTextColor (TFT_BLUE, TFT_DARKGREY);
}
A beállítási funkciónk először az érintőképernyő-pajzs inicializálását tartalmazza (1-3. Sor). Az árnyékolás tájolása a tft.setRotation () paranccsal állítható be, a 0 függőleges helyzetben. A teljes képernyő sötétszürke színű a tft.fillScreen () paranccsal, amelyet a tetejére írunk (kivéve az eredmény mezőt). A négyzetek () és a számok () függvények megrajzolják a számológép négyzeteit, a kockákat fekete -fehérre színezik egy sakktábla mintával, és számokat/operandusokat írnak kék színnel a négyzetekre. A következő lépésben ezekhez jutunk. A tft.setTextSize () parancs az eredménymező szövegméretét 3 -ra állítja, ami közepes betűtípus. A tft.setTextColor () parancs az eredménymező szöveg színét kékre állítja, amely a sötétszürke mezőre van írva.
3. lépés: A kód: Loop
void loop () {numberSelect ();
késleltetés (100);
if (user_selection == 16) {
;
}más{
if (user_selection <10) {
mentett_szam = mentett_szam * 10 + user_selection;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (mentett_szám);
} else if (user_selection> 10) {
kapcsoló (user_selection) {
11. eset:
op_szám = 1;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("+");
kifejezés1 = mentett_szám;
mentett_szám = 0;
szünet;
12. eset:
op_szám = 2;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("-");
kifejezés1 = mentett_szám;
mentett_szám = 0;
szünet;
13. eset:
op_szám = 3;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("X");
kifejezés1 = mentett_szám;
mentett_szám = 0;
szünet;
14. eset:
op_szám = 4;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("/");
kifejezés1 = mentett_szám;
mentett_szám = 0;
szünet;
15. eset:
mentett_szám = 0;
kifejezés 1 = 0;
op_szám = 0;
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("");
szünet;
}
tft.setCursor (cursorLocX, cursorLocY);
Ez sokat rágható, ezért elmagyarázom a fentieket. Kezdjük a numberSelect () függvény hívásával, amely egy számot rendel az érintőképernyő minden négyzetéhez. Amikor a felhasználó megnyomja az egyik négyzetet, a függvény a user_selection változót a négyzet számára állítja. Az első if utasítás csak akkor fut végig a cikluson, ha érvényes felhasználói választás történt. Ha igen, akkor a következő if utasítás megkérdezi, hogy a user_selection 10-nél kisebb számot tartalmaz-e (0-9 számok). Ha igen, a mentett_számot megszorozzuk 10 -zel, és a user_selection mezőben szereplő számot hozzáadjuk a mentett_számhoz, amelyet az érintőképernyő eredménymezőjében nyomtatunk. Ha nem, akkor a következő if utasítás megkérdezi, hogy a user_selection 10 -nél nagyobb számot tartalmaz -e (az operandusok száma: 11 +, 12 - -, 13 -X, 14 - /és 15 -tiszta képernyő négyzet). Egy kapcsoló funkció gondoskodik minden esetről (a user_selection határozza meg). Az op_num változó a kiválasztott operandusnak megfelelő számot kap (1 +, 2 -, 3, X és 4 a /). A save_number értékét a rendszer az 1. változóba menti, így a save_number változó használható az egyenlet második felére. Az operandus szimbólum megjelenik a képernyőn, és törli a számokat az eredménymezőben. Az egyetlen kivétel a tiszta képernyő négyzet, amely alaphelyzetbe állítja az összes számítási változót, és törli az eredménymezőt.
}más{
kapcsoló (op_num) {
1. eset:
eredmény = kifejezés1 + mentett_szám;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dupla (eredmény));
szünet;
2. eset:
eredmény = kifejezés1 - mentett_szám;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dupla (eredmény));
szünet;
3. eset:
eredmény = kifejezés1 * mentett_szám;
tft.setCursor (cursorLocX, cursorLocY);
tft.print (dupla (eredmény));
szünet;
4. eset:
eredmény = lebegés (kifejezés 1) / lebegés (mentett_szám);
tft.setCursor (cursorLocX, cursorLocY);
tft.print (eredmény);
szünet;
}
tft.setCursor (cursorLocX, cursorLocY);
mentett_szám = eredmény;
kifejezés 1 = 0;
op_szám = 0;
késleltetés (1000);
}
}
}
A ciklus utolsó része azzal az eseménysel foglalkozik, amikor a felhasználó kiválasztja az egyenlőségjelet (user_selection == 10). Egy másik kapcsolófunkció a négy matematikai függvényen keresztül működik (op_num határozza meg). Az összeadási eset (1. eset) összeadja az 1. kifejezést és a mentett_számot, és elmenti a számot az eredményváltozóba. Az eredményt duplán nyomtatja az eredménymezőbe. A kivonási eset (2. eset) kivonja a save_number értéket az 1. kifejezésből, és elmenti a számot az eredményváltozóba. Az eredményt duplán nyomtatja az eredménymezőbe. A szorzási eset (3. eset) megszorozza az 1. kifejezést a mentett_számmal, és elmenti a számot az eredményváltozóba. Az eredményt duplán nyomtatja az eredménymezőbe. Az osztási eset (4. eset) elosztja az 1. kifejezést a mentett_számmal, és elmenti a számot az eredményváltozóba. Az eredményt úszóként nyomtatja az eredménymezőbe (mert az osztási válaszok tizedes számok is lehetnek). Miután egy számot, operandust vagy eredményt nyomtatott a képernyőre, a kurzor visszaáll, a mentett_szám az előző eredményre van állítva, és az 1. és op_szám visszaáll.
Néhány megjegyzés: a felhasználó nem írhatja be a tizedes számokat a számológépbe a tizedesjegy négyzet hiánya miatt. Ezenkívül a felhasználó egyszerre csak egy egyenletet hajthat végre. Nem tudja kiszámítani az eredményt, majd összeadni/kivonni/szorozni/osztani. A numberSelect () függvényben van egy funkció, amely törli a képernyőt az eredmény kinyomtatása után, ha a felhasználó megnyomott egy másik négyzetet.
4. lépés: A kód: négyzetfüggvény
üres négyzetek () {
// fekete -fehér négyzetek váltakoznak minden sorban, és az első és a harmadik sor ellentétes mintázatú, mint a második és a negyedik sor
tft.fillRect (0, 60, 60, 65, TFT_BLACK); // az első négyzetsor kezdődik, fekete -fehér tft.fillRect (60, 60, 60, 65, TFT_WHITE);
tft.fillRect (120, 60, 60, 65, TFT_BLACK);
tft.fillRect (180, 60, 60, 65, TFT_WHITE); // az első négyzetsor véget ér
tft.fillRect (0, 125, 60, 65, TFT_WHITE); // második négyzetsor kezdődik, fehértől feketeig tft.fillRect (60, 125, 60, 65, TFT_BLACK);
tft.fillRect (120, 125, 60, 65, TFT_WHITE);
tft.fillRect (180, 125, 60, 65, TFT_BLACK); // a második négyzetsor véget ér
tft.fillRect (0, 190, 60, 65, TFT_BLACK); // a harmadik négyzetsor kezdődik, feketétől fehérig tft.fillRect (60, 190, 60, 65, TFT_WHITE);
tft.fillRect (120, 190, 60, 65, TFT_BLACK);
tft.fillRect (180, 190, 60, 65, TFT_WHITE); // a harmadik négyzetsor véget ér
tft.fillRect (0, 255, 60, 65, TFT_WHITE); // a negyedik négyzetsor kezdődik, fehértől feketeig tft.fillRect (60, 255, 60, 65, TFT_BLACK);
tft.fillRect (120, 255, 60, 65, TFT_WHITE);
tft.fillRect (180, 255, 60, 65, TFT_BLACK); // a negyedik négyzetsor véget ér
}
A négyzetek () függvény meglehetősen egyszerű. A tft.fillRect (X1, Y1, X2, Y2, TFT_COLOR) parancs egy téglalapot rajzol a hozzá átadott paraméterek szerint, amelyek x és y első pozíciói, x és y második pozíciói, valamint a szín, amellyel a téglalap kitöltődik.. Ez a funkció lerajzolja mind a négy sor négyzetet (technikailag téglalapokat), és minden négyzetet kitölt a hozzá adott színnel.
5. lépés: A kód: számok függvény
érvénytelen számok () {
tft.setTextColor (TFT_BLUE); // a szám/karakter színét kékre állítja
tft.setTextSize (5); // a szám/karakter méretét 5 -re állítja
tft.setCursor (18, 75); // beállítja a kurzort a számok/karakterek első sorához
tft.print ("7 8 9 /"); // kinyomtatja a számok/karakterek első sorát
tft.setCursor (18, 140); // beállítja a kurzort a számok/karakterek második sorához
tft.print ("4 5 6 X"); // kinyomtatja a számok/karakterek második sorát
tft.setCursor (18, 205); // beállítja a kurzort a számok/karakterek harmadik sorához
tft.print ("1 2 3 -"); // kinyomtatja a számok/karakterek harmadik sorát
tft.setCursor (18, 270); // beállítja a kurzort a számok/karakterek negyedik sorához
tft.print ("C 0 = +"); // kinyomtatja a számok/karakterek negyedik sorát
}
A számok () függvény is egyszerű. Az első két sorban a szöveg mérete nagyobb, a színe pedig kék. A tft.setCursor () parancs a kurzort arra a sorra állítja, ahol a számok írása kezdődik. Ezután a tft.print () parancs kinyomtatja a számokat/karaktereket a négyzetekre.
6. lépés: A kód: NumberSelect Function
void numberSelect () {
TSPoint p = ts.getPoint ();
pinMode (XM, OUTPUT);
pinMode (YP, OUTPUT);
ha (p.z> MINPRESSURE) {
p.x = térkép (p.x, 250, 845, 0, 239);
p.y = térkép (p.y., 245, 860, 0, 319);
if (eredmény! = 0) {
eredmény = 0;
mentett_szám = 0;
tft.print ("TISZTA ÉRTÉKEK");
késleltetés (500);
tft.setCursor (cursorLocX, cursorLocY);
tft.print ("");
tft.setCursor (cursorLocX, cursorLocY);
}
A numberSelect () függvény elindításához kérjük, hogy a felhasználó írja be az érintőképernyőt a ts.getPoint () paranccsal. Miután ezeket az adatokat összegyűjtöttük, ellenőrizzük, hogy túllépték -e a minimális nyomást (vagy más szóval, ha a felhasználó megnyomta valahol az érintőképernyőt). Ha igen, akkor az x és y koordinátákat a derékszögű koordinátákról az érintőképernyő-specifikus koordinátákra képezi le. (0, 0) az érintőképernyő bal felső sarka, ahol az x tengely átmegy, az y tengely pedig lefelé. A következő rész ellenőrzi, hogy van -e mentett szám az eredményben. Ha van, akkor az eredmény és a mentett_szám 0 -ra áll vissza. Az "ÉRTÉKEK TISZTÍTÁSA" üzenet az eredménymezőre kerül nyomtatásra, és a képernyő törlődik a kurzorral a kiindulási helyzetébe.
if (p.y. 60) {// első négyzetsor
ha (px x 60)
user_selection = 7;
egyébként ha (px x 120)
user_selection = 8;
egyébként ha (px x 180)
user_selection = 9;
else user_selection = 14;
} else if (p. 125) {// második négyzetsor
ha (px x 60)
user_selection = 4;
egyébként ha (px x 120)
user_selection = 5;
egyébként ha (px x 180)
user_selection = 6;
else user_selection = 13;
} else if (p.y. 190) {// harmadik négyzetsor
ha (px x 60)
user_selection = 1;
egyébként ha (px x 120)
user_selection = 2;
egyébként ha (px x 180)
user_selection = 3;
else user_selection = 12;
} else if (p.y> 255) {// negyedik négyzetsor
ha (px x 60)
user_selection = 15;
egyébként ha (px x 120)
user_selection = 0;
egyébként ha (px x 180)
user_selection = 10;
else user_selection = 11;
}
}más{
user_selection = 16; // a user_selection értéke 16 (semmi változó)
}
}
Ez az a rész, amely meghatározza, hogy melyik gombot választotta ki. A négyzetek felső sorával kezdve az alsó sorral végződve az Arduino megkeresi, hogy valójában hol volt megnyomva a képernyő. Ezután egy számot rendel a négyzethez, és elmenti azt a user_selection mappába. A 0-9 számok a négyzetek számának felelnek meg, a 11-15 számok az operandus négyzeteknek és a tiszta négyzetnek, a 10 szám pedig az egyenlőségjel négyzetnek. Ha nincs négyzet kiválasztva, akkor a user_selection 16 -ra van állítva, aminek hatására a ciklus újra kezdődik (lásd ciklusfüggvény).
7. lépés: Élvezze a befejezett projektet
Tessék, itt van! Most van egy érintőképernyős számológépe, amely összeadást, kivonást, szorzást és osztást végezhet. Ez a projekt teljesen megváltoztatta azt, ahogyan azt gondoltam, hogy egy számológép működik. Miközben ezen a projekten dolgoztam, emlékszem, hogy az órán azt mondtam az oktatómnak: "Soha többé nem nézem ugyanúgy a számológépet!" A felhasználók által egyszerűnek tartott funkciók némileg bonyolultak, ha a számítógép mögött áll, és megpróbálja utánozni az elképzelését. Remélem, tetszett a projekt, és remélem, hogy a számológép működésével kapcsolatos gondolkodásmódja is megváltozott!
Íme a teljes kód az Ön kényelme érdekében. Tele van megjegyzésekkel, így ha bármilyen problémája van, meg kell mutatniuk, mit tesznek az egyes sorok.
Ajánlott:
Arduino Flappy Bird - Arduino 2,4 hüvelykes TFT érintőképernyős SPFD5408 madárjáték -projekt: 3 lépés
Arduino Flappy Bird | Arduino 2,4 hüvelykes TFT érintőképernyős SPFD5408 madárjáték -projekt: A Flappy Bird néhány év alatt túl népszerű játék volt ott, és sokan a maguk módján alkották meg, én is, én készítettem a flappy bird verzióját Arduino -val és az olcsó 2,4 "TFT -vel Érintőképernyő SPFD5408, Tehát kezdjük
Arduino TFT LCD érintőképernyős számológép: 3 lépés
Arduino TFT LCD érintőképernyős számológép: Sziasztok, srácok, ebben az oktatóanyagban megtanuljuk, hogyan kell számológépet készíteni az Arduino Uno használatával, 3.5 " TFT LCD érintőképernyős kijelző. Tehát írunk egy kódot, és feltöltjük az arduino -ba, amely megjeleníti a számológép felületét a kijelzőn, és
Arduino érintőképernyős kijelző: 4 lépés
Arduino érintőképernyő: Hello! Ma megmutatom, hogyan kell használni az érintőképernyős pajzsot az Arduino Uno -val. Használhatja kis kijelzőként idézetekhez, képekhez vagy minden máshoz
Hogyan kell használni a billentyűzetet és az LCD -t az Arduino -val az Arduino számológép elkészítéséhez: 5 lépés
Hogyan kell használni a billentyűzetet és az LCD -t az Arduino -val az Arduino -számológép elkészítéséhez: Ebben az oktatóanyagban megosztom, hogyan használhatja a 4x4 -es mátrix billentyűzetet és a 16x2 -es LCD -t az Arduino -val, és hogyan készítheti el egy egyszerű Arduino -számológépet. Tehát kezdjük
Arduino TFT érintőképernyős ajtózár: 5 lépés
Arduino TFT érintőképernyős ajtózár: Ez az első utasítható. Ez a projekt az Arduino és egy 2,8 " TFT érintőképernyő jelszavas vázlattal, hogy aktiváljon egy relét, amely megszakítja az áramkört a mágneses ajtóhoz. Háttérben az ajtón lévő RFID zár elromlott ahelyett, hogy újra bekötné az