Мазмұны:

Arduino сенсорлық экранының калькуляторы: 7 қадам
Arduino сенсорлық экранының калькуляторы: 7 қадам

Бейне: Arduino сенсорлық экранының калькуляторы: 7 қадам

Бейне: Arduino сенсорлық экранының калькуляторы: 7 қадам
Бейне: MKS Robin Nano v2.0 - A4988 or DRV8825 Install Guide 2024, Шілде
Anonim
Arduino сенсорлық экранының калькуляторы
Arduino сенсорлық экранының калькуляторы

Сәлеметсіз бе! Бұл Arduino Uno мен TFT LCD қалқанының көмегімен сенсорлық экранды есептеу машинасының жобасы. Мен үйде бағдарламалау сабағының тұжырымдамасын ойлап таптым, және бұл жобаны құру тәжірибесі өте қызықты болды. Бұл калькулятор төрт қарапайым математикалық әрекетті орындай алады (қосу, азайту, көбейту және бөлу). Ол сондай -ақ жауаптары бар бөлу үшін екі ондық нүктеге дейін көрсетеді. Дәл суға түсейік! Бұл жобаның материалдары төменде көрсетілген.

Жабдықтар

- Ардуино Уно

-2.4 TFT LCD қалқаны (мен оны сатып алдым:

- USB A - B кабелі (Arduino компьютерге қосылатын сым)

- Arduino IDE орнатылған компьютер

- Сізге екі кітапхананы жүктеу қажет болады: MCUFRIEND_kbv және сенсорлық экран. Сіз біріншісін github -дан таба аласыз (сілтеме: https://github.com/prenticedavid/MCUFRIEND_kbv) немесе сіз төменде енгізген кітапхана zip файлын пайдалана аласыз. Екіншісі - орнату үшін Arduino кітапханасының менеджерінде.

1 -қадам: Аппараттық қосылулар

Аппараттық қосылулар
Аппараттық қосылулар
Аппараттық қосылулар
Аппараттық қосылулар
Аппараттық қосылулар
Аппараттық қосылулар

Сенсорлық экран қалқанын Arduino Uno -ға қосу қарапайым және жылдам. Сізге қалқандағы ең төменгі түйреуіштерді Arduino -дегі ең төменгі түйреуіштермен тізіп, қалқаны түйреуіштерге итеру жеткілікті. Жоғарғы 5В түйреуіші мен қуат жағындағы белгісіз түйреуіште қалқаннан түйреуіштер болмауы керек, сол параметрлер тақтаның екінші жағында SCL және SDA деп белгіленген түйреуіштер үшін қолданылады. Енді біз кодтауға дайынбыз!

2 -қадам: Код: жаһандық анықтамалар мен орнату

#қосу

MCUFRIEND_kbv tft; // БҰҰ қалқандары үшін бәрібір

#қосу

#YP A3 анықтаңыз

#XM A2 анықтаңыз

#YM 9 анықтаңыз

#XP 8 анықтаңыз

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

#мини -қысымды анықтаңыз

Бұл кодтың басы, онда біз кітапханаларды қосамыз (MCUFRIEND_kbv & сенсорлық экран), X және Y түйреуіштерін анықтаймыз, сенсорлық экран параметрлерін орнатамыз және Arduino қолданушыны басуды тіркеуге қажетті ең төменгі қысымды анықтаймыз.

int ID;

int user_selection;

өзгермелі сақталған_сан = 0;

өзгермелі термин1;

int op_num;

өзгермелі нәтиже;

int cursorLocX = 5;

int cursorLocY = 20;

Орнатудың алдында бізге кейбір жаһандық айнымалыларды орнату қажет. Идентификатор сенсорлық экранды іске қосуға көмектеседі. user_selection сенсорлық экранды басқанда пайдаланушы таңдайтын пернеге сәйкес келетін санды ұстайды. save_number - бұл пайдаланушы енгізгеннен кейін экранға басып шығаратын айнымалы мән (бұл туралы толығырақ циклде). Бұл өзгермелі, сондықтан ондық сандар мен бүтін сандарды ұстай алады. term1 - операнд таңдалғаннан кейін теңдеудің бірінші нөмірі сақталатын айнымалы. op_num операндты сан ретінде сақтайды (қосу үшін 1, азайту үшін 2, көбейту үшін 3 және бөлу үшін 4). нәтиже - пайдаланушы теңдік белгісін басқаннан кейін экранға шығарылатын айнымалы мән. Бұл сондай -ақ жүзу. cursorLocX және cursorLocY - бұл сенсорлық экрандағы курсор бірнеше рет орнатылған салыстыру нүктелері (ол жоғарғы жағындағы сұр жолақта орналасқан, әйтпесе нәтижелер өрісі деп аталады).

жарамсыз орнату () {

tft.reset ();

ID = tft.readID ();

tft.begin (ID);

tft.setRotation (0);

tft.fillScreen (TFT_DARKGREY);

квадраттар ();

сандар();

tft.setTextSize (3);

tft.setTextColor (TFT_BLUE, TFT_DARKGREY);

}

Біздің орнату функциясы алдымен сенсорлық экранның инициализациясын қамтиды (1-3 жолдар). Қалқаның бағыты tft.setRotation () пәрмені арқылы орнатылады, 0 - тік. Бүкіл экран tft.fillScreen () командасымен қара сұр түске боялған, біз оны жоғарғы жағына жазамыз (нәтижелер өрісін қоспағанда). Квадраттар () және сандар () функциялары калькулятордың квадраттарын салады, квадраттарды шахмат тақтасы бойынша ақ -қара түстерге бояйды және квадраттарға сандар/операндтарды көк түспен жазады. Біз оларға келесі қадамда жетеміз. Tft.setTextSize () пәрмені нәтиже өрісінің мәтіндік өлшемін 3 -ке орнатады, бұл орташа қаріп. Tft.setTextColor () пәрмені қара сұр өрістің үстінде жазылған нәтижелер өрісінің мәтін түсін көк етіп қояды.

3 -қадам: Code: Loop

void loop () {numberSelect ();

кешіктіру (100);

егер (user_selection == 16) {

;

} басқа {

if (user_selection <10) {

құтқарылған_сан = сақталған_сан * 10 + пайдаланушы_таңдауы;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (сақталған_сан);

} else if (user_selection> 10) {

ауысу (user_selection) {

11 жағдай:

op_num = 1;

tft.setCursor (cursorLocX, cursorLocY);

tft.print («+»);

термин1 = сақталған_сан;

құтқарылған_сан = 0;

үзіліс;

12 жағдай:

op_num = 2;

tft.setCursor (cursorLocX, cursorLocY);

tft.print («-»);

термин1 = сақталған_сан;

құтқарылған_сан = 0;

үзіліс;

13 жағдай:

op_num = 3;

tft.setCursor (cursorLocX, cursorLocY);

tft.print («X»);

термин1 = сақталған_сан;

құтқарылған_сан = 0;

үзіліс;

14 жағдай:

op_num = 4;

tft.setCursor (cursorLocX, cursorLocY);

tft.print («/»);

термин1 = сақталған_сан;

құтқарылған_сан = 0;

үзіліс;

15 жағдай:

құтқарылған_сан = 0;

термин1 = 0;

op_num = 0;

tft.setCursor (cursorLocX, cursorLocY);

tft.print («»);

үзіліс;

}

tft.setCursor (cursorLocX, cursorLocY);

Бұл өте көп шайнау, сондықтан мен жоғарыдағыларды түсіндіремін. Біз сенсорлық экрандағы әр шаршыға нөмір тағайындайтын numberSelect () функциясына қоңырау шалудан бастаймыз. Пайдаланушы сол квадраттардың бірін басқанда, функция user_selection айнымалысын квадрат нөміріне орнатады. Егер бірінші if операторы дұрыс қолданушы таңдауы болған жағдайда ғана цикл арқылы орындалады. Егер солай болса, келесі if операторы user_selection ішінде 10-нан аз нөмір сақталған ба деп сұрайды (0-9 сандары). Олай болса, саусақ_нөмірі 10 -ға көбейтіледі және user_selection нөмірі сенсорлық экрандағы нәтижелер өрісінде басылған save_number -ге қосылады. Егер олай болмаса, келесі if операторында user_selection -та 10 -нан үлкен нөмір бар ма деп сұрайды (операнд сандары: +үшін 12, -үшін 13, X үшін 14, /үшін 15 және таза экранның квадраты үшін 15). Коммутатор функциясы әр жағдайға жауап береді (user_selection анықтайды). Op_num айнымалысына таңдалған операндқа сәйкес келетін сан беріледі (1 үшін +, 2 үшін -, X үшін 3 және /үшін 4). Save_number мәні 1 айнымалы мәніне сақталады, осылайша, сақталған_сан айнымалысын теңдеудің екінші жартысында қолдануға болады. Нәтижелер өрісіндегі кез келген сандарды өшірумен бірге экранда операнд символы басылады. Жалғыз ерекшелік - бұл барлық айнымалы мәндерді қалпына келтіретін және нәтиже өрісін ондағы нәрседен тазартатын мөлдір экран.

} басқа {

қосқыш (op_num) {

1 -жағдай:

нәтиже = term1 + сақталған_сан;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (қосарланған (нәтиже));

үзіліс;

2 -жағдай:

нәтиже = термин1 - сақталған_сан;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (қосарланған (нәтиже));

үзіліс;

3 -жағдай:

нәтиже = термин1 * сақталған_сан;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (қосарланған (нәтиже));

үзіліс;

4 -жағдай:

нәтиже = өзгермелі (термин1) / қалқымалы (сақталған_сан);

tft.setCursor (cursorLocX, cursorLocY);

tft.print (нәтиже);

үзіліс;

}

tft.setCursor (cursorLocX, cursorLocY);

save_number = нәтиже;

термин1 = 0;

op_num = 0;

кешіктіру (1000);

}

}

}

Циклдің соңғы бөлігі пайдаланушының теңдік белгісін таңдауы оқиғасына қатысты болады (user_selection == 10). Басқа коммутатор функциясы төрт математикалық функция арқылы жұмыс істейді (op_num арқылы анықталады). Қосымша регистрі (1 -жағдай) term1 мен save_number санын қосады және санды нәтиже айнымалысына сақтайды. Нәтиже нәтижелер өрісіне қосарланған түрде шығарылады. Алып тастау регистрі (2 -жағдай) 1 -ші терминнен құтқарылған_санды алып тастайды және нәтижені айнымалыға сақтайды. Нәтиже екі есе болып нәтижелер өрісіне шығарылады. Көбейту регистрі (3 -жағдай) 1 -терминалды save_number санына көбейтеді және нәтижені айнымалыға сақтайды. Нәтиже екі еселенген нәтиже өрісіне шығарылады. Бөлу жағдайы (4 -жағдай) 1 -ші терминді save_number -ге бөледі және санды нәтиже айнымалысына сақтайды. Нәтиже нәтижелер өрісіне өзгермелі ретінде шығарылады (себебі бөлу жауаптары ондық сандар болуы мүмкін). Экранға сан, операнд немесе нәтиже шығарылғаннан кейін, меңзер қалпына келтіріледі, саусақ_саны алдыңғы нәтижеге орнатылады, термин1 және оп_сана қалпына келтіріледі.

Бірнеше ескертулер: пайдаланушы ондық сандар квадратының болмауына байланысты калькуляторға ондық сандарды енгізе алмайды. Сонымен қатар, пайдаланушы бір уақытта тек бір теңдеу жасай алады. Сіз нәтижені есептей алмайсыз, содан кейін осы нәтижені қосуға/шегеруге/көбейтуге/бөлуге болмайды. NumberSelect () функциясында нәтиже басылғаннан кейін экранды тазартатын функция бар, егер пайдаланушы басқа шаршыны басса.

4 -қадам: Код: квадраттар функциясы

бос квадраттар () {

// қара және ақ квадраттар әр жолда ауысады, ал бірінші және үшінші жолдар екінші және төртінші қатарға қарағанда қарама -қарсы үлгіге ие

tft.fillRect (0, 60, 60, 65, TFT_BLACK); // квадраттардың бірінші жолы басталады, қара -ақ tft.fillRect (60, 60, 60, 65, TFT_WHITE);

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

tft.fillRect (180, 60, 60, 65, TFT_WHITE); // квадраттардың бірінші қатары аяқталады

tft.fillRect (0, 125, 60, 65, TFT_WHITE); // квадраттардың екінші жолы басталады, ақтан қараға tft.fillRect (60, 125, 60, 65, TFT_BLACK);

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

tft.fillRect (180, 125, 60, 65, TFT_BLACK); // квадраттардың екінші қатары аяқталады

tft.fillRect (0, 190, 60, 65, TFT_BLACK); // шаршылардың үшінші жолы басталады, қара -ақ tft.fillRect (60, 190, 60, 65, TFT_WHITE);

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

tft.fillRect (180, 190, 60, 65, TFT_WHITE); // шаршылардың үшінші қатары аяқталады

tft.fillRect (0, 255, 60, 65, TFT_WHITE); // квадраттардың төртінші жолы басталады, ақтан қараға tft.fillRect (60, 255, 60, 65, TFT_BLACK);

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

tft.fillRect (180, 255, 60, 65, TFT_BLACK); // квадраттардың төртінші қатары аяқталады

}

Squares () функциясы өте қарапайым. Tft.fillRect (X1, Y1, X2, Y2, TFT_COLOR) пәрмені оған берілген параметрлерге сәйкес тіктөртбұрыш салады, олар х пен у -дің бірінші позициялары, х пен у -дың екінші позициялары және тіктөртбұрыш толтырылған түс.. Бұл функция квадраттардың барлық төрт жолын салады (техникалық тіктөртбұрыштар) және әрбір квадратты оған берілген түспен толтырады.

5 -қадам: Код: сандар функциясы

жарамсыз сандар () {

tft.setTextColor (TFT_BLUE); // санды/таңбаның түсін көкке қояды

tft.setTextSize (5); // сан/таңба өлшемін 5 -ке орнатады

tft.setCursor (18, 75); // сандар/таңбалардың бірінші жолына жүгіргіні орнатады

tft.print («7 8 9 /»); // сандардың/таңбалардың бірінші жолын басып шығарады

tft.setCursor (18, 140); // сандар/таңбалардың екінші жолына жүгіргіні орнатады

tft.print («4 5 6 X»); // сандардың/таңбалардың екінші жолын басып шығарады

tft.setCursor (18, 205); // сандар/таңбалардың үшінші жолына жүгіргіні орнатады

tft.print («1 2 3 -»); // сандардың/таңбалардың үшінші жолын басып шығарады

tft.setCursor (18, 270); // сандар/таңбалардың төртінші жолына жүгіргіні орнатады

tft.print («C 0 = +»); // сандардың/таңбалардың төртінші жолын басып шығарады

}

Numbers () функциясы да қарапайым. Алғашқы екі жол мәтіннің өлшемін үлкен етіп, түсі көк түске боялады. Tft.setCursor () пәрмені курсорды сандардың жазылуы басталатын әр жолдағы орынға қояды. Содан кейін tft.print () пәрмені сандар/таңбаларды квадраттарға басып шығарады.

6 -қадам: Код: сан функциясын таңдаңыз

жарамсыз нөмірSelect () {

TSPoint p = ts.getPoint ();

pinMode (XM, OUTPUT);

pinMode (YP, OUTPUT);

егер (pz> MINPRESSURE) {

p.x = карта (p.x, 250, 845, 0, 239);

p.y = карта (б.ж., 245, 860, 0, 319);

егер (нәтиже! = 0) {

нәтиже = 0;

құтқарылған_сан = 0;

tft.print («МӘНДЕРДІ ТАЗАЛАУ»);

кешіктіру (500);

tft.setCursor (cursorLocX, cursorLocY);

tft.print («»);

tft.setCursor (cursorLocX, cursorLocY);

}

NumberSelect () функциясын өшіру үшін ts.getPoint () пәрмені арқылы сенсорлық экранда пайдаланушы енгізуін сұраймыз. Бұл деректер жиналғаннан кейін біз ең төменгі қысымның асып кеткенін тексереміз (немесе басқаша айтқанда, егер пайдаланушы сенсорлық экранда бір жерді басса). Егер солай болса, x және y координаттары декарттық координаттардан сенсорлық экранға тән координаттарға салыстырылады. (0, 0) - сенсорлы экранның жоғарғы сол жақ бұрышы, осі x осі арқылы өтеді және y осі төмен түседі. Келесі бөлім нәтижеде сақталған нөмірдің бар -жоғын тексереді. Егер бар болса, нәтиже мен саусақ_нөмірі 0 қалпына келтіріледі. Нәтижелер өрісінде «МӘНДЕРДІ ТАЗАЛАУ» хабары басылады және курсор бастапқы күйіне оралғанда экран тазаланады.

if (p.y 60) {// квадраттардың бірінші қатары

егер (p.x <60)

user_selection = 7;

әйтпесе (p.x <120)

user_selection = 8;

әйтпесе (p.x <180)

user_selection = 9;

else user_selection = 14;

} if if (p.y 125) {// квадраттардың екінші қатары

егер (p.x <60)

user_selection = 4;

әйтпесе (p.x <120)

user_selection = 5;

әйтпесе (p.x <180)

user_selection = 6;

else user_selection = 13;

} if if (p.y 190) {// квадраттардың үшінші қатары

егер (p.x <60)

user_selection = 1;

әйтпесе (p.x <120)

user_selection = 2;

әйтпесе (p.x <180)

user_selection = 3;

else user_selection = 12;

} if if (p.y> 255) {// квадраттардың төртінші қатары

егер (p.x <60)

user_selection = 15;

әйтпесе (p.x <120)

user_selection = 0;

әйтпесе (p.x <180)

user_selection = 10;

else user_selection = 11;

}

} басқа {

user_selection = 16; // user_selection 16 мәніне орнатылды (айнымалы ештеңе жоқ)

}

}

Бұл қай батырманың таңдалғанын анықтайтын бөлік. Квадраттардың жоғарғы қатарынан бастап, төменгі жолмен аяқталатын Arduino экран шынымен басылған жерді іздейді. Содан кейін ол квадратқа сан тағайындайды және сол санды user_selection ішіне сақтайды. 0-9 цифрлары сандық квадратқа сәйкес келеді, 11-15 сандары операндтар мен таза квадратқа сәйкес келеді, ал 10 саны теңдік белгісінің квадратына сәйкес келеді. Егер квадрат таңдалмаған болса, user_selection 16 -ға орнатылады, бұл циклды қайтадан бастайды (цикл функциясын қараңыз).

7 -қадам: Аяқталған жобадан ләззат алыңыз

Міне, сізде! Енді сенсорлы экранда калькулятор бар, ол қосу, азайту, көбейту және бөлуді орындай алады. Бұл жоба калькулятор жұмыс істейтінін ойладым. Мен бұл жобада жұмыс істеп жүргенде, сабақ үстінде нұсқаушыма: «Мен ешқашан калькуляторға бұрынғыдай қарамаймын!» - деп айтқаным есімде. Пайдаланушы ретінде сіздің ойыңызша, сіздің ойыңызды еліктеуге тырысатын компьютердің артында біршама қиын болады. Сізге бұл жоба ұнады деп үміттенемін және калькулятор қалай жұмыс істейтіні туралы сіздің көзқарасыңыз өзгерді деп сенемін!

Сізге ыңғайлы болу үшін барлық код. Ол түсініктемелермен толтырылған, сондықтан егер сізде проблемалар болса, олар сізге әр жолдың не істейтінін көрсетуі керек.

Ұсынылған: