Philipp Danner
/
STM_Leds
7ABELI_Test
main.cpp@1:515886a9f0b2, 2018-11-29 (annotated)
- 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?
User | Revision | Line number | New 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 | } |