Sisukord:
- Tarvikud
- Samm: kuidas digitaalkell töötab
- 2. samm: olekumasin
- Samm: LCD -klahvistiku kilp
- 4. samm: olekumasina liidestamine
- Samm: ühendage asjad kokku
- 6. samm: hankige näide
Video: Digitaalkell Arduino'l piiratud olekuga masina abil: 6 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:47
Tere, ma näitan teile, kuidas saab YAKINDU Statechart Tools abil luua digitaalse kella ja töötada Arduinoga, mis kasutab LCD -klaviatuuri.
Digikella algne mudel on võetud David Harelilt. Ta on avaldanud artikli selle kohta
"[…] Riigimasinate ja olekudiagrammide tavapärase formalismi lai laiendamine."
Selles artiklis kasutas ta oma uurimistööks digikella näidet. Kasutasin seda inspiratsioonina ja ehitasin kella YAKINDU Statechart Tools abil (tööriist olekumasinate graafiliste mudelite loomiseks ja sellega C/C ++ koodi genereerimiseks) ümber ja tõstsin selle Arduinole uuesti ellu.
Tarvikud
Riistvara:
- Arduino Uno või Mega
- LCD klahvistiku kilp
Tarkvara:
- YAKINDU olekukaardi tööriistad
- Eclipse C ++ IDE Arduino jaoks
Samm: kuidas digitaalkell töötab
Alustuseks määratleme, kuidas digitaalne kell peaks töötama. Kas mäletate neid… ütleme… „ülilahedaid” digitaalseid kellasid, mis kõigil olid 90ndatel? Integreeritud stopper, erinevad alarmid ja selle tüütu piiks igal täistunnil. Kui ei, siis vaadake: 90ndate digitaalne kell.
Nii et põhimõtteliselt on see erinevate režiimidega seadistatav kell. Peamiselt kuvatakse praegune kellaaeg, kuid on ka muid funktsioone. Sisendina on teil sisse/välja lülitatud, režiim ja seadistusnupp. Lisaks saate valgust sisse ja välja lülitada. Režiimi nupuga saate režiime eristada ja kellafunktsioone aktiveerida/keelata:
- Kella kuvamine (kell)
- Kuva kuupäev (kuupäev)
- Äratuse seadistamine (Alarm 1, Alarm 2)
- Kellamängu lubamine/keelamine (helina määramine)
- Stopperi kasutamine (Stopper)
Menüüdes saate režiimi konfigureerimiseks kasutada sisse/välja nuppu. Seadistusnupp võimaldab määrata kellaaega - nt. kella või äratuste jaoks. Stopperit saab juhtida - käivitada ja peatada - kasutades valguse sisselülitamise ja väljalülitamise nuppu. Võite kasutada ka integreeritud ringiloendurit
Lisaks on olemas helisignaal, mis heliseb igal täistunnil, ja integreeritud juhitav taustvalgus. Esimesel sammul ei ühendanud ma neid Arduinoga.
2. samm: olekumasin
Ma ei taha selle näite selgitamiseks väga üksikasjalikult rääkida. See pole sellepärast, et see oleks liiga keeruline, vaid lihtsalt natuke liiga suur. Püüan selgitada selle toimimise põhiideed. Teostus peaks olema iseenesestmõistetav, vaadates mudelit või laadides selle alla ja simuleerides. Mõned olekumasina osad on koondatud alampiirkondadesse, näiteks määratud ajapiirkond. Sellega tuleks tagada olekumasina loetavus.
Mudel on jagatud kaheks osaks - graafiline ja tekstiline. Tekstiosas määratletakse sündmused, muutujad jne. Graafilises osas - olekudiagrammis - on täpsustatud mudeli loogiline täitmine. Määratud käitumist täitva olekumasina loomiseks on vaja mõningaid sisendsündmusi, mida saab mudelis kasutada: onoff, set, mode, light ja light_r. Definitsioonide jaotises kasutatakse sisemist sündmust, mis suurendab ajaväärtust iga 100 ms järel:
iga 100 ms / kord += 1
100 ms sammu põhjal arvutatakse praegune aeg vormingus HH: MM: SS:
display.first = (aeg / 36000) % 24;
display.second = (aeg / 600) % 60; display.third = (aeg / 10) % 60;
Väärtused ühendatakse LCD -ekraanile operatsiooni updateLCD abil iga kord, kui olekumasinale helistatakse:
display.updateLCD (display.first, display.second, display.third, display.text)
Olekumasina põhiline täitmine on juba määratletud jaotises Kuidas digitaalkell töötab. Tööriista sees olen kasutanud mõningaid "spetsiaalseid" modelleerivaid elemente, nagu CompositeState, ajalugu, alamdiagrammid, ExitNodes jne. Üksikasjaliku kirjelduse leiate kasutusjuhendist.
Samm: LCD -klahvistiku kilp
LCD -klahvistiku kilp on üsna lahe lihtsate projektide jaoks, mille visualiseerimiseks on vaja ekraani ja sisendiks mõningaid nuppe - tüüpiline lihtne HMI (Human Machine Interface). LCD -klahvistiku kilp sisaldab viit kasutaja nuppu ja veel ühte lähtestamiseks. Kõik viis nuppu on ühendatud Arduino A0 tihvtiga. Igaüks neist on ühendatud pingejagajaga, mis võimaldab nuppe eristada.
Konkreetsete väärtuste leidmiseks võite kasutada analogRead (0), mis võib tootjal muidugi erineda. See lihtne projekt kuvab LCD -ekraanil praeguse väärtuse:
#sisaldab "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 ("Mõõdetud väärtus"); } void loop () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); viivitus (200); }
Need on minu mõõdetud tulemused:
- Puudub: 1023
- Valige: 640
- Vasakul: 411
- Alla: 257
- Üles: 100
- Õige: 0
Nende künnistega on võimalik nuppe lugeda:
#define NONE 0 #define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5 staatiline int readButton () {int tulemus = 0; tulemus = analogRead (0); if (tulemus <50) {return RIGHT; } if (tulemus <150) {return UP; } if (tulemus <300) {return DOWN; } if (tulemus <550) {return LEFT; } if (tulemus <850) {return SELECT; } tagastama MITTE; }
4. samm: olekumasina liidestamine
Olekumasina loodud C ++ kood pakub liideseid, mis tuleb olekumasina juhtimiseks rakendada. Esimene samm on sündmuste ühendamine klahvistiku kilbi klahvidega. Olen juba näidanud, kuidas nuppe lugeda, kuid nende olekumasinaga ühendamiseks on vaja nuppe tühistada - vastasel juhul tõstetakse sündmusi mitu korda, mille tulemuseks on ettearvamatu käitumine. Tarkvara tühistamise mõiste pole uus. Saate vaadata Arduino dokumentatsiooni.
Oma rakenduses tuvastan langeva serva (vabastades nupu). Lugesin nupu väärtust, ootan 80 ms (sain paremaid tulemusi 50 asemel 80 -ga), salvestan tulemuse ja loen uue väärtuse. Kui oldResult ei olnud MITTE (vajutamata) ja uus tulemus on MITTE, siis tean, et nuppu on varem vajutatud ja nüüd on see vabastatud. Seejärel tõstan olekumasina sisendsündmuse.
int oldState = NONE; staatiline void raiseEvents () {int nupp Vajutatud = readButton (); viivitus (80); oldState = nupp Vajutatud; if (oldState! = NOONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> raise_mode (); murda; } juhtum LEFT: {stateMachine-> getSCI_Button ()-> raise_set (); murda; } juhtum ALLA: {stateMachine-> getSCI_Button ()-> raise_light (); murda; } juhtum ÜLES: {stateMachine-> getSCI_Button ()-> raise_light_r (); murda; } juhtum PAREM: {stateMachine-> getSCI_Button ()-> raise_onoff (); murda; } vaikimisi: {break; }}}}
Samm: ühendage asjad kokku
Põhiprogramm koosneb kolmest osast:
- Osariigi masin
- Taimer
- A Display Handler (tüüpiline lcd.print (…))
DigitalWatch* stateMachine = uus DigitalWatch (); CPPTimerInterface* timer_sct = uus CPPTimerInterface (); DisplayHandler* displayHandler = uus DisplayHandler ();
Olekumasin kasutab kuvaritöötlejat ja sai taimeri, mida ajakohastatud sündmuste juhtimiseks uuendatakse. Seejärel vormindatakse olekumasin ja sisestatakse see.
void setup () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> enter (); }Tsükkel teeb kolme asja:
- Tõstke sisendüritusi
- Arvutage kulunud aeg ja värskendage taimerit
- Helistage riigimasinale
pikk praegune_aeg = 0; pikk viimane_tsükli_aeg = 0; void loop () {raiseEvents (); viimane_tsükli_aeg = praegune_aeg; praegune_aeg = millis (); timer_sct-> updateActiveTimer (olekumasin, praegune_aeg - viimane_tsükli aeg); stateMachine-> runCycle (); }
6. samm: hankige näide
See on kõik. Tõenäoliselt ei ole ma maininud kõiki rakenduse üksikasju, kuid võite näite vaadata või kommentaari jätta.
Lisage näide töötavale IDE -le, kasutades järgmist: Fail -> Uus -> Näide -> YAKINDU olekukaardi näited -> Järgmine -> Arduino -Digitaalkell (C ++)
> IDE saate alla laadida siit <<
Võite alustada 30 -päevase prooviperioodiga. Hiljem peate hankima litsentsi, mis on mitteäriliseks kasutamiseks tasuta!
Soovitan:
Piiratud olekuga masin MSP430 -l: 6 sammu
Finite State Machine MSP430 -l: näitan teile, kuidas programmeerida MSP430G2 käivitusplaati Finite State Machines (FSM) abil, kasutades YAKINDU Statechart Tools'i otse Texas Instruments Code Composer Studio'is. See õpetus sisaldab kuut sammu: YAKINDU olekukaardi tööriistade installimine
Digitaalkell Arduino ja Led Dot maatriksekraani abil: 6 sammu
Digitaalkell Arduino ja Led Dot Matrix Display abil: tänapäeval eelistavad tegijad ja arendajad Arduinot projektide prototüüpide kiireks arendamiseks. Arduino on avatud lähtekoodiga elektroonikaplatvorm, mis põhineb hõlpsasti kasutataval riist- ja tarkvaral. Arduinol on väga hea kasutajaskond. Selles projektis
Lihtne digitaalkell Arduino Nano ja DS1307 abil: 4 sammu
Lihtne digitaalkell Arduino Nano ja DS1307 abil vaadake ekraani. enne õppetundi sisenemist soovitan
Lihtne digitaalkell Arduino abil: 6 sammu
Lihtne digitaalkell Arduino abil: tehke arduino ja lihtsa PCB abil lihtne digitaalne kell
12-tunnine digitaalkell Arduino abil: 3 sammu
12-tunnine digitaalkell Arduino abil: see on leivaplaadil põhinev projekt, mis kasutab Atmel Atmega 2560 (Arduino Mega) ja 16x2 LCD-ekraani 12-tunnise digitaalse kella tegemiseks ilma lisaseadmeteta. Samuti saame kellaaega kahe nupu abil seadistada ja muuta. Kogu