7ABELI_Test

Dependencies:   mbed

Committer:
PDanner
Date:
Thu Nov 29 18:42:11 2018 +0000
Revision:
1:515886a9f0b2
Parent:
0:6c449413c99f
7ABELI_Test; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
PDanner 0:6c449413c99f 1 #include "mbed.h"
PDanner 0:6c449413c99f 2
PDanner 0:6c449413c99f 3 BusOut leds(LED1, LED2, LED3, LED4);
PDanner 1:515886a9f0b2 4 InterruptIn sw1(p14); // Joy Stick Center
PDanner 1:515886a9f0b2 5 enum State {ST_START, ST_EIN, ST_AUS, ST_ENDE};
PDanner 1:515886a9f0b2 6 State state;
PDanner 1:515886a9f0b2 7 int btnCount = 0;
PDanner 0:6c449413c99f 8
PDanner 0:6c449413c99f 9 class IsAnEvent : public InterruptIn {
PDanner 0:6c449413c99f 10 volatile int16_t _pressed;
PDanner 0:6c449413c99f 11 void _RisingISR();
PDanner 0:6c449413c99f 12 public:
PDanner 0:6c449413c99f 13 IsAnEvent() : InterruptIn(p15) {};
PDanner 0:6c449413c99f 14 IsAnEvent(PinName pin) : InterruptIn(pin) {
PDanner 0:6c449413c99f 15 rise(callback(this, &IsAnEvent::_RisingISR));
PDanner 0:6c449413c99f 16 _pressed=0;
PDanner 0:6c449413c99f 17 };
PDanner 0:6c449413c99f 18 int CheckFlag();
PDanner 0:6c449413c99f 19 void InitIsr();
PDanner 0:6c449413c99f 20 };
PDanner 0:6c449413c99f 21
PDanner 0:6c449413c99f 22 void IsAnEvent::InitIsr() {
PDanner 0:6c449413c99f 23 rise(callback(this, &IsAnEvent::_RisingISR));
PDanner 0:6c449413c99f 24 }
PDanner 0:6c449413c99f 25
PDanner 0:6c449413c99f 26 void IsAnEvent::_RisingISR() {
PDanner 0:6c449413c99f 27 wait_ms(50);
PDanner 0:6c449413c99f 28 if( read() )
PDanner 0:6c449413c99f 29 _pressed = true;
PDanner 0:6c449413c99f 30 }
PDanner 0:6c449413c99f 31 int IsAnEvent::CheckFlag() {
PDanner 0:6c449413c99f 32 if( _pressed ) {
PDanner 0:6c449413c99f 33 _pressed = false;
PDanner 0:6c449413c99f 34 return 1;
PDanner 0:6c449413c99f 35 }
PDanner 0:6c449413c99f 36 return 0;
PDanner 0:6c449413c99f 37 }
PDanner 0:6c449413c99f 38
PDanner 1:515886a9f0b2 39 // ----------------- Stm Klasse ------------------
PDanner 0:6c449413c99f 40
PDanner 0:6c449413c99f 41 class Stm {
PDanner 0:6c449413c99f 42 public:
PDanner 0:6c449413c99f 43 Stm() { state=ST_AUS; }
PDanner 0:6c449413c99f 44
PDanner 1:515886a9f0b2 45 void Start();
PDanner 0:6c449413c99f 46 void LedOn();
PDanner 0:6c449413c99f 47 void LedOff();
PDanner 1:515886a9f0b2 48 void Ende();
PDanner 0:6c449413c99f 49 };
PDanner 0:6c449413c99f 50
PDanner 1:515886a9f0b2 51 void Stm::Start(){
PDanner 1:515886a9f0b2 52 leds = 15;
PDanner 1:515886a9f0b2 53 wait_ms(500);
PDanner 1:515886a9f0b2 54 leds = 0;
PDanner 1:515886a9f0b2 55 }
PDanner 1:515886a9f0b2 56
PDanner 0:6c449413c99f 57 void Stm::LedOn(){
PDanner 0:6c449413c99f 58 while(true) {
PDanner 0:6c449413c99f 59 if(sw1.CheckFlag()) {
PDanner 0:6c449413c99f 60 state = ST_AUS;
PDanner 0:6c449413c99f 61 return;
PDanner 0:6c449413c99f 62 }
PDanner 0:6c449413c99f 63 }
PDanner 0:6c449413c99f 64 }
PDanner 0:6c449413c99f 65
PDanner 0:6c449413c99f 66 void Stm::LedOff(){
PDanner 0:6c449413c99f 67 while(true) {
PDanner 0:6c449413c99f 68 leds = 0;
PDanner 0:6c449413c99f 69 if(sw1.CheckFlag()) {
PDanner 0:6c449413c99f 70 state = ST_EIN;
PDanner 0:6c449413c99f 71 return;
PDanner 0:6c449413c99f 72 }
PDanner 0:6c449413c99f 73 }
PDanner 1:515886a9f0b2 74 }
PDanner 1:515886a9f0b2 75
PDanner 1:515886a9f0b2 76 Stm stm;
PDanner 1:515886a9f0b2 77
PDanner 1:515886a9f0b2 78 void stateMachine()
PDanner 1:515886a9f0b2 79 {
PDanner 1:515886a9f0b2 80 switch (stm.state)
PDanner 1:515886a9f0b2 81 {
PDanner 1:515886a9f0b2 82 case ST_START: stm.Start();
PDanner 1:515886a9f0b2 83 break;
PDanner 1:515886a9f0b2 84 case ST_EIN: stm.Ein();
PDanner 1:515886a9f0b2 85 break;
PDanner 1:515886a9f0b2 86 case ST_AUS: stm.Aus();
PDanner 1:515886a9f0b2 87 break;
PDanner 1:515886a9f0b2 88 case STM_ENDE: stm.Ende();
PDanner 1:515886a9f0b2 89 default: stm.Error();
PDanner 1:515886a9f0b2 90 break;
PDanner 1:515886a9f0b2 91 }
PDanner 1:515886a9f0b2 92 }
PDanner 1:515886a9f0b2 93
PDanner 1:515886a9f0b2 94 int main()
PDanner 1:515886a9f0b2 95 {
PDanner 1:515886a9f0b2 96 printf("Hello STM class\n");
PDanner 1:515886a9f0b2 97 sw1.InitIsr();
PDanner 1:515886a9f0b2 98
PDanner 1:515886a9f0b2 99 while(1) {
PDanner 1:515886a9f0b2 100 stateMachine();
PDanner 1:515886a9f0b2 101 }
PDanner 0:6c449413c99f 102 }