Мазмуну:
- Жабдуулар
- 1 -кадам: Санариптик саат кантип иштейт
- 2 -кадам: Мамлекеттик машина
- 3 -кадам: LCD клавиатура калканы
- 4 -кадам: Мамлекеттик машинанын интерфейси
- 5 -кадам: нерселерди чогуу зымдоо
- 6 -кадам: Мисал алыңыз
Video: Ардуинодогу санариптик сааттын акыркы машинасын колдонуу: 6 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
Салам, мен сизге YAKINDU Statechart Tools менен санариптик сааттын түзүлүшүн жана LCD клавиатура калканчын колдонгон Arduino менен иштөөнү көрсөтөм.
Санарип сааттын оригиналдуу модели Дэвид Харелден алынган. Ал тууралуу макала жарыялады
"[…] Мамлекеттик машиналардын жана абал диаграммаларынын кадимки формализминин кеңири жайылышы."
Бул макалада ал өзүнүн изилдөөсү үчүн санарип сааттын мисалын колдонгон. Мен аны илхам катары колдонуп, саатты YAKINDU Statechart Tools (мамлекеттик машиналардын графикалык моделдерин түзүүчү жана C/C ++ кодун түзүүчү курал) менен кайра куруп, аны Arduinoдо кайра жашоого алып келдим.
Жабдуулар
Аппараттык:
- Arduino Uno же Mega
- LCD баскыч калкан
Программалык камсыздоо:
- YAKINDU Statechart Tools
- Arduino үчүн Eclipse C ++ IDE
1 -кадам: Санариптик саат кантип иштейт
Санарип саат кантип иштеши керек экенин аныктоодон баштайлы. Булар эсиңиздеби … айталычы … 90 -жылдары ар кимде болгон "өтө сонун" санариптик сааттар? Интеграцияланган секундомер, ар кандай ойготкучтар жана анын тажатма сигналдары ар бир саат сайын. Андай болбосо, карап көрүңүз: 90 -жылдардагы санариптик саат.
Ошентип, негизинен, бул ар кандай режимдеги конфигурацияланган саат. Негизинен, учурдагы убакыт көрсөтүлөт, бирок башка өзгөчөлүктөрү бар. Киргизүү катары сизде күйгүзүү/өчүрүү, режим жана орнотуу баскычы бар. Мындан тышкары, сиз жарыкты күйгүзүп жана өчүрө аласыз. Режим баскычы менен сиз режимдерди айырмалай аласыз жана саат өзгөчөлүктөрүн иштете/өчүрө аласыз:
- Убакытты көрсөтүү (Саат)
- Күндү көрсөтүү (Күн)
- Ойготкучту коюу (Ойготкуч 1, Ойготкуч 2)
- Звонокту иштетүү/өчүрүү (Звонокту коюу)
- Секундомерди колдонуңуз (Stop Watch)
Меню ичинде режимди конфигурациялоо үчүн күйгүзүү/өчүрүү баскычын колдонсоңуз болот. Орнотуу баскычы убакытты коюуга мүмкүндүк берет - мис. саат же ойготкучтар үчүн. Секундомерди жарыкты күйгүзүү жана өчүрүү баскычын колдонуу менен башкарса болот - башталат жана токтотулат. Сиз ошондой эле интегралдык эсептегичти колдоно аласыз
Мындан тышкары, ар бир толук саатта коңгуроо кагылган жана башкарылуучу арткы жарык кошулган. Биринчи кадамда мен аларды Arduino менен байланыштырган жокмун.
2 -кадам: Мамлекеттик машина
Мен бул мисалды түшүндүрүү үчүн деталдуу түрдө баргым келбейт. Бул өтө татаал болгондуктан эмес, кичине эле чоң. Мен анын кантип иштээринин негизги идеясын түшүндүрүүгө аракет кылам. Моделди карап же жүктөп алып, окшоштуруу менен аткаруу өзүн-өзү түшүндүрүшү керек. Мамлекеттик машинанын кээ бир бөлүктөрү белгиленген убакыт региону сыяктуу, кичи региондордо жыйынтыкталат. Муну менен мамлекеттик машинанын окумдуулугу камсыз кылынышы керек.
Модель эки бөлүккө бөлүнөт - графикалык жана тексттик. Тексттик бөлүктө окуялар, өзгөрмөлөр ж. Графикалык бөлүктө - абал диаграммасы - моделдин логикалык аткарылышы көрсөтүлөт. Белгиленген жүрүм -турумду аткарган мамлекеттик машинаны түзүү үчүн, моделде колдонула турган кээ бир киргизүү окуялары талап кылынат: өчүрүү, коюу, режим, жарык жана light_r. Аныктоо бөлүмүнүн ичинде ар бир 100 мс убакыттын маанисин көбөйткөн ички окуя колдонулат:
ар 100 мс / жолу += 1
100 мс кадамдын негизинде учурдагы убакыт HH: MM: SS форматында эсептелет:
display.first = (убакыт / 36000) % 24;
display.second = (time / 600) % 60; display.third = (убакыт / 10) % 60;
Мамлекеттик машиналар чакырылган сайын баалуулуктар LCDL операциясын колдонуу менен өткөрүлүп берилет:
display.updateLCD (display.биринчиден, display.second, display.third, display.text)
Мамлекеттик машинанын негизги аткарылышы буга чейин Digital Watch кантип иштээри бөлүмүндө аныкталган. Куралдын ичинде мен CompositeState, History, Sub-Diagrams, ExitNodes, ж.б. сыяктуу кээ бир "өзгөчө" моделдөө элементтерин колдондум. Толук сүрөттөмөнү Колдонуучу Колдонмосунан тапса болот.
3 -кадам: LCD клавиатура калканы
LCD клавиатурасы Shield жөнөкөй долбоорлор үчүн абдан сонун, алар визуалдаштыруу үчүн экранды жана кээ бир баскычтарды киргизүү катары талап кылат - типтүү, жөнөкөй HMI (Human Machine Interface). LCD клавиатура калканы беш колдонуучу баскычын жана башкасын калыбына келтирүү үчүн камтыйт. Беш баскыч бардыгы Arduino A0 пинине туташкан. Алардын ар бири баскычтарды айырмалоого мүмкүнчүлүк берген чыңалуу бөлүштүргүчкө туташкан.
Албетте, өндүрүүчү тарабынан айырмаланышы мүмкүн болгон конкреттүү баалуулуктарды табуу үчүн analogRead (0) колдоно аласыз. Бул жөнөкөй долбоор ЖКда учурдагы маанини көрсөтөт:
#"Arduino.h" кошуу
#include "LiquidCrystal.h" LiquidCrystal lcd (8, 9, 4, 5, 6, 7); void setup () {lcd.begin (16, 2); lcd.setCursor (0, 0); lcd.write ("Ченелген баалуулук"); } void loop () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); кечигүү (200); }
Булар менин өлчөнгөн жыйынтыктарым:
- Жок: 1023
- Тандоо: 640
- Сол: 411
- Ылдый: 257
- Өйдө: 100
- Оң: 0
Бул босоголор менен баскычтарды окуу мүмкүн:
#define NONE 0 #define SELECT 1 #define LEFT 2 #dewne DOWN 3 #define UP 4 #define RIGHT 5 static int readButton () {int result = 0; натыйжа = analogRead (0); if (result <50) {return Right; } if (result <150) {return UP; } if (result <300) {return DOWN; } if (result <550) {return LEFT; } if (result <850) {return SELECT; } return NONE; }
4 -кадам: Мамлекеттик машинанын интерфейси
Мамлекеттик машинанын C ++ коду мамлекеттик машинаны көзөмөлдөө үчүн ишке ашырылышы керек болгон интерфейстерди камсыздайт. Биринчи кадам окуяларды Keypad Shield баскычтары менен туташтыруу. Мен буга чейин баскычтарды кантип окуу керектигин көрсөткөнмүн, бирок аларды мамлекеттик машинага аралаштыруу үчүн, баскычтарды ажыратуу талап кылынат - антпесе, окуялар бир нече жолу көтөрүлүп, натыйжада күтүүсүз жүрүм -турумга алып келет. Программалык камсыздандыруунун концепциясы жаңы эмес. Сиз Arduino документтерин карай аласыз.
Ишке ашырууда мен кулап жаткан четин аныктайм (баскычты кое берүү). Мен баскычтын маанисин окуп, 80 мс күтөбүз (50 ордуна 80 менен жакшы жыйынтыктарды алдым), натыйжаны сактап, жаңы маанини окуңуз. Эгерде oldResult NONE эмес (басылбаган) жана жаңы натыйжа NONE болсо, мен билем, баскыч мурда басылган жана азыр бошотулган. Андан кийин, мен мамлекеттик машинанын киргизүү окуясын көтөрөм.
int oldState = NONE; static void liftEvents () {int buttonPressed = readButton (); кечиктирүү (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> boost_mode (); тыныгуу; } ЧЕП СОЛ: {stateMachine-> getSCI_Button ()-> ko'tarүү_сет (); тыныгуу; } учурда ТӨМӨН: {stateMachine-> getSCI_Button ()-> lift_light (); тыныгуу; } UP UP: {stateMachine-> getSCI_Button ()-> lift_light_r (); тыныгуу; } иштин УКУГУ: {stateMachine-> getSCI_Button ()-> жогорулатуу_onoff (); тыныгуу; } демейки: {break; }}}}
5 -кадам: нерселерди чогуу зымдоо
Негизги программа үч бөлүктөн турат:
- Мамлекеттик машина
- Таймер
- Дисплей иштетүүчү (типтүү lcd.print […])
DigitalWatch* stateMachine = жаңы DigitalWatch (); CPPTimerInterface* timer_sct = жаңы CPPTimerInterface (); DisplayHandler* displayHandler = жаңы DisplayHandler ();
Мамлекеттик машина дисплей иштеткичин колдонот жана таймерди алды, ал убакыттагы окуяларды көзөмөлдөө үчүн жаңыртылат. Андан кийин, мамлекеттик машина башталат жана киргизилет.
жараксыз орнотуу () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> enter (); }Цикл үч нерсени аткарат:
- Киргизүү окуяларын жогорулатуу
- Өткөн убакытты эсептеп, таймерди жаңыртыңыз
- Мамлекеттик машинага чалыңыз
long current_time = 0; long last_cycle_time = 0; void loop () {boostEvents (); last_cycle_time = учурдагы_ убакыт; current_time = миллис (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }
6 -кадам: Мисал алыңыз
Дал ушул. Балким, мен ишке ашыруунун бардык деталдарын айткан жокмун, бирок сиз мисалды карап же комментарий калтырсаңыз болот.
Мисалды иштеп жаткан IDEге кошуңуз: File -> New -> Example -> YAKINDU Statechart Examples -> Next -> Arduino -Digital Watch (C ++)
> Сиз IDEди бул жерден жүктөп алсаңыз болот <<
Сиз 30 күндүк сыноо менен баштасаңыз болот. Андан кийин, сиз коммерциялык эмес колдонуу үчүн бекер болгон лицензияны алышыңыз керек!
Сунушталууда:
Аналогдук микросхема билими - DIY Тик сааттын үн эффектинин микросхемасы жок: 7 кадам (сүрөттөр менен)
Аналогдук микросхема билими - DIY Тик сааттын үн эффектинин микросхемасы жок: Бул сааттык үн эффекти микросхемасы эч кандай IC компоненти жок транзисторлор жана резисторлор жана конденсаторлор менен курулган. Бул практикалык жана жөнөкөй схемадан фундаменталдык райондук билимди үйрөнүүңүз үчүн идеалдуу
TINKERCAD КОЛДОНУУ ДЕЗИНФЕКЦИЯ МАШИНАСЫН СИМуляциялоо: 6 кадам
TINKERCAD КОЛДОНУЛУУ ДЕЗИНФЕКЦИЯ МАШИНАСЫН СИМУЛДАШТЫРУУ: Бул түшүнүктүү жерде биз дезинфекциялоочу машинанын симуляциясын кантип жасоону көрөбүз, азыраак Байланыш Автоматикалык дезинфекциялоочу машина, анткени биз машинаны иштетүү үчүн колду колдонбойбуз
Ардуинодогу меню жана баскычтарды кантип колдонуу керек: 10 кадам (сүрөттөр менен)
Arduino менюсу жана баскычтарды кантип колдонуу керек: Менин Arduino 101 окуу куралымда сизге Tinkercadда айланаңызды кантип орнотууну үйрөтүшөт. Мен Tinkercad колдоном, анткени бул студенттерге микросхемаларды куруу боюнча көптөгөн жөндөмдөрдү көрсөтүүгө мүмкүндүк берген абдан күчтүү онлайн платформа. Эркин болуңуз
USBTiny ISP программистин кантип куруу керек: CNC PCB фрезер машинасын колдонуу менен: 13 кадам (сүрөттөр менен)
USBTiny ISP программистин кантип түзүү керек: CNC PCB фрезер машинасын колдонуу менен: Өзүңүздүн электрондук долбооруңузду нөлдөн кантип куруу керек деп ойлодуңуз беле? Электроника долбоорлорун жасоо биз үчүн абдан кызыктуу жана кызыктуу. Бирок жаратуучулардын маданиятына жаңыдан кадам таштап жаткан көпчүлүк өндүрүүчүлөр жана аппараттык ышкыбоздор өз долбоорлорун курушту
Акыркы MacOS/Hackintosh High Sierra 10.13 Usb Wifi драйвери "Future Proof" Чечими Raspberry Pi колдонуу: 4 кадам
Акыркы MacOS/Hackintosh High Sierra 10.13 Usb Wifi драйвери "Future Proof" Чечими Raspberry Pi колдонуу менен: Акыркы macOS/Hackintosh менен эң капаланткан көйгөйлөрдүн бири - бул USB драйверинин жеткиликтүүлүгү. Менде 3 wifi usb жок macOS High Sierra 10.13Менин акыркы USB Wi -Fi панда зымсыз, бирок MacO үчүн драйвер колдойт