Мазмуну:

Arduino Calculator: 6 кадам
Arduino Calculator: 6 кадам

Video: Arduino Calculator: 6 кадам

Video: Arduino Calculator: 6 кадам
Video: ПЕРВАЯ СХЕМА НА АРДУИНО [Уроки Arduino #4] 2024, Июль
Anonim
Arduino Calculator
Arduino Calculator

Программалоо ар дайым кызыктуу жана Arduino - бул эң сонун платформа, эгерде сиз жаңы киргизилген программалоону баштасаңыз. Бул окуу куралында биз Arduino менен өзүбүздүн эсептегичибизди курабыз. Маанилер баскычтоп аркылуу жөнөтүлүшү мүмкүн (4 × 4 баскычтоп) жана натыйжаны ЖК экранда көрүүгө болот (16 × 2 чекит матрицасы). Бул эсептегич толук сандар менен кошуу, кемитүү, көбөйтүү жана бөлүү сыяктуу жөнөкөй амалдарды аткара алат. Бирок түшүнүктү түшүнгөндөн кийин, сиз Arduino функциялары менен илимий функцияларды да ишке ашыра аласыз. Бул долбоордун аягында сиз Arduino менен 16x2 ЖК жана баскычтопту кантип колдонууну, ошондой эле алар үчүн программаны оңой колдонууну билесиз. жеткиликтүү китепканалар. Сиз ошондой эле белгилүү бир тапшырманы аткаруу үчүн Arduino программаңызды түшүнөсүз.

1 -кадам: Керектүү нерселер

Arduino Uno (Ар кандай версия иштейт) 16 × 2 ЖК Дисплей 4 × 4 Баскыч 9В Батарея Нан тактасы жана туташтыруу зымдары

2 -кадам: Райондук диаграмма

Райондук диаграмма
Райондук диаграмма

3 -кадам: Arduino Calculator программасы

Бул долбоордун толук Arduino программасы бул долбоордун аягында берилет. Код кичинекей мааниге ээ бөлүктөргө бөлүнөт жана төмөндө түшүндүрүлөт. Жогоруда айтылгандай, биз китепканаларды колдонуу менен LCD жана клавиатураны Arduino менен иштетебиз. Келгиле, адегенде аларды Arduino IDEге кошолу. ЖК үчүн китепкана демейки боюнча сиздин Arduinoңузга киргизилген, андыктан биз бул жөнүндө кабатыр болбошубуз керек. Баскычтоп китепканасы үчүн Githubдан жүктөө үчүн шилтемени басыңыз. Сиз ZIP файлын аласыз, андан кийин бул libkты Sketch by Arduino -> Китепкананы кошуу ->. ZIP файлын кошуу жана бул жүктөлүп алынган файлдын жайгашкан жерин көрсөтүү. Китепкананы клавиатура менен колдонсок да, биз Arduino клавиатурасы жөнүндө бир аз маалымат (төмөндө көрсөтүлгөн) жөнүндө сөз кылышыбыз керек. ROWS жана COLS өзгөрмөлөрү биздин клавиатурада канча катар жана мамыча бар экенин айтып берет жана клавиатура баскычтардын клавиатурада болушунун тартибин көрсөтөт. Мен бул долбоордо колдонгон клавиатура ачкыч картасына төмөндөгүдөй көрүнөт, дагы ошол эле нерсени көрсөтөт. Мындан ары биз клавиатура rowPins жана colPins.const байтынын ROWS = 4 өзгөрмөлүү массивин колдонуу менен туташтырылганын белгилейбиз. // Төрт rowsconst байт COLS = 4; // Үч мамыча // Keymapchar баскычтарын аныктаңыз [ROWS] [COLS] = {{'1', '2', '3', 'A'}, {'4', '5', '6', ' B '}, {' 7 ',' 8 ',' 9 ',' C '}, {'*',' 0 ','#',' D '}}; байт rowPins [ROWS] = {0, 1, 2; // COL0, COL1 жана COL2 клавиатурасын ушул Arduino казыктарына туташтырыңыз. Биз кайсы клавиатураны колдонуп жатканыбызды жана ал кантип туташкандыгын айткандан кийин, биз төмөндөгү линияны колдонуп, ошол деталдарды колдонуп клавиатураны түзө алабыз Keypad kpd = Keypad (makeKeymap (key), rowPins, colPins, ROWS, COLS); // Баскычтопту түзүңүз Окшош түрдө, биз да LCDдин Arduino'нун кайсы казыктарына туташканын айтууга туура келет. Биздин схемага ылайык, аныктамалар төмөнкүдөй болот int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // ЖК кошулган казыктарLiquidCrystal lcd (rs, en, d4, d5, d6, d7); // ЖК түзүү Орнотуу функциясынын ичинде, биз жөн эле проектинин атын көрсөтөбүз, андан кийин негизги проект жайгашкан циклге өтөбүз. Негизинен, биз клавиатурада бир нерсе терилип жаткандыгын текшеришибиз керек, терилген болсо биз таанышыбыз керек эмне терилип жатат, андан кийин аны "=" басканда өзгөрмөгө айландыруу үчүн биз натыйжаны эсептеп, анан аны ЖКда көрсөтүшүбүз керек. Төмөндө көрсөтүлгөндөй, цикл функциясынын ичинде дал ушул нерсе жасалат = kpd.getKey (); // басылган ачкычтын маанисин чарифте сактоо (key! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult (); Ар бир функциянын ичинде эмне болуп жатканы комментарийлердин линиялары аркылуу түшүндүрүлөт, төмөндөгү толук коддон өтүңүз, анын чындыгында кантип иштээрин түшүнүү үчүн аны тегеректеп алыңыз. Эгерде сизде кандайдыр бир шек бар болсо, анда комментарийлер бөлүмүн же форумдарды колдонуңуз.

4 -кадам:

5 -кадам: Arduino Calculatorдун иштеши

Arduino Calculator иштейт
Arduino Calculator иштейт

Байланыштарды райондук схемага ылайык жасаңыз жана төмөндөгү кодду жүктөңүз. Эгерде ал ката көрсөтсө, китепкананы жогоруда берилген көрсөтмөгө ылайык кошконуңузга ишениңиз. Сиз ошондой эле көйгөй сиздин жабдыктарыңызда экендигин текшерүү үчүн симуляцияны колдонуп көрсөңүз болот. Эгерде баары болуп жаткандай жасалса, анда сиздин жабдыктарыңыз төмөндөгүдөй көрүнөт, бул ЖК дисплейде 4x4 баскычын колдонуу менен Arduino Calculator Бул жерде колдонулган баскычтобдо туура белгилер жок болгондуктан, мен алфавитти оператор катары Төмөндө тизмеленген Баскычтоптун мүнөзү "А" кошумча (+) "В" кемитүү (-) "С" көбөйтүү (*) "D" бөлүмү (/) "*" Тазалоо (C) "#" Барабар (=) деп кабыл алынган Ар бир баскычтын эмнени билдирерин жазуу үчүн маркерди колдонуңуз. Номерди териңиз жана экинчи сапта пайда болот операндды басыңыз жана экинчи номериңизди териңиз, жыйынтыгын алуу үчүн "#" баскычын басыңыз. Ошондой эле бул сенсордук экранга негизделген Arduino калкуляторун түзүп көрүңүз.

6 -кадам: Код

/ * * Arduino баскычтоптун эсептегич программасы */#камтыйт // https://www.arduino.cc/en/Reference/LiquidCrystal#include // LCD үчүн Header файлы https://github.com/ Крис-A/Keypadconst байт ROWS = 4; // Төрт rowsconst байт COLS = 4; // Үч мамыча // Keymapchar баскычтарын аныктаңыз [ROWS] [COLS] = {{'7', '8', '9', 'D'}, {'4', '5', '6', ' C '}, {' 1 ',' 2 ',' 3 ',' B '}, {'*',' 0 ','#',' A '}}; байт rowPins [ROWS] = {0, 1, 2; // COL0, COL1 жана COL2 клавиатурасын ушул Arduino казыктарына туташтырыңыз. Keypad kpd = Keypad (makeKeymap (key), rowPins, colPins, ROWS, COLS); // Keypadconst түзүү int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // ЖК кошулган казыктарLiquidCrystal lcd (rs, en, d4, d5, d6, d7); узун Num1, Num2, Number; char ачкычы, иш -аракет; логикалык жыйынтык = false; void setup () {lcd.begin (16, 2); // Биз 16*2 ЖК дисплейди lcd.print ("DIY Calculator") колдонуп жатабыз; // Киришүү билдирүүсүн көрсөтүү lcd.setCursor (0, 1); // курсорду 0 графасына орнотуңуз, 1-сап lcd.print ("-CircuitDigest"); // Киришүү билдирүүсүнүн кечигүүсүн көрсөтүү (2000); // дисплейдин маалыматты көрсөтүшүн күтө туралы lcd.clear (); // Андан кийин тазалаңыз} void loop () {key = kpd.getKey (); // басылган ачкычтын маанисин чарифте сактоо (key! = NO_KEY) DetectButtons (); if (result == true) CalculateResult (); DisplayResult (); } void DetectButtons () {lcd.clear (); // Андан кийин тазалаңыз, эгерде (key == '*') // Эгерде жокко чыгаруу баскычы басылса {Serial.println ("Button Cancel"); Number = Num1 = Num2 = 0; result = false;} if (key == '1') // If Button 1 is pressed {Serial.println ("Button 1"); if (Number == 0) Number = 1; else саны = (саны*10) + 1; // эки жолу басылды} if (key == '4') // If Button 4 is pressed {Serial.println ("Button 4"); if (Number == 0) Number = 4; else саны = (саны*10) + 4; // Эки жолу басылды} if (key == '7') // If Button 7 is pressed {Serial.println ("Button 7"); if (Number == 0) Number = 7; else саны = (саны*10) + 7; // эки жолу басылды} if (key == '0') {Serial.println ("Button 0"); // 0 баскычы басылат, эгерде (Сан == 0) Сан = 0; else саны = (саны*10) + 0; // эки жолу басылды} if (key == '2') // 2 -баскыч басылат {Serial.println ("Button 2"); if (Number == 0) Number = 2; else саны = (саны*10) + 2; // эки жолу басылды} if (key == '5') {Serial.println ("Button 5"); if (Number == 0) Number = 5; else саны = (саны*10) + 5; // эки жолу басылды} if (key == '8') {Serial.println ("Button 8"); if (Number == 0) Number = 8; else саны = (саны*10) + 8; // эки жолу басылды} if (key == '#') {Serial.println ("Button Equal"); Num2 = Number; натыйжа = чындык; } if (key == '3') {Serial.println ("Button 3"); if (Number == 0) Number = 3; else саны = (саны*10) + 3; // эки жолу басылды} if (key == '6') {Serial.println ("Button 6"); if (Number == 0) Number = 6; else саны = (саны*10) + 6; // эки жолу басылды} if (key == '9') {Serial.println ("Button 9"); if (Number == 0) Number = 9; else саны = (саны*10) + 9; // эки жолу басылды} if (key == 'A' || key == 'B' || key == 'C' || key == 'D') // 4 -графанын баскычтарын аныктоо {Num1 = Number; Number = 0; if (key == 'A') {Serial.println ("Кошуу"); иш = '+';} if (key == 'B') {Serial.println ("Subtraction"); иш = '-'; } if (key == 'C') {Serial.println ("Көбөйтүү"); иш = '*';} if (key == 'D') {Serial.println ("Devesion"); action = '/';} delay (100); }} void CalculateResult () {if (action == '+') Number = Num1+Num2; if (action == '-') Number = Num1-Num2; if (action == '*') Number = Num1*Num2; if (action == '/') Number = Num1/Num2; } void DisplayResult () {lcd.setCursor (0, 0); // курсорду 0 графасына, 1 -сапка lcd.print (Num1) коюңуз; lcd.print (иш -аракет); lcd.print (Num2); if (result == true) {lcd.print ("="); lcd.print (Number);} // Натыйжаны көрсөтүү lcd.setCursor (0, 1); // курсорду 0 мамычасына, 1 сапка lcd.print (Саны) коюңуз; // Жыйынтыгын көрсөтүү}

Сунушталууда: