Turinys:
- Prekės
- 1 veiksmas: kaip veikia skaitmeninis laikrodis
- 2 žingsnis: būsenos mašina
- 3 žingsnis: LCD klaviatūros skydas
- 4 žingsnis: valstybės mašinos sąsaja
- 5 žingsnis: sujungite dalykus kartu
- 6 žingsnis: Gaukite pavyzdį
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:46
Sveiki, aš jums parodysiu, kaip skaitmeninį laikrodį galima sukurti naudojant „YAKINDU Statechart Tools“ir paleisti naudojant „Arduino“, kuriame naudojamas LCD klaviatūros skydas.
Originalus skaitmeninio laikrodžio modelis buvo paimtas iš Davido Harelio. Jis paskelbė straipsnį apie
„[…] Plačiai išplėtotas įprastas valstybės mašinų ir būsenų diagramų formalizmas“.
Šiame darbe jis tyrimams panaudojo skaitmeninio laikrodžio pavyzdį. Aš jį panaudojau kaip įkvėpimą ir atstatiau laikrodį su „YAKINDU Statechart Tools“(įrankiu, skirtu kurti grafinius būsenos mašinų modelius ir su juo generuoti C/C ++ kodą), ir atgaivinau jį „Arduino“.
Prekės
Techninė įranga:
- „Arduino Uno“arba „Mega“
- LCD klaviatūros skydas
Programinė įranga:
- „YAKINDU Statechart Tools“
- „Eclipse C ++ IDE“, skirtas „Arduino“
1 veiksmas: kaip veikia skaitmeninis laikrodis
Pradėkime apibrėždami, kaip turėtų veikti skaitmeninis laikrodis. Ar prisimenate šiuos … tarkime … „itin šaunius“skaitmeninius laikrodžius, kuriuos visi turėjo 90 -aisiais? Integruotas chronometras, įvairūs aliarmai ir erzinantis pyptelėjimas kiekvieną valandą. Jei ne, pažiūrėkite: 90 -ųjų skaitmeninis laikrodis.
Taigi iš esmės tai yra konfigūruojamas laikrodis su skirtingais režimais. Daugiausia bus rodomas dabartinis laikas, tačiau yra ir kitų funkcijų. Kaip įvestis turite įjungimo/išjungimo režimą ir nustatymo mygtuką. Be to, galite įjungti ir išjungti šviesą. Naudodami režimo mygtuką, galite atskirti režimus ir įjungti/išjungti laikrodžio funkcijas:
- Rodyti laiką (laikrodis)
- Rodyti datą (Data)
- Nustatykite žadintuvą (1 signalas, 2 signalas)
- Įjungti/išjungti skambėjimą (nustatyti skambėjimą)
- Chronometro naudojimas („Stop Watch“)
Meniu galite naudoti įjungimo/išjungimo mygtuką, kad sukonfigūruotumėte režimą. Nustatymo mygtukas leidžia nustatyti laiką - pvz. laikrodžiui ar žadintuvams. Chronometrą galima valdyti - paleisti ir sustabdyti - naudojant įjungimo ir išjungimo mygtuką. Taip pat galite naudoti integruotą ratų skaitiklį
Be to, yra skambutis, kuris skamba kiekvieną pilną valandą, ir integruotas valdomas foninis apšvietimas. Pirmajame žingsnyje aš jų neprijungiau prie „Arduino“.
2 žingsnis: būsenos mašina
Nenoriu išsamiai paaiškinti šio pavyzdžio. Tai ne todėl, kad jis yra per daug sudėtingas, o tik šiek tiek per didelis. Pabandysiu paaiškinti pagrindinę idėją, kaip tai veikia. Vykdymas turėtų būti savaime suprantamas, pažvelgus į modelį arba atsisiųsdamas ir imituodamas. Kai kurios būsenos mašinos dalys yra suskirstytos į subregionus, pvz., Nustatytas laiko regionas. Tokiu būdu turėtų būti užtikrintas būsenos mašinos skaitomumas.
Modelis yra padalintas į dvi dalis - grafinę ir tekstinę. Tekstinėje dalyje bus apibrėžti įvykiai, kintamieji ir kt. Grafinėje dalyje - būsenos diagrama - nurodomas loginis modelio vykdymas. Norint sukurti būsenos mašiną, kuri atitinka nurodytą elgesį, reikalingi kai kurie įvesties įvykiai, kuriuos galima naudoti modelyje: įjungimas, nustatymas, režimas, šviesa ir šviesa_r. Apibrėžimo skyriuje naudojamas vidinis įvykis, kuris padidina laiko vertę kas 100 ms:
kas 100 ms / laikas += 1
Remiantis 100 ms žingsniais, dabartinis laikas bus apskaičiuojamas HH: MM: SS formatu:
ekranas.pirmoji = (laikas / 36000) % 24;
display.second = (laikas / 600) % 60; ekranas.trečia = (laikas / 10) % 60;
Vertės bus prijungtos prie LCD ekrano, naudojant operaciją updateLCD kiekvieną kartą, kai būsenos mašina bus iškviesta:
display.updateLCD (display.first, display.second, display.third, display.text)
Pagrindinis būsenos mašinos vykdymas jau apibrėžtas skyriuje Kaip veikia skaitmeninis laikrodis. Naudodamas įrankį naudojau kai kuriuos „specialius“modeliavimo elementus, tokius kaip „CompositeState“, „History“, „Sub-Diagrams“, „ExitNodes“ir kt. Išsamų aprašymą rasite naudotojo vadove.
3 žingsnis: LCD klaviatūros skydas
Skystųjų kristalų klaviatūros skydas yra gana kietas paprastiems projektams, kuriems vizualizuoti reikalingas ekranas ir kai kurie mygtukai kaip įvestis - tipiškas, paprastas HMI (žmogaus ir mašinos sąsaja). Skystųjų kristalų klaviatūros skydelyje yra penki vartotojo mygtukai ir dar vienas, skirtas iš naujo nustatyti. Visi penki mygtukai yra prijungti prie „Arduino“A0 kaiščio. Kiekvienas iš jų yra prijungtas prie įtampos skirstytuvo, kuris leidžia atskirti mygtukus.
Norėdami rasti konkrečias vertes, kurios, žinoma, gali skirtis priklausomai nuo gamintojo, galite naudoti analogRead (0). Šis paprastas projektas LCD ekrane rodo dabartinę vertę:
#įtraukti „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 ("Išmatuota vertė"); } void loop () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); vėlavimas (200); }
Štai mano išmatuoti rezultatai:
- Nėra: 1023
- Pasirinkite: 640
- Kairėje: 411
- Žemyn: 257
- Aukštyn: 100
- Teisingai: 0
Su šiomis ribomis galima skaityti mygtukus:
#define NONE 0 #define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5 static int readButton () {int result = 0; rezultatas = analogRead (0); if (rezultatas <50) {return RIGHT; } if (rezultatas <150) {return UP; } if (rezultatas <300) {return DOWN; } if (rezultatas <550) {return LEFT; } if (rezultatas <850) {return SELECT; } grąžinti NĖRA; }
4 žingsnis: valstybės mašinos sąsaja
Sukurtas būsenos mašinos C ++ kodas suteikia sąsajas, kurios turi būti įdiegtos norint valdyti būsenos mašiną. Pirmasis žingsnis yra sujungti įvykius su klaviatūros skydo klavišais. Aš jau parodžiau, kaip skaityti mygtukus, tačiau norint juos prijungti prie būsenos mašinos, reikia išjungti mygtukus - priešingu atveju įvykiai būtų keliami kelis kartus, o tai lemia nenuspėjamą elgesį. Programinės įrangos panaikinimo koncepcija nėra nauja. Galite pažvelgti į „Arduino“dokumentus.
Įgyvendindamas aptinku krentantį kraštą (atleisdamas mygtuką). Aš perskaičiau mygtuko vertę, palaukiu 80 ms (gavau geresnius rezultatus su 80, o ne 50), išsaugoju rezultatą ir skaitau naują vertę. Jei „oldResult“nebuvo NĖRA (nespaustas), o naujas rezultatas - NĖRA, žinau, kad mygtukas buvo nuspaustas anksčiau ir dabar buvo atleistas. Tada aš pakeliu atitinkamą būsenos mašinos įvesties įvykį.
int oldState = NĖRA; static void raiseEvents () {int buttonPressed = readButton (); uždelsimas (80); oldState = mygtukasPaspaustas; if (oldState! = NONE &&& readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> raise_mode (); pertrauka; } atvejis LEFT: {stateMachine-> getSCI_Button ()-> raise_set (); pertrauka; } atvejis DOWN: {stateMachine-> getSCI_Button ()-> raise_light (); pertrauka; } atvejis aukštyn: {stateMachine-> getSCI_Button ()-> raise_light_r (); pertrauka; } atvejis TEISINGAS: {stateMachine-> getSCI_Button ()-> raise_onoff (); pertrauka; } numatytasis: {break; }}}}
5 žingsnis: sujungite dalykus kartu
Pagrindinė programa susideda iš trijų dalių:
- Valstybinė mašina
- Laikmatis
- Ekrano tvarkyklė (tipiškas lcd.print (…))
DigitalWatch* stateMachine = naujas DigitalWatch (); CPPTimerInterface* timer_sct = naujas CPPTimerInterface (); DisplayHandler* displayHandler = naujas DisplayHandler ();
Būsenos mašina naudoja ekrano tvarkyklę ir gavo laikmatį, kuris bus atnaujintas, kad būtų galima valdyti įvykius, kuriems nustatytas laikas. Vėliau būsenos mašina inicijuojama ir įvedama.
void setup () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> įveskite (); }Kilpa atlieka tris dalykus:
- Padidinkite įvesties įvykius
- Apskaičiuokite praėjusį laiką ir atnaujinkite laikmatį
- Skambinkite valstybinei mašinai
ilgas dabartinis laikas = 0; ilgas paskutinis_ciklo laikas = 0; void loop () {raiseEvents (); paskutinis ciklo laikas = dabartinis laikas; dabartinis_laikas = milis (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }
6 žingsnis: Gaukite pavyzdį
Viskas. Tikriausiai neminėjau visų įgyvendinimo detalių, tačiau galite pasižiūrėti į pavyzdį arba palikti komentarą.
Pridėkite pavyzdį prie veikiančio IDE naudodami: Failas -> Naujas -> Pavyzdys -> YAKINDU būsenos diagramos pavyzdžiai -> Kitas -> „Arduino“-skaitmeninis laikrodis (C ++)
> IDE galite atsisiųsti čia <<
Galite pradėti nuo 30 dienų bandomojo laikotarpio. Vėliau turite gauti licenciją, kuri yra nemokama nekomerciniam naudojimui!
Rekomenduojamas:
„Arduino“skaitmeninis laikrodis naudojant DS1302: 4 žingsniai
„Arduino“skaitmeninis laikrodis naudojant DS1302: Įvadas Sveiki, vaikinai, tikiuosi, kad jums visiems sekasi puikiai. Tai bus trumpas ir paprastas projektas apie tai, kaip sukurti skaitmeninį laikrodį naudojant „Arduino“. Šiame projekte mes sukursime skaitmeninį laikrodį su „Arduino“ir pamainų registro pagalba. Ši
Skaitmeninis laikrodis naudojant „Arduino“ir „Led Dot Matrix“ekraną: 6 žingsniai
Skaitmeninis laikrodis naudojant „Arduino“ir „Led Dot Matrix“ekraną: šiais laikais kūrėjai ir kūrėjai teikia pirmenybę „Arduino“, norėdami greitai plėtoti projektų prototipus. „Arduino“yra atviro kodo elektronikos platforma, pagrįsta lengvai naudojama aparatine ir programine įranga. „Arduino“turi labai gerą vartotojų bendruomenę. Šiame projekte
Paprastas skaitmeninis laikrodis naudojant „Arduino Nano“ir DS1307: 4 žingsniai
Paprastas skaitmeninis laikrodis naudojant „Arduino Nano“ir DS1307: Šiame straipsnyje aš jums parodysiu, kaip sukurti skaitmeninį laikrodį naudojant „Arduino“. „Arduino“plokštė, kurią naudoju, yra „Arduino Nano V3“, DS1307 kaip laiko duomenų teikėjas, MAX7219 7 segmentas kaip žiūrėti ekraną. prieš įeinant į mokymo programą, rekomenduoju
Paprastas skaitmeninis laikrodis naudojant „Arduino“: 6 žingsniai
Paprastas skaitmeninis laikrodis naudojant „Arduino“: sukurkite paprastą skaitmeninį laikrodį naudodami arduino ir paprastą PCB
12 valandų skaitmeninis laikrodis naudojant „Arduino“: 3 žingsniai
12 valandų skaitmeninis laikrodis naudojant „Arduino“: tai duonos lentos projektas, kuriame naudojamas „Atmel Atmega 2560“(„Arduino Mega“) ir 16x2 skystųjų kristalų ekranas, kad 12 valandų skaitmeninis laikrodis būtų sukurtas be papildomų išorinių įrenginių. Mes taip pat galime nustatyti ir pakeisti laiką dviem mygtukais. Visa