Erster Test der Event-Klasse

Dependencies:   mbed

4AHEL Event Klasse

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?

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 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 }