INHOUDSOPGAWE:
- Voorrade
- Stap 1: Hoe werk die digitale horlosie
- Stap 2: Die staatsmasjien
- Stap 3: LCD -sleutelbordskerm
- Stap 4: Koppel aan die staatsmasjien
- Stap 5: Verbind dinge saam
- Stap 6: Kry die voorbeeld
Video: Digitale horlosie op Arduino met 'n eindige staatsmasjien: 6 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
Hallo, ek gaan jou wys hoe 'n digitale horlosie met YAKINDU Statechart Tools geskep kan word en op 'n Arduino gebruik kan word, wat 'n LCD -sleutelbordskerm gebruik.
Die oorspronklike model van die digitale horlosie is geneem van David Harel. Hy het 'n referaat gepubliseer oor die
"[…] 'n breë uitbreiding van die konvensionele formalisme van staatsmasjiene en staatsdiagramme."
In hierdie artikel gebruik hy die voorbeeld van die digitale horlosie vir sy navorsing. Ek het dit as 'n inspirasie gebruik en die horlosie herbou met YAKINDU Statechart Tools ('n hulpmiddel om grafiese modelle van staatsmasjiene te skep en C/C ++ kode daarmee te genereer) en dit weer lewendig te maak op 'n Arduino.
Voorrade
Hardeware:
- Arduino Uno of Mega
- LCD -sleutelbordskerm
Sagteware:
- YAKINDU Statechart Tools
- Eclipse C ++ IDE vir Arduino
Stap 1: Hoe werk die digitale horlosie
Kom ons begin deur te definieer hoe die digitale horlosie moet werk. Onthou jy hierdie … kom ons sê … 'ultra -cool' digitale horlosies wat almal in die 90's gehad het? 'N Geïntegreerde stophorlosie, verskillende alarms en die irriterende piep elke uur. As dit nie die geval is nie, kyk dan na die digitale horlosie van die 90's.
So basies is dit 'n konfigureerbare horlosie met verskillende maniere. Die huidige tyd sal hoofsaaklik vertoon word, maar daar is 'n paar ander funksies. As invoer het u 'n aan/af, 'n modus en 'n vaste knoppie. Boonop kan u die lig aan en af skakel. Met die modusknoppie kan u tussen die modi onderskei en die klokfunksies aktiveer/deaktiveer:
- Wys die tyd (klok)
- Gee die datum (datum)
- Stel die alarm in (alarm 1, alarm 2)
- Aktiveer/deaktiveer klokkie (stel klokkie)
- Gebruik die stophorlosie (Stop Watch)
In die spyskaarte kan u die aan/uit -knoppie gebruik om die modus op te stel. Met die stelknoppie kan u die tyd instel - bv. vir die klok of die alarms. Die stophorlosie kan beheer word - begin en gestop word - deur die knoppie aan en af te skakel. U kan ook 'n geïntegreerde rondeteller gebruik
Verder is daar 'n klokkie wat elke volle uur lui en 'n beheerbare agtergrond geïntegreer. By die eerste stap het ek hulle nie na die Arduino gestuur nie.
Stap 2: Die staatsmasjien
Ek wil nie veel in detail gaan vir die verduideliking van hierdie voorbeeld nie. Dit is nie omdat dit te kompleks is nie, dit is net 'n bietjie te groot. Ek sal probeer om die basiese idee van hoe dit werk te verduidelik. Die uitvoering moet selfverduidelikend wees deur na die model te kyk of dit af te laai en na te boots. Sommige dele van die staatsmasjien word in substreke opgesom, soos die vasgestelde tydsgebied. Hiermee moet die leesbaarheid van die staatsmasjien verseker word.
Die model word in twee dele verdeel - 'n grafiese en 'n tekstuele. In die tekstuele gedeelte sal die gebeurtenisse, veranderlikes, ens. Gedefinieer word. In die grafiese deel - die toestanddiagram - word die logiese uitvoering van die model gespesifiseer. Om 'n staatsmasjien te skep wat aan die gespesifiseerde gedrag voldoen, is 'n paar invoergebeurtenisse nodig wat in die model gebruik kan word: aan, stel, modus, lig en lig_r. Binne die definisie -afdeling word 'n interne gebeurtenis gebruik, wat die tydwaarde elke 100 ms verhoog:
elke 100 ms / tyd += 1
Op grond van die stappe van 100 ms word die huidige tyd bereken in die formaat HH: MM: SS:
display.first = (tyd / 36000) % 24;
display.second = (tyd / 600) % 60; display.third = (tyd / 10) % 60;
Die waardes word aan die LCD -skerm gekoppel deur die operasie updateLCD te gebruik elke keer as die staatsmasjien gebel word:
display.updateLCD (display.first, display.second, display.third, display.text)
Die basiese uitvoering van die staatsmasjien is reeds omskryf in die afdeling Hoe die digitale horlosie werk. In die instrument het ek 'n paar 'spesiale' modelelemente gebruik, soos CompositeState, History, Sub-Diagrams, ExitNodes, ens. 'N Gedetailleerde beskrywing kan gevind word in die gebruikershandleiding.
Stap 3: LCD -sleutelbordskerm
Die LCD -sleutelbordskerm is baie goed vir eenvoudige projekte, wat 'n skerm benodig vir visualisering en 'n paar knoppies as invoer - 'n tipiese, eenvoudige HMI (Human Machine Interface). Die LCD -sleutelbordskerm bevat vyf gebruikersknoppies en nog een om terug te stel. Die vyf knoppies is saam gekoppel aan die A0 -pen van die Arduino. Elkeen is gekoppel aan 'n spanningsverdeler, wat die onderskeid tussen die knoppies moontlik maak.
U kan analogRead (0) gebruik om die spesifieke waardes te vind, wat natuurlik deur die vervaardiger kan verskil. Hierdie eenvoudige projek vertoon die huidige waarde op die LCD:
#sluit "Arduino.h" in
#sluit "LiquidCrystal.h" LiquidCrystal lcd (8, 9, 4, 5, 6, 7) in; ongeldige opstelling () {lcd.begin (16, 2); lcd.setCursor (0, 0); lcd.write ("Meetwaarde"); } leemte lus () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); vertraging (200); }
Dit is my gemete resultate:
- Geen: 1023
- Kies: 640
- Links: 411
- Af: 257
- Op: 100
- Regs: 0
Met hierdie drempels is dit moontlik om die knoppies te lees:
#define NONE 0 #definieer SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define REGS 5 static int readButton () {int result = 0; resultaat = analogRead (0); if (resultaat <50) {retoer REGS; } if (resultaat <150) {return UP; } if (resultaat <300) {return DOWN; } if (resultaat <550) {return LEFT; } if (resultaat <850) {return SELECT; } gee GEEN terug nie; }
Stap 4: Koppel aan die staatsmasjien
Die gegenereerde C ++ - kode van die staatsmasjien bied koppelvlakke wat geïmplementeer moet word om die staatsmasjien te beheer. Die eerste stap is om die in -events te verbind met die sleutels van die Keypad Shield. Ek het al getoon hoe ek die knoppies moet lees, maar om die knoppies met die staatsmasjien te koppel, is dit nodig om die knoppies uit te skakel - anders word die gebeurtenisse verskeie kere verhoog, wat lei tot onvoorspelbare gedrag. Die konsep van sagteware -ontbinding is nie nuut nie. U kan na die Arduino -dokumentasie kyk.
In my implementering bespeur ek 'n afname (die knoppie los). Ek lees die waarde van die knoppie, wag vir 80 ms (kry beter resultate met 80 in plaas van 50), stoor die resultaat en lees die nuwe waarde. As die oldResult NONE (ongedruk) was nie en die nuwe resultaat NONE is, weet ek dat die knoppie al voorheen ingedruk is en nou vrygestel is. Dan verhoog ek die ooreenstemmende insetgebeurtenis van die staatsmasjien.
int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); vertraging (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> raise_mode (); breek; } geval LINKS: {stateMachine-> getSCI_Button ()-> raise_set (); breek; } geval DOWN: {stateMachine-> getSCI_Button ()-> raise_light (); breek; } geval UP: {stateMachine-> getSCI_Button ()-> raise_light_r (); breek; } saak REGS: {stateMachine-> getSCI_Button ()-> raise_onoff (); breek; } verstek: {break; }}}}
Stap 5: Verbind dinge saam
Die hoofprogram bevat drie dele:
- Die staatsmasjien
- 'N Timer
- 'N Vertoonhanteerder (tipiese lcd.print (…))
DigitalWatch* stateMachine = nuwe DigitalWatch (); CPPTimerInterface* timer_sct = nuwe CPPTimerInterface (); DisplayHandler* displayHandler = nuwe DisplayHandler ();
Die staatsmasjien gebruik 'n vertoonhanteerder en kry 'n timer, wat bygewerk sal word om die tydgebeurtenisse te beheer. Daarna word die staatsmasjien geïnitialiseer en ingevoer.
ongeldige opstelling () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> enter (); }Die lus doen drie dinge:
- Stel insetgebeurtenisse op
- Bereken die verloopte tyd en werk die tydopnemer by
- Bel die staatsmasjien
lang huidige tyd = 0; lang laaste_fiets tyd = 0; leemte -lus () {raiseEvents (); last_cycle_time = huidige_tyd; huidige tyd = millis (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }
Stap 6: Kry die voorbeeld
Dis dit. Ek het waarskynlik nie elke detail van die implementering genoem nie, maar u kan na die voorbeeld kyk of 'n opmerking lewer.
Voeg die voorbeeld by 'n lopende IDE met: File -> New -> Voorbeeld -> YAKINDU Statechart Voorbeelde -> Volgende -> Arduino -Digital Watch (C ++)
> U kan die IDE hier aflaai <<
U kan begin met 'n proeftydperk van 30 dae. Daarna moet u 'n lisensie kry, wat gratis is vir nie-kommersiële gebruik!
Aanbeveel:
Hoe om 'n analoog horlosie en 'n digitale horlosie met LED -strook te maak met behulp van Arduino: 3 stappe
Hoe om 'n analoog horlosie en 'n digitale horlosie te maak met 'n LED -strook met Arduino: vandag maak ons 'n analoog horlosie & Digitale klok met Led Strip en MAX7219 Dot -module met Arduino. Dit sal die tyd met die plaaslike tydsone regstel. Die analoog horlosie kan 'n langer LED -strook gebruik, sodat dit aan die muur gehang kan word om 'n kunswerker te word
Outomatiese troeteldiervoerder met 'n ou digitale horlosie: 10 stappe (met foto's)
Outomatiese troeteldiervoerder met 'n ou digitale horlosie: Hallo, in hierdie instruksies sal ek jou wys hoe ek 'n outomatiese troeteldiervoerder met 'n ou digitale horlosie gemaak het. Ek het ook 'n video ingebed oor hoe ek hierdie voerder gemaak het. Hierdie instruksies word vir die PCB -wedstryd ingeskryf, en as 'n guns wil ek
Hoe om 'n digitale horlosie te maak: 10 stappe (met foto's)
Hoe om 'n digitale horlosie te maak: Dit is die eerste keer dat ek 'n Instructable skryf, so ek skryf hopelik goed genoeg sodat u dit kan verstaan. Vandag sal ek u vertel hoe u 'n digitale horlosie kan maak van 'n webwerf wat ek gevind het. Die webwerf word sainsmart.com genoem. Dit was regtig maklik
Maak 'n horlosie van 'n horlosie: 11 stappe (met foto's)
Skep 'n horlosie van 'n horlosie: In hierdie instruksies neem ek 'n bestaande horlosie en skep wat ek voel 'n beter horlosie is. Ons gaan van die prentjie links na die prentjie regs. Voordat u met u eie horlosie begin, moet u weet dat die hermontering 'n uitdaging kan wees, net soos die belangrikste
Hoe om 'n digitale horlosie te maak met behulp van 8051 met 7 segmente: 4 stappe
Hoe om 'n digitale horlosie te maak met behulp van 8051 met 7 -segmentweergawe: in hierdie projek het ek u verduidelik hoe u 'n eenvoudige digitale horlosie kan maak met behulp van 8051 -mikrobeheerder met 7 -segment -skerm