Dr. Pucher
/
4AHEL_STM_Lichtschalter
Erster Test der Event-Klasse
4AHEL Event Klasse
main.cpp
- Committer:
- bulmecisco
- Date:
- 2016-05-19
- Revision:
- 2:3ace1192c5aa
- Parent:
- 1:2dbe3e9c662e
File content as of revision 2:3ace1192c5aa:
/* State Machine Implementierung für einen Lichtschalter simuliert durch den Rot-Anteil der RGB-Led und dem Taster sw1 siehe: https://developer.mbed.org/users/fpucher/code/HIM0Board/wiki/STM-Schalter */ #include "mbed.h" PwmOut red(p36); PwmOut green(p5); PwmOut blue(p34); DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); DigitalIn sw2(P0_10); DigitalIn sw3(P0_23); DigitalIn sw4(P1_16); // States const int ST_EIN = 1; const int ST_AUS = 2; // ---------------------- Event Klasse ------------------------ class Event { bool _pressed; InterruptIn _isr; public: Event( PinName pin ) : _isr(pin) { _pressed = false; _isr.rise(this, &Event::_RisingIsr); } void _RisingIsr() { if( _isr.read()) _pressed = true; } bool CheckFlag() { if( _pressed ) { _pressed = false; return true; } return false; } }; class Rgb { PwmOut _red; public: Rgb( PinName red ) : _red(red) {} void LedOn() { _red = 0; } void Dimm() { //_red = 0; for(float i=0.0; i <= 1.0; i+= 0.1) { _red = i; wait_ms(200); } } void LedOff() { _red = 1; } }; // ----------------------- STM Klasse --------------------------- Event sw1(P0_15); Rgb rgb(p36); class Stm { public: Stm() { state = ST_AUS; } void Ein(); void Aus(); int state; }; void Stm::Ein() { // entry // do while(true){ rgb.LedOn(); // exit if(sw1.CheckFlag()) { state = ST_AUS; return; } } } void Stm::Aus() { // entry // do while(true){ rgb.LedOff(); // exit if(sw1.CheckFlag()) { state = ST_EIN; return; } } } //--------------------------- Hauptprogramm ------------------------ Stm stm; void stateMachine() { switch( stm.state ) { case ST_EIN: stm.Ein(); break; case ST_AUS: stm.Aus(); break; } } int main() { blue=green=1; while(true) { stateMachine(); } }