Mundarija:
- Ta'minotlar
- 1 -qadam: Raqamli soat qanday ishlaydi
- 2 -qadam: Davlat mashinasi
- 3 -qadam: LCD klaviatura qalqoni
- 4 -qadam: Davlat mashinasini o'zaro bog'lash
- 5 -qadam: narsalarni birgalikda ulash
- 6 -qadam: misolni oling
Video: Arduino -dagi cheklangan holat mashinasi yordamida raqamli soat: 6 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:25
Salom, men sizga raqamli soatni YAKINDU Statechart Tools yordamida yaratish va LCD klaviatura qalqoni yordamida Arduino -da ishlashni ko'rsataman.
Raqamli soatlarning asl modeli Devid Xareldan olingan. U haqida maqola chop etdi
"[…] davlat mashinalari va holat diagrammalarining an'anaviy rasmiyatchiligini kengaytirish."
Ushbu maqolada u o'z tadqiqotlari uchun raqamli soatlardan foydalangan. Men uni ilhom sifatida ishlatdim va soatni YAKINDU Statechart Tools (davlat mashinalarining grafik modellarini yaratish va C/C ++ kodini yaratish vositasi) yordamida qayta qurdim va uni Arduino -da hayotga qaytardim.
Ta'minotlar
Uskuna:
- Arduino Uno yoki Mega
- LCD klaviatura qalqoni
Dasturiy ta'minot:
- YAKINDU Statechart asboblari
- Arduino uchun Eclipse C ++ IDE
1 -qadam: Raqamli soat qanday ishlaydi
Raqamli soat qanday ishlashi kerakligini aniqlashdan boshlaylik. Siz eslayapsizmi … aytaylik … 90 -yillarda hamma qo'lga kiritgan "juda ajoyib" raqamli soatlar? Integratsiyalangan sekundomer, turli signallar va uning zerikarli ovozli signallari har soatda. Agar yo'q bo'lsa, qarang: 90 -yillarning raqamli soatlari.
Shunday qilib, bu turli xil rejimlarga ega sozlanadigan soat. Asosan, joriy vaqt ko'rsatiladi, lekin boshqa xususiyatlar ham bor. Kirish sifatida sizda yoqish/o'chirish, rejim va sozlash tugmasi mavjud. Bundan tashqari, siz chiroqni yoqishingiz va o'chirishingiz mumkin. Rejim tugmasi yordamida siz rejimlarni ajrata olasiz va soat xususiyatlarini yoqishingiz/o'chirishingiz mumkin:
- Vaqtni ko'rsatish (soat)
- Sanani ko'rsatish (sana)
- Signalni o'rnatish (signal 1, signal 2)
- Qo'ng'iroqni yoqish/o'chirish (qo'ng'iroqni o'rnatish)
- Sekundomerdan foydalaning (Stop Watch)
Menyularda rejimni sozlash uchun yoqish/o'chirish tugmasidan foydalanishingiz mumkin. O'rnatish tugmasi vaqtni belgilash imkonini beradi - masalan. soat yoki budilnik uchun. Chiroqni yoqish va o'chirish tugmasi yordamida sekundomerni boshqarish - ishga tushirish va to'xtatish mumkin. Bundan tashqari, o'rnatilgan taymerdan foydalanishingiz mumkin
Bundan tashqari, har bir soatda qo'ng'iroq qiladigan qo'ng'iroq va boshqariladigan orqa yorug'lik o'rnatilgan. Birinchi qadamda men ularni Arduino -ga ulamadim.
2 -qadam: Davlat mashinasi
Men bu misolni tushuntirish uchun batafsil ma'lumotga ega bo'lishni xohlamayman. Bu juda murakkab bo'lgani uchun emas, balki biroz kattaroq. Men bu qanday ishlashini tushuntirishga harakat qilaman. Modelni ko'rib chiqish yoki uni yuklab olish va taqlid qilish orqali ijro o'z-o'zidan tushuntirilishi kerak. Davlat mashinasining ba'zi qismlari, belgilangan vaqt mintaqasi kabi, kichik mintaqalarda yig'iladi. Bu bilan davlat mashinasining o'qilishi ta'minlanishi kerak.
Model ikki qismga bo'lingan - grafik va matnli. Matn qismida voqealar, o'zgaruvchilar va boshqalar aniqlanadi. Grafik qismda - holat diagrammasi - modelning mantiqiy bajarilishi ko'rsatilgan. Belgilangan xatti -harakatlarga javob beradigan davlat mashinasini yaratish uchun modelda ishlatilishi mumkin bo'lgan ba'zi kirish hodisalari talab qilinadi: o'chirish, sozlash, rejim, yorug'lik va nur_r. Ta'rif bo'limida har 100 msda vaqt qiymatini oshiruvchi ichki hodisa ishlatiladi:
har 100 ms / marta += 1
100 ms qadamlarga asoslanib, joriy vaqt HH: MM: SS formatida hisoblanadi:
display.first = (vaqt / 36000) % 24;
display.second = (vaqt / 600) % 60; display.third = (vaqt / 10) % 60;
Qiymatlar LCD displeyiga har safar davlat mashinasi chaqirilganda, updateLCD operatsiyasidan foydalanib ulanadi.
display.updateLCD (display.birinchisi, display.sekund, display.third, display.text)
Davlat mashinasining asosiy bajarilishi "Raqamli soat qanday ishlaydi" bo'limida allaqachon aniqlangan. Asbob ichida men CompositeState, History, Sub-Diagrams, ExitNodes va boshqalar kabi "maxsus" modellashtirish elementlaridan foydalanardim. Batafsil tavsifni Foydalanuvchi qo'llanmasida topish mumkin.
3 -qadam: LCD klaviatura qalqoni
LCD klaviatura qalqoni oddiy loyihalar uchun juda zo'r, ular vizualizatsiya uchun ekranni va kirish uchun ba'zi tugmalarni talab qiladi - odatiy, oddiy HMI (inson mashinasi interfeysi). LCD klaviatura qalqoni beshta foydalanuvchi tugmachasini o'z ichiga oladi, ikkinchisi esa asl holatini tiklash uchun. Beshta tugma birgalikda Arduino A0 piniga ulangan. Ularning har biri tugmachalarni ajratish imkonini beradigan kuchlanish taqsimlagichga ulangan.
Aniq qiymatlarni topish uchun analogRead (0) dan foydalanishingiz mumkin, bu albatta ishlab chiqaruvchidan farq qilishi mumkin. Ushbu oddiy loyiha joriy qiymatni LCD displeyda aks ettiradi:
#"Arduino.h" ni qo'shing
#clude "LiquidCrystal.h" LiquidCrystal lcd (8, 9, 4, 5, 6, 7); void setup () {lcd.begin (16, 2); lcd.setCursor (0, 0); lcd.write ("O'lchangan qiymat"); } void loop () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); kechikish (200); }
Bu mening o'lchagan natijalarim:
- Yo'q: 1023
- Tanlang: 640
- Chapda: 411
- Pastga: 257
- Yuqoriga: 100
- O'ng: 0
Ushbu chegaralar bilan tugmalarni o'qish mumkin:
#define NONE 0 #define SELECT 1 #define LEFT 2 #dewne DOWN 3 #define UP 4 #deftine RIGHT 5 static int readButton () {int result = 0; natija = analogRead (0); if (natija <50) {O'ngga qaytish; } if (natija <150) {qaytish UP; } if (natija <300) {qaytish DOWN; } if (natija <550) {LEFT qaytish; } if (natija <850) {qaytish SELECT; } NONE qaytarish; }
4 -qadam: Davlat mashinasini o'zaro bog'lash
Shtat mashinasining yaratilgan C ++ kodi interfeyslarni ta'minlaydi, ular shtat mashinasini boshqarish uchun bajarilishi kerak. Birinchi qadam - voqealarni klaviatura qalqoni bilan ulash. Men tugmalarni qanday o'qishni ko'rsatdim, lekin ularni davlat mashinasiga ulash uchun tugmalarni o'chirish kerak - aks holda, voqealar bir necha bor ko'tariladi, bu esa oldindan aytib bo'lmaydigan xatti -harakatlarga olib keladi. Dasturiy ta'minotni o'chirish tushunchasi yangi emas. Siz Arduino hujjatlariga qarashingiz mumkin.
Amalga oshirishda men tushayotgan chekkani aniqlayman (tugmani qo'yib yuborish). Men tugma qiymatini o'qidim, 80 ms kuting (50 o'rniga 80 bilan yaxshi natijalarga erishdim), natijani saqlang va yangi qiymatni o'qing. Agar oldResult NONE (bosilmagan) bo'lmasa va yangi natija NONE bo'lsa, bilaman, tugma oldin bosilgan va hozir qo'yib yuborilgan. Keyin, men davlat mashinasining kirish hodisasini ko'taraman.
int oldState = NONE; statik void elevEvents () {int tugmasi Pressed = readButton (); kechikish (80); oldState = tugmasi bosildi; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> boost_mode (); tanaffus; } QOLG'I holat: {stateMachine-> getSCI_Button ()-> ko'tarish_set (); tanaffus; } holat DOWN: {stateMachine-> getSCI_Button ()-> ko'tarish_light (); tanaffus; } holat UP: {stateMachine-> getSCI_Button ()-> ko'tarish_light_r (); tanaffus; } holat HAQIQI: {stateMachine-> getSCI_Button ()-> oshirish_onoff (); tanaffus; } standart: {break; }}}}
5 -qadam: narsalarni birgalikda ulash
Asosiy dastur uchta qismdan iborat:
- Davlat mashinasi
- Taymer
- Displeyni boshqaruvchi (odatda lcd.print (…))
DigitalWatch* stateMachine = yangi DigitalWatch (); CPPTimerInterface* timer_sct = yangi CPPTimerInterface (); DisplayHandler* displayHandler = yangi DisplayHandler ();
Shtat mashinasi displey boshqaruvchisidan foydalanadi va taymerga ega bo'ladi, u vaqtli voqealarni boshqarish uchun yangilanadi. Shundan so'ng, davlat mashinasi ishga tushiriladi va kiritiladi.
void setup () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> kiriting (); }Loop uchta narsani bajaradi:
- Kirish hodisalarini ko'taring
- O'tgan vaqtni hisoblang va taymerni yangilang
- Davlat mashinasini chaqiring
long current_time = 0; long last_cycle_time = 0; void loop () {boostEvents (); last_cycle_time = joriy_ vaqt; joriy_vaqt = millis (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }
6 -qadam: misolni oling
Bo'ldi shu. Ehtimol, men amalga oshirishning barcha tafsilotlarini aytmaganman, lekin siz misolni ko'rib chiqishingiz yoki sharh qoldirishingiz mumkin.
Misolni ishlaydigan IDE -ga quyidagilar bilan qo'shing: Fayl -> Yangi -> Misol -> YAKINDU Statechart misollari -> Keyingi -> Arduino -Raqamli soat (C ++)
> IDE -ni bu yerdan yuklab olishingiz mumkin <<
Siz 30 kunlik sinovdan boshlashingiz mumkin. Shundan so'ng, siz notijorat maqsadlarda foydalanish uchun bepul bo'lgan litsenziyani olishingiz kerak!
Tavsiya:
Arduino yordamida Led tasmasi bilan analog soat va raqamli soatni qanday qilish kerak: 3 qadam
Arduino yordamida Led Strip bilan analog soat va raqamli soatni qanday qilish kerak: Bugun biz analog soat yasaymiz & Raqamli soat Led Strip va MAX7219 nuqta moduli bilan Arduino.U vaqtni mahalliy vaqt zonasi bilan to'g'rilaydi. Analog soat uzunroq LED tasmasini ishlatishi mumkin, shuning uchun uni san'atkor bo'lish uchun devorga osib qo'yish mumkin
MSP430: 6 bosqichli cheklangan holat mashinasi
MSP430 -dagi cheklangan holat mashinasi: Men sizga MSP430G2 Launchpad -ni YAKINDU Statechart asboblari yordamida Texas Instruments Code Composer Studio -da, Cheksiz holat mashinalari (FSM) bilan qanday dasturlashni ko'rsataman. Ushbu qo'llanma oltita qadamni o'z ichiga oladi: YAKINDU Statechart asboblarini quyidagicha o'rnatish
Arduino va Led nuqta matritsali displey yordamida raqamli soat: 6 qadam
Arduino va Led nuqta matritsali displeydan foydalanadigan raqamli soat: Hozirgi vaqtda ishlab chiqaruvchilar va ishlab chiqaruvchilar loyihalarning prototipini tez rivojlantirish uchun Arduinoni afzal ko'rishadi. Arduino-bu ochiq manbali elektronika platformasi, uni ishlatish uchun qulay bo'lgan apparat va dasturiy ta'minotga asoslangan. Arduino juda yaxshi foydalanuvchilar hamjamiyatiga ega, bu loyihada
Arduino Nano va DS1307 yordamida oddiy raqamli soat: 4 qadam
Arduino Nano va DS1307 -dan foydalanadigan oddiy raqamli soat: Ushbu maqolada men sizga Arduino -dan foydalanib raqamli soat yasash bo'yicha qo'llanmani ko'rsataman. Men foydalanadigan Arduino taxtasi Arduino Nano V3, DS1307 vaqt ma'lumotlarini etkazib beruvchi, MAX7219 7 Segment sifatida darsni ko'rishdan oldin men buni tavsiya qilaman
Raqamli va ikkilik soat 8 raqamli X 7 segmentli LED displeyda: 4 qadam (rasmlar bilan)
Raqamli va ikkilik soat 8 ta raqamli X 7 segmentli LED displeyda: Bu mening raqamli & 8 dyuymli x 7 segmentli LED displey yordamida ikkilik soat. Men odatiy qurilmalar, xususan, soatlar uchun yangi xususiyatlar berishni yaxshi ko'raman va bu holda ikkilik soat uchun 7 segmentli displeydan foydalanish noan'anaviy va