Erster Test der Event-Klasse

Dependencies:   mbed

4AHEL Event Klasse

Committer:
bulmecisco
Date:
Thu May 19 11:17:31 2016 +0000
Revision:
2:3ace1192c5aa
Parent:
1:2dbe3e9c662e
Lichtschalter Ein/Aus mit Kommentaren

Who changed what in which revision?

UserRevisionLine numberNew 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 2:3ace1192c5aa 84 void Stm::Ein()
bulmecisco 2:3ace1192c5aa 85 {
bulmecisco 2:3ace1192c5aa 86 // entry
bulmecisco 2:3ace1192c5aa 87 // do
bulmecisco 2:3ace1192c5aa 88 while(true){
bulmecisco 2:3ace1192c5aa 89 rgb.LedOn();
bulmecisco 2:3ace1192c5aa 90 // exit
bulmecisco 1:2dbe3e9c662e 91 if(sw1.CheckFlag()) {
bulmecisco 1:2dbe3e9c662e 92 state = ST_AUS;
bulmecisco 1:2dbe3e9c662e 93 return;
bulmecisco 1:2dbe3e9c662e 94 }
bulmecisco 1:2dbe3e9c662e 95 }
bulmecisco 1:2dbe3e9c662e 96 }
bulmecisco 2:3ace1192c5aa 97
bulmecisco 2:3ace1192c5aa 98 void Stm::Aus()
bulmecisco 2:3ace1192c5aa 99 {
bulmecisco 2:3ace1192c5aa 100 // entry
bulmecisco 2:3ace1192c5aa 101 // do
bulmecisco 2:3ace1192c5aa 102 while(true){
bulmecisco 1:2dbe3e9c662e 103 rgb.LedOff();
bulmecisco 2:3ace1192c5aa 104 // exit
bulmecisco 1:2dbe3e9c662e 105 if(sw1.CheckFlag()) {
bulmecisco 1:2dbe3e9c662e 106 state = ST_EIN;
bulmecisco 1:2dbe3e9c662e 107 return;
bulmecisco 1:2dbe3e9c662e 108 }
bulmecisco 1:2dbe3e9c662e 109 }
bulmecisco 1:2dbe3e9c662e 110 }
bulmecisco 1:2dbe3e9c662e 111
bulmecisco 0:518dcb1bc8ad 112 //--------------------------- Hauptprogramm ------------------------
bulmecisco 0:518dcb1bc8ad 113
bulmecisco 1:2dbe3e9c662e 114 Stm stm;
bulmecisco 0:518dcb1bc8ad 115
bulmecisco 1:2dbe3e9c662e 116 void stateMachine()
bulmecisco 1:2dbe3e9c662e 117 {
bulmecisco 1:2dbe3e9c662e 118 switch( stm.state )
bulmecisco 1:2dbe3e9c662e 119 {
bulmecisco 1:2dbe3e9c662e 120 case ST_EIN: stm.Ein();
bulmecisco 1:2dbe3e9c662e 121 break;
bulmecisco 1:2dbe3e9c662e 122 case ST_AUS: stm.Aus();
bulmecisco 1:2dbe3e9c662e 123 break;
bulmecisco 1:2dbe3e9c662e 124 }
bulmecisco 1:2dbe3e9c662e 125 }
bulmecisco 1:2dbe3e9c662e 126
bulmecisco 0:518dcb1bc8ad 127 int main()
bulmecisco 0:518dcb1bc8ad 128 {
bulmecisco 0:518dcb1bc8ad 129 blue=green=1;
bulmecisco 1:2dbe3e9c662e 130
bulmecisco 0:518dcb1bc8ad 131 while(true) {
bulmecisco 1:2dbe3e9c662e 132 stateMachine();
bulmecisco 0:518dcb1bc8ad 133 }
bulmecisco 0:518dcb1bc8ad 134 }