Alexander Leber
/
m0_Test
lalalala
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Tue Aug 9 2022 17:22:05 by 1.7.2