Markus Reiner / Mbed 2 deprecated MarkusReiner7ABELI

Dependencies:   mbed

Committer:
mexx
Date:
Thu Nov 29 17:02:15 2018 +0000
Revision:
0:ee837830d039
Child:
1:fb317288084d
Versuch

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mexx 0:ee837830d039 1 #include "mbed.h"
mexx 0:ee837830d039 2
mexx 0:ee837830d039 3 BusOut myleds(LED1, LED2, LED3, LED4);
mexx 0:ee837830d039 4 //DigitalOut led1(LED1);
mexx 0:ee837830d039 5 //DigitalOut led2(LED2);
mexx 0:ee837830d039 6 //DigitalOut led3(LED3);
mexx 0:ee837830d039 7 //DigitalOut led4(LED4);
mexx 0:ee837830d039 8
mexx 0:ee837830d039 9
mexx 0:ee837830d039 10 enum Status {ST_LEDOFF=0, ST_LEDEIN=1,};
mexx 0:ee837830d039 11 Status volatile status;
mexx 0:ee837830d039 12 // States
mexx 0:ee837830d039 13 //typedef enum {ST_EIN, ST_AUS, ST_ERROR, ST_STATE1} nextState;
mexx 0:ee837830d039 14 // alternativ
mexx 0:ee837830d039 15 //const int ST_EIN = 0;
mexx 0:ee837830d039 16 //const int ST_AUS = 1;
mexx 0:ee837830d039 17 //onst int ST_ERROR = 2;
mexx 0:ee837830d039 18
mexx 0:ee837830d039 19 // ---------------- Event Klasse --------------------------
mexx 0:ee837830d039 20 class SwEvent {
mexx 0:ee837830d039 21 InterruptIn _isr;
mexx 0:ee837830d039 22 bool _pressed;
mexx 0:ee837830d039 23 void _RisingISR();
mexx 0:ee837830d039 24
mexx 0:ee837830d039 25 public:
mexx 0:ee837830d039 26 SwEvent(PinName pin) : _isr(pin) {
mexx 0:ee837830d039 27 _pressed = false;
mexx 0:ee837830d039 28 }
mexx 0:ee837830d039 29 int CheckFlag(); // das muss im do-Zweig (while(true) Schleife) ständig abgefragt werden
mexx 0:ee837830d039 30 void InitIsr();
mexx 0:ee837830d039 31 };
mexx 0:ee837830d039 32
mexx 0:ee837830d039 33 int SwEvent::CheckFlag() {
mexx 0:ee837830d039 34 if( _pressed ) {
mexx 0:ee837830d039 35 _pressed = false;
mexx 0:ee837830d039 36 return 1;
mexx 0:ee837830d039 37 }
mexx 0:ee837830d039 38 return 0;
mexx 0:ee837830d039 39 }
mexx 0:ee837830d039 40
mexx 0:ee837830d039 41 void SwEvent::InitIsr() {
mexx 0:ee837830d039 42 _isr.rise(callback(this, &SwEvent::_RisingISR));
mexx 0:ee837830d039 43 }
mexx 0:ee837830d039 44
mexx 0:ee837830d039 45 void SwEvent::_RisingISR() {
mexx 0:ee837830d039 46 wait_ms(100);
mexx 0:ee837830d039 47 _pressed = true;
mexx 0:ee837830d039 48 }
mexx 0:ee837830d039 49
mexx 0:ee837830d039 50 SwEvent sw1(p14); // Joy Stick Center
mexx 0:ee837830d039 51
mexx 0:ee837830d039 52 // ----------------- Stm Klasse -----------------------------
mexx 0:ee837830d039 53 class Stm {
mexx 0:ee837830d039 54 public:
mexx 0:ee837830d039 55 Stm() { state=ST_AUS; }
mexx 0:ee837830d039 56
mexx 0:ee837830d039 57 void Ein();
mexx 0:ee837830d039 58 void Aus();
mexx 0:ee837830d039 59 void Error();
mexx 0:ee837830d039 60
mexx 0:ee837830d039 61 uint8_t state;
mexx 0:ee837830d039 62 };
mexx 0:ee837830d039 63
mexx 0:ee837830d039 64
mexx 0:ee837830d039 65 void Stm::Ein(){
mexx 0:ee837830d039 66 while(true) {
mexx 0:ee837830d039 67 led1 = 0;
mexx 0:ee837830d039 68 if(sw1.CheckFlag()) {
mexx 0:ee837830d039 69 state = ST_AUS;
mexx 0:ee837830d039 70 return;
mexx 0:ee837830d039 71 }
mexx 0:ee837830d039 72 }
mexx 0:ee837830d039 73 }
mexx 0:ee837830d039 74
mexx 0:ee837830d039 75 void Stm::Aus(){
mexx 0:ee837830d039 76 while(true) {
mexx 0:ee837830d039 77 led1 = 1;
mexx 0:ee837830d039 78 if(sw1.CheckFlag()) {
mexx 0:ee837830d039 79 state = ST_EIN;
mexx 0:ee837830d039 80 return;
mexx 0:ee837830d039 81 }
mexx 0:ee837830d039 82 }
mexx 0:ee837830d039 83 }
mexx 0:ee837830d039 84
mexx 0:ee837830d039 85 void Stm::Error(){
mexx 0:ee837830d039 86 while(1) {
mexx 0:ee837830d039 87 led3 = ~led3;
mexx 0:ee837830d039 88 wait_ms(200);
mexx 0:ee837830d039 89 }
mexx 0:ee837830d039 90 }
mexx 0:ee837830d039 91
mexx 0:ee837830d039 92 Stm stm;
mexx 0:ee837830d039 93
mexx 0:ee837830d039 94 void stateMachine()
mexx 0:ee837830d039 95 {
mexx 0:ee837830d039 96 printf("state: %d\n", stm.state);
mexx 0:ee837830d039 97 switch (stm.state)
mexx 0:ee837830d039 98 {
mexx 0:ee837830d039 99 case ST_EIN: stm.Ein();
mexx 0:ee837830d039 100 break;
mexx 0:ee837830d039 101 case ST_AUS: stm.Aus();
mexx 0:ee837830d039 102 break;
mexx 0:ee837830d039 103 default: stm.Error();
mexx 0:ee837830d039 104 break;
mexx 0:ee837830d039 105 }
mexx 0:ee837830d039 106 }
mexx 0:ee837830d039 107
mexx 0:ee837830d039 108 int main()
mexx 0:ee837830d039 109 {
mexx 0:ee837830d039 110 printf("Hello STM class\n");
mexx 0:ee837830d039 111 sw1.InitIsr();
mexx 0:ee837830d039 112
mexx 0:ee837830d039 113 while(1) {
mexx 0:ee837830d039 114 stateMachine();
mexx 0:ee837830d039 115 }
mexx 0:ee837830d039 116 }