Erste Zeilen

Dependencies:   mbed

Committer:
domenicf
Date:
Thu Nov 29 18:32:04 2018 +0000
Revision:
2:67791cb581e3
Parent:
1:05ce05a0f947
Fertig ohne doubleclick

Who changed what in which revision?

UserRevisionLine numberNew contents of line
domenicf 0:2958c9849cb4 1 #include "mbed.h"
domenicf 0:2958c9849cb4 2
domenicf 2:67791cb581e3 3 InterruptIn SW1(p14);
domenicf 2:67791cb581e3 4
domenicf 2:67791cb581e3 5 BusOut Leds ( LED1 , LED2, LED3, LED4);
domenicf 2:67791cb581e3 6
domenicf 2:67791cb581e3 7 Ticker flipper;
domenicf 2:67791cb581e3 8
domenicf 2:67791cb581e3 9 enum State {ST_EIN=0, ST_AUS};
domenicf 2:67791cb581e3 10 State state;
domenicf 2:67791cb581e3 11
domenicf 2:67791cb581e3 12 int LedWert = 3, btnCount = 0;
domenicf 2:67791cb581e3 13
domenicf 2:67791cb581e3 14 bool pressed = false;
domenicf 2:67791cb581e3 15
domenicf 2:67791cb581e3 16
domenicf 2:67791cb581e3 17
domenicf 2:67791cb581e3 18 void rise(void)
domenicf 2:67791cb581e3 19 {
domenicf 2:67791cb581e3 20 wait_ms(50);
domenicf 2:67791cb581e3 21 pressed = true;
domenicf 2:67791cb581e3 22 }
domenicf 2:67791cb581e3 23 bool CheckFlag()
domenicf 2:67791cb581e3 24 {
domenicf 2:67791cb581e3 25 if (pressed)
domenicf 2:67791cb581e3 26 {
domenicf 2:67791cb581e3 27 pressed=false;
domenicf 2:67791cb581e3 28 return true;
domenicf 2:67791cb581e3 29 }
domenicf 2:67791cb581e3 30 return false;
domenicf 2:67791cb581e3 31 }
domenicf 2:67791cb581e3 32
domenicf 2:67791cb581e3 33 void ST_Ein (void)
domenicf 2:67791cb581e3 34 {
domenicf 2:67791cb581e3 35
domenicf 2:67791cb581e3 36 printf("State: EIN");
domenicf 2:67791cb581e3 37
domenicf 2:67791cb581e3 38 while(true)
domenicf 2:67791cb581e3 39 {
domenicf 2:67791cb581e3 40 Leds = LedWert;
domenicf 1:05ce05a0f947 41
domenicf 2:67791cb581e3 42 if(CheckFlag())
domenicf 2:67791cb581e3 43 {
domenicf 2:67791cb581e3 44 btnCount++;
domenicf 2:67791cb581e3 45 if(btnCount >= 3)
domenicf 2:67791cb581e3 46 {
domenicf 2:67791cb581e3 47 btnCount = 0;
domenicf 2:67791cb581e3 48 LedWert++;
domenicf 2:67791cb581e3 49 state = ST_AUS;
domenicf 2:67791cb581e3 50
domenicf 2:67791cb581e3 51
domenicf 2:67791cb581e3 52 return;
domenicf 2:67791cb581e3 53 }
domenicf 2:67791cb581e3 54 }
domenicf 2:67791cb581e3 55 }
domenicf 2:67791cb581e3 56 }
domenicf 2:67791cb581e3 57 void ST_Aus (void)
domenicf 2:67791cb581e3 58 {
domenicf 2:67791cb581e3 59 printf("State: AUS");
domenicf 2:67791cb581e3 60 while(true) {
domenicf 2:67791cb581e3 61 Leds = 0;
domenicf 2:67791cb581e3 62 if(CheckFlag())
domenicf 2:67791cb581e3 63 {
domenicf 2:67791cb581e3 64 state = ST_EIN;
domenicf 2:67791cb581e3 65 return;
domenicf 2:67791cb581e3 66 }
domenicf 2:67791cb581e3 67 }
domenicf 2:67791cb581e3 68 }
domenicf 2:67791cb581e3 69 void ST_Error (void)
domenicf 2:67791cb581e3 70 {
domenicf 2:67791cb581e3 71 printf("State: ERROR!!!");
domenicf 2:67791cb581e3 72 return;
domenicf 2:67791cb581e3 73 }
domenicf 2:67791cb581e3 74
domenicf 2:67791cb581e3 75 void stateMachine()
domenicf 2:67791cb581e3 76 {
domenicf 2:67791cb581e3 77 switch (state)
domenicf 2:67791cb581e3 78 {
domenicf 2:67791cb581e3 79 case ST_EIN: ST_Ein();
domenicf 2:67791cb581e3 80 break;
domenicf 2:67791cb581e3 81 case ST_AUS: ST_Aus();
domenicf 2:67791cb581e3 82 break;
domenicf 2:67791cb581e3 83 default: ST_Error();
domenicf 2:67791cb581e3 84 break;
domenicf 2:67791cb581e3 85 }
domenicf 2:67791cb581e3 86 }
domenicf 2:67791cb581e3 87
domenicf 2:67791cb581e3 88 int main()
domenicf 2:67791cb581e3 89 {
domenicf 2:67791cb581e3 90 SW1.rise(&rise);
domenicf 2:67791cb581e3 91 Leds = 15;
domenicf 2:67791cb581e3 92 wait_ms(500);
domenicf 1:05ce05a0f947 93
domenicf 2:67791cb581e3 94 state = ST_EIN;
domenicf 2:67791cb581e3 95 while(true)
domenicf 2:67791cb581e3 96 {
domenicf 2:67791cb581e3 97 stateMachine();
domenicf 2:67791cb581e3 98 }
domenicf 2:67791cb581e3 99 }
domenicf 2:67791cb581e3 100 ///////// Funktioniert bei mir nicht, gibt immer wieder eine fehlermeldung vom SuperMain aus!
domenicf 2:67791cb581e3 101 /*
domenicf 0:2958c9849cb4 102 class IsAnEvent : public InterruptIn {
domenicf 0:2958c9849cb4 103 volatile int16_t _pressed;
domenicf 0:2958c9849cb4 104 void _RisingISR();
domenicf 0:2958c9849cb4 105 public:
domenicf 2:67791cb581e3 106 IsAnEvent() : InterruptIn(p14) {};
domenicf 0:2958c9849cb4 107 IsAnEvent(PinName pin) : InterruptIn(pin) {
domenicf 0:2958c9849cb4 108 rise(callback(this, &IsAnEvent::_RisingISR));
domenicf 0:2958c9849cb4 109 _pressed=0;
domenicf 0:2958c9849cb4 110 };
domenicf 0:2958c9849cb4 111 int CheckFlag();
domenicf 0:2958c9849cb4 112 void InitIsr();
domenicf 0:2958c9849cb4 113 };
domenicf 0:2958c9849cb4 114
domenicf 0:2958c9849cb4 115 void IsAnEvent::InitIsr() {
domenicf 0:2958c9849cb4 116 rise(callback(this, &IsAnEvent::_RisingISR));
domenicf 0:2958c9849cb4 117 }
domenicf 0:2958c9849cb4 118
domenicf 0:2958c9849cb4 119 void IsAnEvent::_RisingISR() {
domenicf 0:2958c9849cb4 120 wait_ms(50);
domenicf 0:2958c9849cb4 121 if( read() )
domenicf 0:2958c9849cb4 122 _pressed = true;
domenicf 0:2958c9849cb4 123 }
domenicf 0:2958c9849cb4 124 int IsAnEvent::CheckFlag() {
domenicf 0:2958c9849cb4 125 if( _pressed ) {
domenicf 0:2958c9849cb4 126 _pressed = false;
domenicf 0:2958c9849cb4 127 return 1;
domenicf 0:2958c9849cb4 128 }
domenicf 0:2958c9849cb4 129 return 0;
domenicf 1:05ce05a0f947 130 }
domenicf 2:67791cb581e3 131 */