![](/media/cache/profiles/IMG-20160517-WA0063.jpegEdit.JPG.50x50_q85.jpg)
State Maschine Übungen von fPucher https://os.mbed.com/users/fpucher/code/HIM0Board/wiki/STM-Schalter
main.cpp@0:7f1867e68546, 2018-11-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |