Kazalo:
- Zaloge
- 1. korak: Kako deluje digitalna ura
- 2. korak: Državni stroj
- 3. korak: ščit za tipkovnico LCD
- 4. korak: Povezovanje državnega stroja
- 5. korak: Povežite stvari skupaj
- 6. korak: Pridobite primer
Video: Digitalna ura na Arduinu z uporabo stroja s končnim stanjem: 6 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
Pozdravljeni, pokazal vam bom, kako lahko z orodji YAKINDU Statechart Tools ustvarite digitalno uro in jo zaženete na Arduinu, ki uporablja ščit za tipkovnico LCD.
Prvotni model digitalne ure je bil vzet od Davida Harela. Objavil je članek o
"[…] Široka razširitev običajnega formalizma državnih strojev in diagramov stanja."
V tem prispevku je za svoje raziskave uporabil primer digitalne ure. Uporabil sem ga kot navdih in uro obnovil z orodji YAKINDU Statechart Tools (orodje za ustvarjanje grafičnih modelov državnih strojev in z njim ustvarjanje kode C/C ++) in jo oživil na Arduinu.
Zaloge
Strojna oprema:
- Arduino Uno ali Mega
- Ščit za tipkovnico LCD
Programska oprema:
- Orodja za grafikone stanja YAKINDU
- Eclipse C ++ IDE za Arduino
1. korak: Kako deluje digitalna ura
Začnimo z opredelitvijo delovanja digitalne ure. Se spomnite teh … recimo … "super kul" digitalnih ur, ki so jih imeli vsi v devetdesetih letih? Integrirana štoparica, različni alarmi in njen nadležen pisk vsako polno uro. Če ne, poglejte: digitalna ura 90 -ih.
V bistvu je to nastavljiva ura z različnimi načini. Prikazan bo predvsem trenutni čas, vendar obstajajo še nekatere druge funkcije. Kot vhod imate vklop/izklop, način in gumb za nastavitev. Poleg tega lahko vklopite in izklopite luč. Z gumbom za način lahko ločite med načini in vklopite/izklopite funkcije ure:
- Prikaz časa (ura)
- Prikaz datuma (Datum)
- Nastavite alarm (Alarm 1, Alarm 2)
- Omogoči/onemogoči zvonjenje (Nastavi zvonjenje)
- Uporabite štoparico (štoparica)
V menijih lahko z gumbom za vklop/izklop konfigurirate način. Gumb za nastavitev vam omogoča nastavitev časa - npr. za uro ali alarme. Štoparico lahko upravljate - zaženete in ustavite - z gumbom za vklop in izklop luči. Uporabite lahko tudi integriran števec krogov
Poleg tega je zvonec, ki zvoni vsako polno uro, in integrirana nadzorna osvetlitev ozadja. Na prvem koraku jih nisem priključil na Arduino.
2. korak: Državni stroj
Za razlago tega primera se ne želim spuščati v podrobnosti. Ne zato, ker je preveč zapleteno, je le malo preveliko. Poskušal bom razložiti osnovno idejo, kako deluje. Izvedba mora biti samoumevna, tako da si ogledate model ali ga prenesete in simulirate. Nekateri deli državnega stroja so povzeti v podregijah, na primer nastavljeno časovno območje. S tem je treba zagotoviti berljivost državnega stroja.
Model je razdeljen na dva dela - grafični in besedilni. V besedilnem delu bodo opredeljeni dogodki, spremenljivke itd. V grafičnem delu - diagramu stanja - je podana logična izvedba modela. Če želite ustvariti državni stroj, ki izpolnjuje podano vedenje, so potrebni nekateri vhodni dogodki, ki jih je mogoče uporabiti v modelu: onoff, set, mode, light in light_r. V razdelku definicije je uporabljen notranji dogodek, ki vsakih 100 ms poveča časovno vrednost:
vsakih 100 ms / čas += 1
Na podlagi korakov 100 ms bo trenutni čas izračunan v formatu HH: MM: SS:
display.first = (čas / 36000) % 24;
display.second = (čas / 600) % 60; display.third = (čas / 10) % 60;
Vrednosti bodo povezane z LCD zaslonom z uporabo posodobitve delovanjaCD vsakič, ko se pokliče državni stroj:
display.updateLCD (display.first, display.second, display.third, display.text)
Osnovna izvedba državnega stroja je že opredeljena v razdelku Kako digitalna ura deluje. Znotraj orodja sem uporabil nekaj "posebnih" elementov modeliranja, kot so CompositeState, History, Pod-diagrami, ExitNodes itd. Podroben opis najdete v uporabniškem priročniku.
3. korak: ščit za tipkovnico LCD
Zaščita tipkovnice LCD je zelo kul za preproste projekte, ki zahtevajo zaslon za vizualizacijo in nekaj gumbov kot vhod - tipičen, preprost HMI (Human Machine Interface). Zaščita tipkovnice LCD vsebuje pet uporabniških gumbov in še enega za ponastavitev. Vseh pet gumbov je skupaj povezanih z A0 pin Arduina. Vsak od njih je povezan z delilnikom napetosti, kar omogoča razlikovanje med gumbi.
S pomočjo analogRead (0) lahko poiščete določene vrednosti, ki se seveda lahko razlikujejo glede na proizvajalca. Ta preprost projekt prikazuje trenutno vrednost na LCD -prikazovalniku:
#vključi "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 ("Izmerjena vrednost"); } void loop () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); zamuda (200); }
To so moji izmerjeni rezultati:
- Nič: 1023
- Izberite: 640
- Levo: 411
- Dol: 257
- Gor: 100
- Desno: 0
S temi pragovi je mogoče prebrati gumbe:
#define NONE 0 #define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5 static int readButton () {int result = 0; rezultat = analogRead (0); if (rezultat <50) {return DESNO; } if (rezultat <150) {return UP; } if (rezultat <300) {return DOWN; } if (rezultat <550) {return LEFT; } if (rezultat <850) {return SELECT; } return NONE; }
4. korak: Povezovanje državnega stroja
Ustvarjena koda državnega stroja C ++ ponuja vmesnike, ki jih je treba izvesti za nadzor stanja računalnika. Prvi korak je povezovanje dogodkov in dogodkov s tipkami ščita tipkovnice. Že sem pokazal, kako brati gumbe, toda za njihovo povezavo z državnim strojem je treba odstraniti gumbe - sicer bi se dogodki večkrat dvignili, kar ima za posledico nepredvidljivo vedenje. Koncept odprave programske opreme ni nov. Ogledate si lahko dokumentacijo Arduino.
V svoji izvedbi zaznam padajoči rob (spuščam gumb). Prebral sem vrednost gumba, počakal 80 ms (dosegel boljše rezultate z 80 namesto 50), shranil rezultat in prebral novo vrednost. Če oldResult ni bil NONE (brez pritiska) in je novi rezultat NONE, vem, da je bil gumb že pritisnjen in je bil zdaj sproščen. Nato dvignem ustrezen vhodni dogodek stanja stroja.
int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); zamuda (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> raise_mode (); zlom; } primer LEVO: {stateMachine-> getSCI_Button ()-> raise_set (); zlom; } primer DOL: {stateMachine-> getSCI_Button ()-> raise_light (); zlom; } velika črka UP: {stateMachine-> getSCI_Button ()-> raise_light_r (); zlom; } primer DESNO: {stateMachine-> getSCI_Button ()-> raise_onoff (); zlom; } privzeto: {break; }}}}
5. korak: Povežite stvari skupaj
Glavni program uporablja tri dele:
- Državni stroj
- Časovnik
- Vodnik zaslona (tipičen lcd.tisk (…))
DigitalWatch* stateMachine = nov DigitalWatch (); CPPTimerInterface* timer_sct = nov CPPTimerInterface (); DisplayHandler* displayHandler = nov DisplayHandler ();
Državni stroj uporablja rokovalnik zaslona in ima časomer, ki bo posodobljen za nadzor časovnih dogodkov. Nato se državni stroj inicializira in vnese.
void setup () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> enter (); }Zanka naredi tri stvari:
- Zvišajte vhodne dogodke
- Izračunajte pretečeni čas in posodobite časovnik
- Pokličite državni stroj
dolg trenutni čas = 0; dolg zadnji_cikel_čas = 0; void loop () {raiseEvents (); last_cycle_time = current_time; trenutni_čas = milis (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }
6. korak: Pridobite primer
To je to. Verjetno nisem omenil vseh podrobnosti izvedbe, lahko pa si ogledate primer ali pustite komentar.
Tekuči IDE dodajte primer z: Datoteka -> Novo -> Primer -> Primeri grafikonov stanja YAKINDU -> Naprej -> Arduino -Digitalna ura (C ++)
> IDE lahko prenesete tukaj <<
Začnete lahko s 30 -dnevno preskusno različico. Nato morate pridobiti licenco, ki je brezplačna za nekomercialno uporabo!
Priporočena:
Arduino digitalna ura z uporabo DS1302: 4 koraki
Arduino digitalna ura z uporabo DS1302: Uvod Pozdravljeni, upam, da ste vsi super. To bo kratek in preprost projekt o tem, kako narediti digitalno uro z Arduinom, v tem projektu pa bomo s pomočjo Arduina in premičnega registra naredili digitalno uro. Ta
Digitalna ura z uporabo Arduino in LED matričnega zaslona: 6 korakov
Digitalna ura z uporabo Arduina in Led Dot Matrix Display: Danes ustvarjalci in razvijalci raje uporabljajo Arduino za hiter razvoj prototipov projektov. Arduino je odprtokodna elektronska platforma, ki temelji na enostavni strojni in programski opremi. Arduino ima zelo dobro skupnost uporabnikov. V tem projektu
Digitalna ura z uporabo notranjega RTC STM32L476: 5 korakov
Digitalna ura z uporabo notranjega RTC STM32L476: Ta vadnica vodi do izdelave digitalne ure doma in lahko deluje, dokler jo napaja vir napajanja. Uporablja notranje registre mikrokrmilnika in ne potrebuje zunanjega RTC
Preprosta digitalna ura z uporabo Arduina: 6 korakov
Enostavna digitalna ura z uporabo Arduina: naredite preprosto digitalno uro z arduinom in preprostim tiskanim vezjem
Digitalna ura z uporabo 4026 in 4060: 5 korakov (s slikami)
Digitalna ura z uporabo 4026 in 4060: Poleti sem opravila tečaj z naslovom "Digitalna elektronika" na moji fakulteti. Spoznal sem japonke, pulte in še veliko več. Zato sem mislil, da bi bilo super, če bi naredil projekt, povezan z digitalno elektroniko, in od tam projekt digitalni klok