lalalala

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "BtnEventM0.h"
00003 
00004 //        LSB                                                      MSB
00005 //        2^0   2^1   2^2                                          2^11
00006 BusOut lb(P1_7,P1_6,P1_4,P1_3,P1_1,P1_0,LED4,LED3,LED2,LED1);
00007 //        D20   D19   D18  D17  D16  D15  D14  D13  D4   D3   D2   D1
00008 
00009 // Zustandsangebe
00010 BusOut stLED(P1_13,P1_12);
00011 
00012 //        Sw3    Sw4
00013 BtnEventM0 sw3(P0_23), sw4(P1_16); //sw4 ist Fußgängerknopf
00014 
00015 Serial pc (USBTX, USBRX);
00016 
00017 class Ampel {
00018     public:
00019         void Init();
00020         void rot_func();
00021         void gelb_func();
00022         void gruen_func();
00023         void gruen_blink_func();
00024     private:
00025         void rot_act();
00026         void gelb_act();
00027         void gruen_act();
00028         void gruen_blink_act();
00029     public:
00030         Timer t1, t2, t3;
00031         int state;
00032 };
00033 
00034 const int st_rot = 1;
00035 const int st_gelb = 2;
00036 const int st_gruen = 3;
00037 const int st_gruen_blink = 4;
00038 
00039 Ampel amp;
00040 
00041 main() {
00042     while(1) {
00043         if(amp.state == 1)
00044             amp.rot_func();
00045         if(amp.state == 2)
00046             amp.gelb_func();
00047         if(amp.state == 3)
00048             amp.gruen_func();
00049         if(amp.state == 4)
00050             amp.gruen_blink_func();
00051     }
00052 }
00053 
00054 void Ampel::Init() {
00055     t1.start();
00056     t2.start();
00057     t3.start();
00058     
00059     state = st_rot;
00060 }
00061 
00062 void Ampel::rot_func() {
00063     stLED = 1;
00064     
00065     while(1) {
00066         rot_act();
00067         
00068         if(t1.read_ms()>3000) {
00069             t1.reset();
00070             state = st_gelb;
00071             return;
00072         }
00073     }
00074 }
00075 
00076 void Ampel::gelb_func() {
00077     stLED = 2;
00078     
00079     while(1) {
00080         gelb_act();
00081         
00082         if(t1.read_ms()>4000) {
00083             t1.reset();
00084             state = st_gruen;
00085             return;
00086         }
00087         if(sw4.CheckFlag()) {
00088             state = st_gruen_blink;
00089             return;
00090         }
00091     }
00092 }
00093 
00094 void Ampel::gruen_func() {
00095     stLED = 3;
00096     
00097     while(1) {
00098         gruen_act();
00099         
00100         if(t1.read_ms()>5000) {
00101             t1.reset();
00102             state = st_rot;
00103             return;
00104         }
00105         if(sw4.CheckFlag()) {
00106             state = st_gruen_blink;
00107             return;
00108         }
00109     }
00110 }
00111 
00112 void Ampel::gruen_blink_func() {
00113     stLED = 4;
00114     
00115     while(1) {
00116         gruen_blink_act();
00117         
00118         if(t1.read_ms()>2000) {
00119             t1.reset();
00120             state = st_rot;
00121             return;
00122         }
00123     }
00124 }
00125 
00126 void Ampel::rot_act() {
00127     if(t2.read_ms()>100) {
00128         if(lb = 0)
00129             lb = 2;
00130         else
00131             lb = 0;
00132     }
00133 }
00134 
00135 void Ampel::gelb_act() {
00136     if(t2.read_ms()>200) {
00137         if(lb = 0)
00138             lb = 4;
00139         else
00140             lb = 0;
00141     }
00142 }
00143 
00144 void Ampel::gruen_act() {
00145     if(t2.read_ms()>500) {
00146         if(lb = 0)
00147             lb = 8;
00148         else
00149             lb = 0;
00150     }
00151 }
00152 
00153 void Ampel::gruen_blink_act() {
00154     if(t2.read_ms()>700) {
00155         if(lb = 0)
00156             lb = 16;
00157         else
00158             lb = 0;
00159     }
00160 }