Dr. Pucher
/
4AHEL_STM_Lichtschalter
Erster Test der Event-Klasse
4AHEL Event Klasse
main.cpp@1:2dbe3e9c662e, 2016-05-19 (annotated)
- Committer:
- bulmecisco
- Date:
- Thu May 19 11:08:20 2016 +0000
- Revision:
- 1:2dbe3e9c662e
- Parent:
- 0:518dcb1bc8ad
- Child:
- 2:3ace1192c5aa
Version Ein/Aus
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bulmecisco | 0:518dcb1bc8ad | 1 | /* State Machine Implementierung für einen Lichtschalter |
bulmecisco | 0:518dcb1bc8ad | 2 | simuliert durch den Rot-Anteil der RGB-Led und dem Taster sw1 |
bulmecisco | 0:518dcb1bc8ad | 3 | siehe: https://developer.mbed.org/users/fpucher/code/HIM0Board/wiki/STM-Schalter |
bulmecisco | 0:518dcb1bc8ad | 4 | */ |
bulmecisco | 0:518dcb1bc8ad | 5 | |
bulmecisco | 0:518dcb1bc8ad | 6 | #include "mbed.h" |
bulmecisco | 0:518dcb1bc8ad | 7 | |
bulmecisco | 0:518dcb1bc8ad | 8 | PwmOut red(p36); |
bulmecisco | 0:518dcb1bc8ad | 9 | PwmOut green(p5); |
bulmecisco | 0:518dcb1bc8ad | 10 | PwmOut blue(p34); |
bulmecisco | 0:518dcb1bc8ad | 11 | DigitalOut led1(LED1); |
bulmecisco | 0:518dcb1bc8ad | 12 | DigitalOut led2(LED2); |
bulmecisco | 0:518dcb1bc8ad | 13 | DigitalOut led3(LED3); |
bulmecisco | 0:518dcb1bc8ad | 14 | DigitalOut led4(LED4); |
bulmecisco | 0:518dcb1bc8ad | 15 | DigitalIn sw2(P0_10); |
bulmecisco | 0:518dcb1bc8ad | 16 | DigitalIn sw3(P0_23); |
bulmecisco | 0:518dcb1bc8ad | 17 | DigitalIn sw4(P1_16); |
bulmecisco | 0:518dcb1bc8ad | 18 | |
bulmecisco | 1:2dbe3e9c662e | 19 | // States |
bulmecisco | 1:2dbe3e9c662e | 20 | const int ST_EIN = 1; |
bulmecisco | 1:2dbe3e9c662e | 21 | const int ST_AUS = 2; |
bulmecisco | 1:2dbe3e9c662e | 22 | |
bulmecisco | 0:518dcb1bc8ad | 23 | // ---------------------- Event Klasse ------------------------ |
bulmecisco | 0:518dcb1bc8ad | 24 | class Event |
bulmecisco | 0:518dcb1bc8ad | 25 | { |
bulmecisco | 0:518dcb1bc8ad | 26 | bool _pressed; |
bulmecisco | 0:518dcb1bc8ad | 27 | InterruptIn _isr; |
bulmecisco | 0:518dcb1bc8ad | 28 | public: |
bulmecisco | 0:518dcb1bc8ad | 29 | Event( PinName pin ) : _isr(pin) { |
bulmecisco | 0:518dcb1bc8ad | 30 | _pressed = false; |
bulmecisco | 0:518dcb1bc8ad | 31 | _isr.rise(this, &Event::_RisingIsr); |
bulmecisco | 0:518dcb1bc8ad | 32 | } |
bulmecisco | 0:518dcb1bc8ad | 33 | |
bulmecisco | 0:518dcb1bc8ad | 34 | void _RisingIsr() { |
bulmecisco | 0:518dcb1bc8ad | 35 | if( _isr.read()) |
bulmecisco | 0:518dcb1bc8ad | 36 | _pressed = true; |
bulmecisco | 0:518dcb1bc8ad | 37 | } |
bulmecisco | 0:518dcb1bc8ad | 38 | |
bulmecisco | 0:518dcb1bc8ad | 39 | bool CheckFlag() { |
bulmecisco | 0:518dcb1bc8ad | 40 | if( _pressed ) { |
bulmecisco | 0:518dcb1bc8ad | 41 | _pressed = false; |
bulmecisco | 0:518dcb1bc8ad | 42 | return true; |
bulmecisco | 0:518dcb1bc8ad | 43 | } |
bulmecisco | 0:518dcb1bc8ad | 44 | return false; |
bulmecisco | 0:518dcb1bc8ad | 45 | } |
bulmecisco | 0:518dcb1bc8ad | 46 | |
bulmecisco | 0:518dcb1bc8ad | 47 | }; |
bulmecisco | 0:518dcb1bc8ad | 48 | |
bulmecisco | 0:518dcb1bc8ad | 49 | class Rgb |
bulmecisco | 0:518dcb1bc8ad | 50 | { |
bulmecisco | 0:518dcb1bc8ad | 51 | PwmOut _red; |
bulmecisco | 0:518dcb1bc8ad | 52 | public: |
bulmecisco | 0:518dcb1bc8ad | 53 | Rgb( PinName red ) : _red(red) {} |
bulmecisco | 0:518dcb1bc8ad | 54 | void LedOn() { |
bulmecisco | 0:518dcb1bc8ad | 55 | _red = 0; |
bulmecisco | 0:518dcb1bc8ad | 56 | } |
bulmecisco | 0:518dcb1bc8ad | 57 | |
bulmecisco | 0:518dcb1bc8ad | 58 | void Dimm() { |
bulmecisco | 0:518dcb1bc8ad | 59 | //_red = 0; |
bulmecisco | 0:518dcb1bc8ad | 60 | for(float i=0.0; i <= 1.0; i+= 0.1) { |
bulmecisco | 0:518dcb1bc8ad | 61 | _red = i; |
bulmecisco | 0:518dcb1bc8ad | 62 | wait_ms(200); |
bulmecisco | 0:518dcb1bc8ad | 63 | } |
bulmecisco | 0:518dcb1bc8ad | 64 | } |
bulmecisco | 0:518dcb1bc8ad | 65 | |
bulmecisco | 0:518dcb1bc8ad | 66 | void LedOff() { |
bulmecisco | 0:518dcb1bc8ad | 67 | _red = 1; |
bulmecisco | 0:518dcb1bc8ad | 68 | } |
bulmecisco | 0:518dcb1bc8ad | 69 | }; |
bulmecisco | 1:2dbe3e9c662e | 70 | // ----------------------- STM Klasse --------------------------- |
bulmecisco | 1:2dbe3e9c662e | 71 | |
bulmecisco | 1:2dbe3e9c662e | 72 | Event sw1(P0_15); |
bulmecisco | 1:2dbe3e9c662e | 73 | Rgb rgb(p36); |
bulmecisco | 1:2dbe3e9c662e | 74 | |
bulmecisco | 1:2dbe3e9c662e | 75 | class Stm { |
bulmecisco | 1:2dbe3e9c662e | 76 | public: |
bulmecisco | 1:2dbe3e9c662e | 77 | Stm() { state = ST_AUS; } |
bulmecisco | 1:2dbe3e9c662e | 78 | void Ein(); |
bulmecisco | 1:2dbe3e9c662e | 79 | void Aus(); |
bulmecisco | 1:2dbe3e9c662e | 80 | |
bulmecisco | 1:2dbe3e9c662e | 81 | int state; |
bulmecisco | 1:2dbe3e9c662e | 82 | }; |
bulmecisco | 1:2dbe3e9c662e | 83 | |
bulmecisco | 1:2dbe3e9c662e | 84 | void Stm::Ein(){ |
bulmecisco | 1:2dbe3e9c662e | 85 | while(true) { |
bulmecisco | 1:2dbe3e9c662e | 86 | rgb.LedOn(); |
bulmecisco | 1:2dbe3e9c662e | 87 | if(sw1.CheckFlag()) { |
bulmecisco | 1:2dbe3e9c662e | 88 | state = ST_AUS; |
bulmecisco | 1:2dbe3e9c662e | 89 | return; |
bulmecisco | 1:2dbe3e9c662e | 90 | } |
bulmecisco | 1:2dbe3e9c662e | 91 | } |
bulmecisco | 1:2dbe3e9c662e | 92 | } |
bulmecisco | 1:2dbe3e9c662e | 93 | |
bulmecisco | 1:2dbe3e9c662e | 94 | void Stm::Aus(){ |
bulmecisco | 1:2dbe3e9c662e | 95 | while(true) { |
bulmecisco | 1:2dbe3e9c662e | 96 | rgb.LedOff(); |
bulmecisco | 1:2dbe3e9c662e | 97 | if(sw1.CheckFlag()) { |
bulmecisco | 1:2dbe3e9c662e | 98 | state = ST_EIN; |
bulmecisco | 1:2dbe3e9c662e | 99 | return; |
bulmecisco | 1:2dbe3e9c662e | 100 | } |
bulmecisco | 1:2dbe3e9c662e | 101 | } |
bulmecisco | 1:2dbe3e9c662e | 102 | } |
bulmecisco | 1:2dbe3e9c662e | 103 | |
bulmecisco | 0:518dcb1bc8ad | 104 | //--------------------------- Hauptprogramm ------------------------ |
bulmecisco | 0:518dcb1bc8ad | 105 | |
bulmecisco | 1:2dbe3e9c662e | 106 | Stm stm; |
bulmecisco | 0:518dcb1bc8ad | 107 | |
bulmecisco | 1:2dbe3e9c662e | 108 | void stateMachine() |
bulmecisco | 1:2dbe3e9c662e | 109 | { |
bulmecisco | 1:2dbe3e9c662e | 110 | switch( stm.state ) |
bulmecisco | 1:2dbe3e9c662e | 111 | { |
bulmecisco | 1:2dbe3e9c662e | 112 | case ST_EIN: stm.Ein(); |
bulmecisco | 1:2dbe3e9c662e | 113 | break; |
bulmecisco | 1:2dbe3e9c662e | 114 | case ST_AUS: stm.Aus(); |
bulmecisco | 1:2dbe3e9c662e | 115 | break; |
bulmecisco | 1:2dbe3e9c662e | 116 | } |
bulmecisco | 1:2dbe3e9c662e | 117 | } |
bulmecisco | 1:2dbe3e9c662e | 118 | |
bulmecisco | 0:518dcb1bc8ad | 119 | int main() |
bulmecisco | 0:518dcb1bc8ad | 120 | { |
bulmecisco | 0:518dcb1bc8ad | 121 | blue=green=1; |
bulmecisco | 1:2dbe3e9c662e | 122 | |
bulmecisco | 0:518dcb1bc8ad | 123 | while(true) { |
bulmecisco | 1:2dbe3e9c662e | 124 | stateMachine(); |
bulmecisco | 0:518dcb1bc8ad | 125 | } |
bulmecisco | 0:518dcb1bc8ad | 126 | } |