![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
' =========================================================================== ' Demoprogramm: Einfacher Countdown mittels Zustandsautomat ' In OCBASIC 1.11a für Open-Maxi von Dietmar Harlos am 29. August 2020 ' =========================================================================== ' Hier wird erklärt, was ein Zustandsautomat (Statemachine) ist: ' https://www.mikrocontroller.net/articles/Statemachine ' Auf der offiziellen Infosite der OM-Mikrocontroller gibt es das Beispiel ' "Kleine Pizza-Uhr auf der Open-Macro". Das dortige kleine Beispielprogramm ' demonstriert, wie Tasten des PE-Boards abgefragt und daraufhin Signale ' erzeugt werden. Auch bei einem Sekundenwechsel wird ein Signal erzeugt. ' Ausgewertet werden die Signale in einem sogenannten Zustandsautomaten. ' Die Ausgabe findet auf dem an BYTEPORT[2] angeschlossenen I2C-LCD von ' Conrad Electronic (Bestellnr. 198330) statt. Darüber hinaus wird gezeigt, ' wie auf dem LCD komfortabel Strings (also Texte) ausgegeben werden können. ' Als Bonus gibt es zwei weitere Programme, die ebenfalls I2C-LCDs nutzen. ' An dieser Stelle möchte ich mich bei Norbert Klein und bei Dirk von "das ' |_ Team" für ihre Unterstützung bedanken. ' --- Definitionen ---------------------------------------------------------- INCLUDE "omax.def" 'Definitionen für die Open-Maxi DIM bitarray BYTE DIM signalsekunde BIT[1] OF bitarray 'Signal DIM zustand BYTE 'Variablen DIM temp BYTE DIM sekundealt BYTE DIM anzsekunden INT DEFINE zuscountdown 1 'Zustände des Zustandsautomaten DEFINE zusalarm 2 ' --- Hauptprogramm --------------------------------------------------------- PRINT "Countdown auf der Open-Maxi" anzsekunden=1*60+30 'Zeit: 1 Minute und 30 Sekunden showrestzeit init ' Schleife des Hauptprogramms WHILE TRUE uhrabfrage zustandsautomat WEND END ' --- Subroutinen und Funktionen -------------------------------------------- ' Verschiedene Initialisierungen PROCEDURE init signalsekunde=OFF zustand=zuscountdown RETURN END PROCEDURE ' Uhr abfragen und Signal signalsekunde erzeugen PROCEDURE uhrabfrage temp=SECOND IF temp<>sekundealt THEN 'Uhr wurde weitergezählt? sekundealt=temp signalsekunde=ON END IF RETURN END PROCEDURE ' Zustandsautomat PROCEDURE zustandsautomat IF zustand=zuscountdown THEN 'Zustand "Count Down" IF signalsekunde THEN signalsekunde=OFF SUB anzsekunden,1 showrestzeit END IF IF anzsekunden=0 THEN zustand=zusalarm END IF ELSEIF zustand=zusalarm THEN 'Zustand "Alarm" IF signalsekunde THEN signalsekunde=OFF PRINT "ALARM!" BEEP 710,5,0 END IF END IF RETURN END PROCEDURE ' Die "anzsekunden" in Minuten im Format 00:00 anzeigen PROCEDURE showrestzeit PUT (((anzsekunden/60)/10)+ASC("0")) PUT (((anzsekunden/60) MOD 10)+ASC("0")) PUT ASC(":") PUT (((anzsekunden MOD 60)/10)+ASC("0")) PUT (((anzsekunden MOD 60) MOD 10)+ASC("0")) PUT 13 RETURN END PROCEDURE ' --- Programmende --------------------------------------------------------- Passender Link: Infosite zu den OM-Mikrocontrollern Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |