7ABELI_Projekt

Dependencies:   mbed

Committer:
Wizo
Date:
Thu Nov 29 17:17:23 2018 +0000
Revision:
0:b69a47c4639b
7ABELI_Projekt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wizo 0:b69a47c4639b 1 #include "mbed.h"
Wizo 0:b69a47c4639b 2 #include "C12832.h"
Wizo 0:b69a47c4639b 3
Wizo 0:b69a47c4639b 4
Wizo 0:b69a47c4639b 5 // LEDS
Wizo 0:b69a47c4639b 6 DigitalOut Led1(LED1, 0);
Wizo 0:b69a47c4639b 7 DigitalOut Led2(LED2, 0);
Wizo 0:b69a47c4639b 8 DigitalOut Led3(LED3, 0);
Wizo 0:b69a47c4639b 9 DigitalOut Led4(LED4, 0);
Wizo 0:b69a47c4639b 10
Wizo 0:b69a47c4639b 11 // Joystick
Wizo 0:b69a47c4639b 12 InterruptIn Sw1(p14); // CENTER
Wizo 0:b69a47c4639b 13
Wizo 0:b69a47c4639b 14 // Prototyping
Wizo 0:b69a47c4639b 15 void StateMachine();
Wizo 0:b69a47c4639b 16 //void ST_Error (void);
Wizo 0:b69a47c4639b 17 void ST_EIN (void);
Wizo 0:b69a47c4639b 18 void ST_AUS (void);
Wizo 0:b69a47c4639b 19 //void rise(void);
Wizo 0:b69a47c4639b 20 void Sw1Rise(void);
Wizo 0:b69a47c4639b 21 //bool CheckFlag() ;
Wizo 0:b69a47c4639b 22 bool CheckSw1(void);
Wizo 0:b69a47c4639b 23 void Time (void);
Wizo 0:b69a47c4639b 24 void TimeOut(void);
Wizo 0:b69a47c4639b 25 void Flip (void);
Wizo 0:b69a47c4639b 26 void TempOut (void);
Wizo 0:b69a47c4639b 27 void TimeOutError(void);
Wizo 0:b69a47c4639b 28 void ErrorBlinken(void);
Wizo 0:b69a47c4639b 29 void TimeOver(void);
Wizo 0:b69a47c4639b 30
Wizo 0:b69a47c4639b 31 //bool pressed = false;
Wizo 0:b69a47c4639b 32 bool volatile Sw1Pressed;
Wizo 0:b69a47c4639b 33
Wizo 0:b69a47c4639b 34 //***** VARIABLEN ******
Wizo 0:b69a47c4639b 35
Wizo 0:b69a47c4639b 36 enum State {ST_AUS, ST_EIN, ST_Error};
Wizo 0:b69a47c4639b 37 //State state;
Wizo 0:b69a47c4639b 38 State volatile state;
Wizo 0:b69a47c4639b 39 Timer getTime; //Timer-Schnittstelle dient zum Erstellen, Starten, Stoppen und Lesen eines Timers
Wizo 0:b69a47c4639b 40 Ticker TickFlip;//für blinken der LED //wiederkehrenden Interrupt
Wizo 0:b69a47c4639b 41 Timeout resetTime;//Die Timeout-Schnittstelle wird verwendet, um einen Interrupt
Wizo 0:b69a47c4639b 42 //einzurichten, um eine Funktion nach einer bestimmten Verzögerung aufzurufen.
Wizo 0:b69a47c4639b 43
Wizo 0:b69a47c4639b 44 volatile int counter; // Volatile, damit es nicht auf unterschiedlichen Cores ausgeführt wird
Wizo 0:b69a47c4639b 45
Wizo 0:b69a47c4639b 46
Wizo 0:b69a47c4639b 47
Wizo 0:b69a47c4639b 48 class IsAnEvent : public InterruptIn {
Wizo 0:b69a47c4639b 49 volatile int16_t _pressed;
Wizo 0:b69a47c4639b 50 void _RisingISR();
Wizo 0:b69a47c4639b 51 public:
Wizo 0:b69a47c4639b 52 IsAnEvent() : InterruptIn(p15) {};
Wizo 0:b69a47c4639b 53 IsAnEvent(PinName pin) : InterruptIn(pin) {
Wizo 0:b69a47c4639b 54 rise(callback(this, &IsAnEvent::_RisingISR));
Wizo 0:b69a47c4639b 55 _pressed=0;
Wizo 0:b69a47c4639b 56 };
Wizo 0:b69a47c4639b 57 int CheckFlag();
Wizo 0:b69a47c4639b 58 void InitIsr();
Wizo 0:b69a47c4639b 59 };
Wizo 0:b69a47c4639b 60
Wizo 0:b69a47c4639b 61 int main()
Wizo 0:b69a47c4639b 62 {
Wizo 0:b69a47c4639b 63
Wizo 0:b69a47c4639b 64 Sw1.rise(&Sw1Rise); //.fall(&fall)
Wizo 0:b69a47c4639b 65 state = ST_AUS;
Wizo 0:b69a47c4639b 66 Sw1Pressed = 0;
Wizo 0:b69a47c4639b 67 Led1 = 0;
Wizo 0:b69a47c4639b 68 Led2 = 0;
Wizo 0:b69a47c4639b 69 Led3 = 0;
Wizo 0:b69a47c4639b 70 Led4 = 0;
Wizo 0:b69a47c4639b 71 counter=0;
Wizo 0:b69a47c4639b 72
Wizo 0:b69a47c4639b 73 while(1)
Wizo 0:b69a47c4639b 74 {
Wizo 0:b69a47c4639b 75
Wizo 0:b69a47c4639b 76 StateMachine();
Wizo 0:b69a47c4639b 77 }
Wizo 0:b69a47c4639b 78 }
Wizo 0:b69a47c4639b 79
Wizo 0:b69a47c4639b 80 void IsAnEvent::InitIsr() {
Wizo 0:b69a47c4639b 81 rise(callback(this, &IsAnEvent::_RisingISR));
Wizo 0:b69a47c4639b 82 }
Wizo 0:b69a47c4639b 83
Wizo 0:b69a47c4639b 84 void IsAnEvent::_RisingISR() {
Wizo 0:b69a47c4639b 85 wait_ms(50);
Wizo 0:b69a47c4639b 86 if( read() )
Wizo 0:b69a47c4639b 87 _pressed = true;
Wizo 0:b69a47c4639b 88 }
Wizo 0:b69a47c4639b 89 int IsAnEvent::CheckFlag() {
Wizo 0:b69a47c4639b 90 if( _pressed ) {
Wizo 0:b69a47c4639b 91 _pressed = false;
Wizo 0:b69a47c4639b 92 return 1;
Wizo 0:b69a47c4639b 93 }
Wizo 0:b69a47c4639b 94 return 0;
Wizo 0:b69a47c4639b 95 }
Wizo 0:b69a47c4639b 96
Wizo 0:b69a47c4639b 97
Wizo 0:b69a47c4639b 98 void Sw1Rise(void) {
Wizo 0:b69a47c4639b 99 if(state == ST_EIN || state == ST_AUS) {
Wizo 0:b69a47c4639b 100 // wenn Taste getrückt wird wechsel je welcher status
Wizo 0:b69a47c4639b 101 Sw1Pressed = true;// Umschalten auf WAHR, es wurde gedrückt
Wizo 0:b69a47c4639b 102 wait_ms(200);
Wizo 0:b69a47c4639b 103 }// Entprellung der Taste, bei mir 100ms da der Taster furchtbar prellt...
Wizo 0:b69a47c4639b 104 }
Wizo 0:b69a47c4639b 105
Wizo 0:b69a47c4639b 106
Wizo 0:b69a47c4639b 107 void StateMachine() //mit den ganzen möglichen Statuse
Wizo 0:b69a47c4639b 108 {
Wizo 0:b69a47c4639b 109 switch (state)
Wizo 0:b69a47c4639b 110 {
Wizo 0:b69a47c4639b 111 case ST_AUS: Aus() ;break;
Wizo 0:b69a47c4639b 112 case ST_EIN: Ein() ;break;
Wizo 0:b69a47c4639b 113 case ST_TimeOut: TimeOut() ;break;
Wizo 0:b69a47c4639b 114 case ST_TempOut: TempOut() ;break;
Wizo 0:b69a47c4639b 115 case ST_Error: TimeOver() ;break;
Wizo 0:b69a47c4639b 116
Wizo 0:b69a47c4639b 117 }
Wizo 0:b69a47c4639b 118 }