State Maschine Übungen von fPucher https://os.mbed.com/users/fpucher/code/HIM0Board/wiki/STM-Schalter

Dependencies:   mbed C12832

Committer:
kunphil
Date:
Thu Nov 08 16:45:58 2018 +0000
Revision:
0:7f1867e68546
Child:
1:fdfc2454217b
Erste Aufgabe zu State Machine; https://os.mbed.com/users/fpucher/code/HIM0Board/wiki/STM-Schalter

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kunphil 0:7f1867e68546 1 #include "mbed.h"
kunphil 0:7f1867e68546 2 #include "C12832.h"
kunphil 0:7f1867e68546 3
kunphil 0:7f1867e68546 4 DigitalOut Led1(LED1, 0);
kunphil 0:7f1867e68546 5 DigitalOut Led2(LED2, 0);
kunphil 0:7f1867e68546 6 DigitalOut Led3(LED3, 0);
kunphil 0:7f1867e68546 7 DigitalOut Led4(LED4, 0);
kunphil 0:7f1867e68546 8 InterruptIn SW1(p14);
kunphil 0:7f1867e68546 9 InterruptIn SW2(p15);
kunphil 0:7f1867e68546 10 InterruptIn SW3(p12);
kunphil 0:7f1867e68546 11 InterruptIn SW4(p16);
kunphil 0:7f1867e68546 12
kunphil 0:7f1867e68546 13 //************** LCD ****************
kunphil 0:7f1867e68546 14
kunphil 0:7f1867e68546 15 C12832 lcd(p5, p7, p6, p8, p11);
kunphil 0:7f1867e68546 16
kunphil 0:7f1867e68546 17 //************* VARIABLEN ****************
kunphil 0:7f1867e68546 18
kunphil 0:7f1867e68546 19 enum State {ST_AUS=0, ST_EIN};
kunphil 0:7f1867e68546 20 State state;
kunphil 0:7f1867e68546 21
kunphil 0:7f1867e68546 22 bool pressed = false;
kunphil 0:7f1867e68546 23
kunphil 0:7f1867e68546 24
kunphil 0:7f1867e68546 25 //************* EREIGNISSE ****************
kunphil 0:7f1867e68546 26
kunphil 0:7f1867e68546 27 void rise(void)
kunphil 0:7f1867e68546 28 {
kunphil 0:7f1867e68546 29 wait_ms(50);
kunphil 0:7f1867e68546 30 pressed = true;
kunphil 0:7f1867e68546 31 }
kunphil 0:7f1867e68546 32
kunphil 0:7f1867e68546 33 bool CheckFlag()
kunphil 0:7f1867e68546 34 {
kunphil 0:7f1867e68546 35 if (pressed) {
kunphil 0:7f1867e68546 36 pressed=false;
kunphil 0:7f1867e68546 37 return true;
kunphil 0:7f1867e68546 38 }
kunphil 0:7f1867e68546 39 return false;
kunphil 0:7f1867e68546 40 }
kunphil 0:7f1867e68546 41
kunphil 0:7f1867e68546 42 //************* STATES ****************
kunphil 0:7f1867e68546 43
kunphil 0:7f1867e68546 44 void ST_Aus (void)
kunphil 0:7f1867e68546 45 {
kunphil 0:7f1867e68546 46 //Status auf LCD und Serial
kunphil 0:7f1867e68546 47 lcd.cls(); // löscht lcd (clear screen)
kunphil 0:7f1867e68546 48 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
kunphil 0:7f1867e68546 49 lcd.printf("State: 1 (Aus)");
kunphil 0:7f1867e68546 50 printf("State: 1 (Aus)");
kunphil 0:7f1867e68546 51 // entry
kunphil 0:7f1867e68546 52
kunphil 0:7f1867e68546 53 // do
kunphil 0:7f1867e68546 54 while(true) {
kunphil 0:7f1867e68546 55 Led1 = 0;
kunphil 0:7f1867e68546 56
kunphil 0:7f1867e68546 57 if(CheckFlag()) {
kunphil 0:7f1867e68546 58 state = ST_EIN;
kunphil 0:7f1867e68546 59
kunphil 0:7f1867e68546 60 // exit
kunphil 0:7f1867e68546 61 return;
kunphil 0:7f1867e68546 62 }
kunphil 0:7f1867e68546 63 }
kunphil 0:7f1867e68546 64 }
kunphil 0:7f1867e68546 65
kunphil 0:7f1867e68546 66 void ST_Ein (void)
kunphil 0:7f1867e68546 67 {
kunphil 0:7f1867e68546 68 //Status auf LCD und Serial
kunphil 0:7f1867e68546 69 lcd.cls(); // löscht lcd (clear screen)
kunphil 0:7f1867e68546 70 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
kunphil 0:7f1867e68546 71 lcd.printf("State: 2 (Ein)");
kunphil 0:7f1867e68546 72 printf("State: 2 (Ein)");
kunphil 0:7f1867e68546 73
kunphil 0:7f1867e68546 74 // entry
kunphil 0:7f1867e68546 75 Led4 = 1;
kunphil 0:7f1867e68546 76 wait_ms(200);
kunphil 0:7f1867e68546 77 Led4 = 0;
kunphil 0:7f1867e68546 78 wait_ms(200);
kunphil 0:7f1867e68546 79 Led4 = 1;
kunphil 0:7f1867e68546 80 wait_ms(200);
kunphil 0:7f1867e68546 81 Led4 = 0;
kunphil 0:7f1867e68546 82 wait_ms(200);
kunphil 0:7f1867e68546 83 // do
kunphil 0:7f1867e68546 84 while(true) {
kunphil 0:7f1867e68546 85 Led1 = 1;
kunphil 0:7f1867e68546 86
kunphil 0:7f1867e68546 87 if(CheckFlag()) {
kunphil 0:7f1867e68546 88 state = ST_AUS;
kunphil 0:7f1867e68546 89
kunphil 0:7f1867e68546 90 // exit
kunphil 0:7f1867e68546 91 return;
kunphil 0:7f1867e68546 92 }
kunphil 0:7f1867e68546 93 }
kunphil 0:7f1867e68546 94 }
kunphil 0:7f1867e68546 95
kunphil 0:7f1867e68546 96 void ST_Error (void)
kunphil 0:7f1867e68546 97 {
kunphil 0:7f1867e68546 98 //Status auf LCD und Serial
kunphil 0:7f1867e68546 99 lcd.cls(); // löscht lcd (clear screen)
kunphil 0:7f1867e68546 100 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
kunphil 0:7f1867e68546 101 lcd.printf("State: ERROR!!!");
kunphil 0:7f1867e68546 102 printf("State: ERROR!!!");
kunphil 0:7f1867e68546 103 return;
kunphil 0:7f1867e68546 104 }
kunphil 0:7f1867e68546 105
kunphil 0:7f1867e68546 106 void stateMachine()
kunphil 0:7f1867e68546 107 {
kunphil 0:7f1867e68546 108 switch (state)
kunphil 0:7f1867e68546 109 {
kunphil 0:7f1867e68546 110 case ST_AUS: ST_Aus();
kunphil 0:7f1867e68546 111 break;
kunphil 0:7f1867e68546 112 case ST_EIN: ST_Ein();
kunphil 0:7f1867e68546 113 break;
kunphil 0:7f1867e68546 114 default: ST_Error(); // sollte nicht auftreten :-)
kunphil 0:7f1867e68546 115 break;
kunphil 0:7f1867e68546 116 }
kunphil 0:7f1867e68546 117 }
kunphil 0:7f1867e68546 118
kunphil 0:7f1867e68546 119
kunphil 0:7f1867e68546 120
kunphil 0:7f1867e68546 121 int main()
kunphil 0:7f1867e68546 122 {
kunphil 0:7f1867e68546 123 SW1.rise(&rise); //.fall(&fall);
kunphil 0:7f1867e68546 124 state = ST_AUS;
kunphil 0:7f1867e68546 125 while(true){
kunphil 0:7f1867e68546 126 stateMachine();
kunphil 0:7f1867e68546 127 }
kunphil 0:7f1867e68546 128 }