Takeuchi Kouichi
/
2ck0121_RMCS09
エレキジャックweb mbed入門 mbed RMCS鉄道模型自動制御システム 課題9です。2列車を交換運転できるレイアウトです3cds光センサ、2ポイントを設置しています。
main.cpp@0:cb03a47cd2ba, 2012-02-19 (annotated)
- Committer:
- takeuchi
- Date:
- Sun Feb 19 03:44:29 2012 +0000
- Revision:
- 0:cb03a47cd2ba
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
takeuchi | 0:cb03a47cd2ba | 1 | // mbed RMCS09 2ressha 2point CTS |
takeuchi | 0:cb03a47cd2ba | 2 | // mbed RailModelContorolSystem |
takeuchi | 0:cb03a47cd2ba | 3 | |
takeuchi | 0:cb03a47cd2ba | 4 | #include "mbed.h" |
takeuchi | 0:cb03a47cd2ba | 5 | #include "TextLCD0420.h" |
takeuchi | 0:cb03a47cd2ba | 6 | |
takeuchi | 0:cb03a47cd2ba | 7 | #define ON 1 |
takeuchi | 0:cb03a47cd2ba | 8 | #define OFF 0 |
takeuchi | 0:cb03a47cd2ba | 9 | #define XON 0 |
takeuchi | 0:cb03a47cd2ba | 10 | #define XOFF 1 |
takeuchi | 0:cb03a47cd2ba | 11 | |
takeuchi | 0:cb03a47cd2ba | 12 | DigitalOut mled1(LED1); |
takeuchi | 0:cb03a47cd2ba | 13 | DigitalOut mled2(LED2); |
takeuchi | 0:cb03a47cd2ba | 14 | DigitalOut mled3(LED3); |
takeuchi | 0:cb03a47cd2ba | 15 | DigitalOut mled4(LED4); |
takeuchi | 0:cb03a47cd2ba | 16 | AnalogIn vr1_adc(p15); |
takeuchi | 0:cb03a47cd2ba | 17 | AnalogIn vr2_adc(p16); |
takeuchi | 0:cb03a47cd2ba | 18 | DigitalIn sens1(p17); |
takeuchi | 0:cb03a47cd2ba | 19 | DigitalIn sens2(p18); |
takeuchi | 0:cb03a47cd2ba | 20 | DigitalIn sens3(p19); |
takeuchi | 0:cb03a47cd2ba | 21 | PwmOut r1_pwm(p22); |
takeuchi | 0:cb03a47cd2ba | 22 | PwmOut r2_pwm(p23); |
takeuchi | 0:cb03a47cd2ba | 23 | DigitalOut po10(p5); |
takeuchi | 0:cb03a47cd2ba | 24 | DigitalOut po11(p6); |
takeuchi | 0:cb03a47cd2ba | 25 | DigitalOut po20(p7); |
takeuchi | 0:cb03a47cd2ba | 26 | DigitalOut po21(p8); |
takeuchi | 0:cb03a47cd2ba | 27 | |
takeuchi | 0:cb03a47cd2ba | 28 | TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,20,4); // rs, rw, e, d0, d1, d2, d3 |
takeuchi | 0:cb03a47cd2ba | 29 | |
takeuchi | 0:cb03a47cd2ba | 30 | float pduty,pduty_slow; |
takeuchi | 0:cb03a47cd2ba | 31 | int point_sts; |
takeuchi | 0:cb03a47cd2ba | 32 | int t_count,count; |
takeuchi | 0:cb03a47cd2ba | 33 | int ressha,r_flag; |
takeuchi | 0:cb03a47cd2ba | 34 | |
takeuchi | 0:cb03a47cd2ba | 35 | void disp_status(){ |
takeuchi | 0:cb03a47cd2ba | 36 | lcd.locate(0,0); |
takeuchi | 0:cb03a47cd2ba | 37 | lcd.printf("* mbed RMCS101 T:%3d *",t_count); |
takeuchi | 0:cb03a47cd2ba | 38 | lcd.locate(0,1); |
takeuchi | 0:cb03a47cd2ba | 39 | lcd.printf("N:%2.0f%% C:%1d r:%1d ",pduty*100,count,r_flag); |
takeuchi | 0:cb03a47cd2ba | 40 | } |
takeuchi | 0:cb03a47cd2ba | 41 | |
takeuchi | 0:cb03a47cd2ba | 42 | void notch(float duty){ |
takeuchi | 0:cb03a47cd2ba | 43 | r1_pwm.write(duty); |
takeuchi | 0:cb03a47cd2ba | 44 | r2_pwm.write(0); |
takeuchi | 0:cb03a47cd2ba | 45 | } |
takeuchi | 0:cb03a47cd2ba | 46 | |
takeuchi | 0:cb03a47cd2ba | 47 | void r_notch(float duty){ |
takeuchi | 0:cb03a47cd2ba | 48 | r1_pwm.write(0); |
takeuchi | 0:cb03a47cd2ba | 49 | r2_pwm.write(duty); |
takeuchi | 0:cb03a47cd2ba | 50 | } |
takeuchi | 0:cb03a47cd2ba | 51 | |
takeuchi | 0:cb03a47cd2ba | 52 | void slow_start(){ |
takeuchi | 0:cb03a47cd2ba | 53 | lcd.locate(0,2); |
takeuchi | 0:cb03a47cd2ba | 54 | lcd.printf("Notch Up "); |
takeuchi | 0:cb03a47cd2ba | 55 | pduty=vr1_adc.read(); |
takeuchi | 0:cb03a47cd2ba | 56 | pduty_slow=pduty*0.95; |
takeuchi | 0:cb03a47cd2ba | 57 | disp_status(); |
takeuchi | 0:cb03a47cd2ba | 58 | notch(pduty_slow); |
takeuchi | 0:cb03a47cd2ba | 59 | wait(1.0); |
takeuchi | 0:cb03a47cd2ba | 60 | notch(pduty); |
takeuchi | 0:cb03a47cd2ba | 61 | wait(1.0); |
takeuchi | 0:cb03a47cd2ba | 62 | } |
takeuchi | 0:cb03a47cd2ba | 63 | |
takeuchi | 0:cb03a47cd2ba | 64 | void r_slow_start(){ |
takeuchi | 0:cb03a47cd2ba | 65 | lcd.locate(0,2); |
takeuchi | 0:cb03a47cd2ba | 66 | lcd.printf("rNotch Up "); |
takeuchi | 0:cb03a47cd2ba | 67 | pduty=vr2_adc.read(); |
takeuchi | 0:cb03a47cd2ba | 68 | pduty_slow=pduty*0.95; |
takeuchi | 0:cb03a47cd2ba | 69 | disp_status(); |
takeuchi | 0:cb03a47cd2ba | 70 | r_notch(pduty_slow); |
takeuchi | 0:cb03a47cd2ba | 71 | wait(1.0); |
takeuchi | 0:cb03a47cd2ba | 72 | r_notch(pduty); |
takeuchi | 0:cb03a47cd2ba | 73 | wait(1.0); |
takeuchi | 0:cb03a47cd2ba | 74 | } |
takeuchi | 0:cb03a47cd2ba | 75 | |
takeuchi | 0:cb03a47cd2ba | 76 | void point1(int x){ |
takeuchi | 0:cb03a47cd2ba | 77 | if(x==0){ |
takeuchi | 0:cb03a47cd2ba | 78 | po10=ON; |
takeuchi | 0:cb03a47cd2ba | 79 | po11=OFF; |
takeuchi | 0:cb03a47cd2ba | 80 | wait(0.2); |
takeuchi | 0:cb03a47cd2ba | 81 | po10=OFF; |
takeuchi | 0:cb03a47cd2ba | 82 | po11=OFF; |
takeuchi | 0:cb03a47cd2ba | 83 | } |
takeuchi | 0:cb03a47cd2ba | 84 | else if(x==1){ |
takeuchi | 0:cb03a47cd2ba | 85 | po10=OFF; |
takeuchi | 0:cb03a47cd2ba | 86 | po11=ON; |
takeuchi | 0:cb03a47cd2ba | 87 | wait(0.2); |
takeuchi | 0:cb03a47cd2ba | 88 | po10=OFF; |
takeuchi | 0:cb03a47cd2ba | 89 | po11=OFF; |
takeuchi | 0:cb03a47cd2ba | 90 | } |
takeuchi | 0:cb03a47cd2ba | 91 | } |
takeuchi | 0:cb03a47cd2ba | 92 | |
takeuchi | 0:cb03a47cd2ba | 93 | void point2(int x){ |
takeuchi | 0:cb03a47cd2ba | 94 | if(x==0){ |
takeuchi | 0:cb03a47cd2ba | 95 | po20=ON; |
takeuchi | 0:cb03a47cd2ba | 96 | po21=OFF; |
takeuchi | 0:cb03a47cd2ba | 97 | wait(0.2); |
takeuchi | 0:cb03a47cd2ba | 98 | po20=OFF; |
takeuchi | 0:cb03a47cd2ba | 99 | po21=OFF; |
takeuchi | 0:cb03a47cd2ba | 100 | } |
takeuchi | 0:cb03a47cd2ba | 101 | else if(x==1){ |
takeuchi | 0:cb03a47cd2ba | 102 | po20=OFF; |
takeuchi | 0:cb03a47cd2ba | 103 | po21=ON; |
takeuchi | 0:cb03a47cd2ba | 104 | wait(0.2); |
takeuchi | 0:cb03a47cd2ba | 105 | po20=OFF; |
takeuchi | 0:cb03a47cd2ba | 106 | po21=OFF; |
takeuchi | 0:cb03a47cd2ba | 107 | } |
takeuchi | 0:cb03a47cd2ba | 108 | } |
takeuchi | 0:cb03a47cd2ba | 109 | |
takeuchi | 0:cb03a47cd2ba | 110 | int main() { |
takeuchi | 0:cb03a47cd2ba | 111 | int init_sts; |
takeuchi | 0:cb03a47cd2ba | 112 | r1_pwm.pulsewidth(0.000001);//1us=0.000001 |
takeuchi | 0:cb03a47cd2ba | 113 | r1_pwm.period(0.00001);//1ms=0.001s |
takeuchi | 0:cb03a47cd2ba | 114 | r2_pwm.pulsewidth(0.000001);//1us=0.000001 |
takeuchi | 0:cb03a47cd2ba | 115 | r2_pwm.period(0.00001);//1ms=0.001s |
takeuchi | 0:cb03a47cd2ba | 116 | |
takeuchi | 0:cb03a47cd2ba | 117 | lcd.cls(); |
takeuchi | 0:cb03a47cd2ba | 118 | lcd.locate(0,0); |
takeuchi | 0:cb03a47cd2ba | 119 | lcd.printf("Set Train on rail!!"); |
takeuchi | 0:cb03a47cd2ba | 120 | lcd.locate(0,1); |
takeuchi | 0:cb03a47cd2ba | 121 | lcd.printf("==>Sns1:Hi,Sns2:Low"); |
takeuchi | 0:cb03a47cd2ba | 122 | lcd.locate(0,2); |
takeuchi | 0:cb03a47cd2ba | 123 | lcd.printf("==>OK? Main pwr on!"); |
takeuchi | 0:cb03a47cd2ba | 124 | |
takeuchi | 0:cb03a47cd2ba | 125 | count=0; |
takeuchi | 0:cb03a47cd2ba | 126 | t_count=0; |
takeuchi | 0:cb03a47cd2ba | 127 | notch(0); |
takeuchi | 0:cb03a47cd2ba | 128 | |
takeuchi | 0:cb03a47cd2ba | 129 | init_sts=1; |
takeuchi | 0:cb03a47cd2ba | 130 | ressha=0; |
takeuchi | 0:cb03a47cd2ba | 131 | while(init_sts==1){ |
takeuchi | 0:cb03a47cd2ba | 132 | if(sens1==XON && sens2==XOFF){ |
takeuchi | 0:cb03a47cd2ba | 133 | lcd.cls(); |
takeuchi | 0:cb03a47cd2ba | 134 | lcd.locate(0,0); |
takeuchi | 0:cb03a47cd2ba | 135 | lcd.printf("** mbed RMCS **"); |
takeuchi | 0:cb03a47cd2ba | 136 | lcd.locate(0,1); |
takeuchi | 0:cb03a47cd2ba | 137 | lcd.printf("System start ..."); |
takeuchi | 0:cb03a47cd2ba | 138 | wait(1.0); |
takeuchi | 0:cb03a47cd2ba | 139 | point_sts=1; |
takeuchi | 0:cb03a47cd2ba | 140 | point1(point_sts); |
takeuchi | 0:cb03a47cd2ba | 141 | point2(point_sts); |
takeuchi | 0:cb03a47cd2ba | 142 | point_sts=1-point_sts; |
takeuchi | 0:cb03a47cd2ba | 143 | init_sts=0; |
takeuchi | 0:cb03a47cd2ba | 144 | } |
takeuchi | 0:cb03a47cd2ba | 145 | } |
takeuchi | 0:cb03a47cd2ba | 146 | |
takeuchi | 0:cb03a47cd2ba | 147 | ressha=0; |
takeuchi | 0:cb03a47cd2ba | 148 | while(1){ |
takeuchi | 0:cb03a47cd2ba | 149 | slow_start(); |
takeuchi | 0:cb03a47cd2ba | 150 | while(ressha==0){ |
takeuchi | 0:cb03a47cd2ba | 151 | pduty=vr1_adc.read(); |
takeuchi | 0:cb03a47cd2ba | 152 | pduty_slow=pduty*0.95; |
takeuchi | 0:cb03a47cd2ba | 153 | notch(pduty); |
takeuchi | 0:cb03a47cd2ba | 154 | disp_status(); |
takeuchi | 0:cb03a47cd2ba | 155 | if(sens1==XON){ |
takeuchi | 0:cb03a47cd2ba | 156 | if(count<=2){ |
takeuchi | 0:cb03a47cd2ba | 157 | while(sens1==XON){ |
takeuchi | 0:cb03a47cd2ba | 158 | } |
takeuchi | 0:cb03a47cd2ba | 159 | } |
takeuchi | 0:cb03a47cd2ba | 160 | count++; |
takeuchi | 0:cb03a47cd2ba | 161 | t_count++; |
takeuchi | 0:cb03a47cd2ba | 162 | r_flag=0; |
takeuchi | 0:cb03a47cd2ba | 163 | disp_status(); |
takeuchi | 0:cb03a47cd2ba | 164 | } |
takeuchi | 0:cb03a47cd2ba | 165 | |
takeuchi | 0:cb03a47cd2ba | 166 | if(sens3==XON){ |
takeuchi | 0:cb03a47cd2ba | 167 | while(sens3==XON){ |
takeuchi | 0:cb03a47cd2ba | 168 | } |
takeuchi | 0:cb03a47cd2ba | 169 | r_flag=1; |
takeuchi | 0:cb03a47cd2ba | 170 | } |
takeuchi | 0:cb03a47cd2ba | 171 | |
takeuchi | 0:cb03a47cd2ba | 172 | if(count <= 2){ |
takeuchi | 0:cb03a47cd2ba | 173 | disp_status(); |
takeuchi | 0:cb03a47cd2ba | 174 | lcd.locate(0,2); |
takeuchi | 0:cb03a47cd2ba | 175 | lcd.printf("No:E001 "); |
takeuchi | 0:cb03a47cd2ba | 176 | notch(pduty); |
takeuchi | 0:cb03a47cd2ba | 177 | } |
takeuchi | 0:cb03a47cd2ba | 178 | else if(count==3 && r_flag==1){ |
takeuchi | 0:cb03a47cd2ba | 179 | pduty=pduty_slow; |
takeuchi | 0:cb03a47cd2ba | 180 | notch(pduty); |
takeuchi | 0:cb03a47cd2ba | 181 | disp_status(); |
takeuchi | 0:cb03a47cd2ba | 182 | lcd.locate(0,2); |
takeuchi | 0:cb03a47cd2ba | 183 | lcd.printf("Notch OFF "); |
takeuchi | 0:cb03a47cd2ba | 184 | } |
takeuchi | 0:cb03a47cd2ba | 185 | else if(count==4){ |
takeuchi | 0:cb03a47cd2ba | 186 | notch(0); |
takeuchi | 0:cb03a47cd2ba | 187 | lcd.locate(0,2); |
takeuchi | 0:cb03a47cd2ba | 188 | lcd.printf("Break!! "); |
takeuchi | 0:cb03a47cd2ba | 189 | wait(1.0); |
takeuchi | 0:cb03a47cd2ba | 190 | point1(point_sts); |
takeuchi | 0:cb03a47cd2ba | 191 | point2(point_sts); |
takeuchi | 0:cb03a47cd2ba | 192 | point_sts=1-point_sts; |
takeuchi | 0:cb03a47cd2ba | 193 | count=0; |
takeuchi | 0:cb03a47cd2ba | 194 | ressha=1; |
takeuchi | 0:cb03a47cd2ba | 195 | wait(2.0); |
takeuchi | 0:cb03a47cd2ba | 196 | } |
takeuchi | 0:cb03a47cd2ba | 197 | }//while |
takeuchi | 0:cb03a47cd2ba | 198 | |
takeuchi | 0:cb03a47cd2ba | 199 | r_slow_start(); |
takeuchi | 0:cb03a47cd2ba | 200 | while(ressha==1){ |
takeuchi | 0:cb03a47cd2ba | 201 | pduty=vr2_adc.read(); |
takeuchi | 0:cb03a47cd2ba | 202 | pduty_slow=pduty*0.95; |
takeuchi | 0:cb03a47cd2ba | 203 | r_notch(pduty); |
takeuchi | 0:cb03a47cd2ba | 204 | disp_status(); |
takeuchi | 0:cb03a47cd2ba | 205 | if(sens2==XON){ |
takeuchi | 0:cb03a47cd2ba | 206 | if(count<=2){ |
takeuchi | 0:cb03a47cd2ba | 207 | while(sens2==XON){ |
takeuchi | 0:cb03a47cd2ba | 208 | } |
takeuchi | 0:cb03a47cd2ba | 209 | } |
takeuchi | 0:cb03a47cd2ba | 210 | count++; |
takeuchi | 0:cb03a47cd2ba | 211 | t_count++; |
takeuchi | 0:cb03a47cd2ba | 212 | r_flag=0; |
takeuchi | 0:cb03a47cd2ba | 213 | disp_status(); |
takeuchi | 0:cb03a47cd2ba | 214 | } |
takeuchi | 0:cb03a47cd2ba | 215 | |
takeuchi | 0:cb03a47cd2ba | 216 | if(sens3==XON){ |
takeuchi | 0:cb03a47cd2ba | 217 | while(sens3==XON){ |
takeuchi | 0:cb03a47cd2ba | 218 | } |
takeuchi | 0:cb03a47cd2ba | 219 | r_flag=1; |
takeuchi | 0:cb03a47cd2ba | 220 | } |
takeuchi | 0:cb03a47cd2ba | 221 | |
takeuchi | 0:cb03a47cd2ba | 222 | if(count <= 2){ |
takeuchi | 0:cb03a47cd2ba | 223 | disp_status(); |
takeuchi | 0:cb03a47cd2ba | 224 | lcd.locate(0,2); |
takeuchi | 0:cb03a47cd2ba | 225 | lcd.printf("No:E002 "); |
takeuchi | 0:cb03a47cd2ba | 226 | r_notch(pduty); |
takeuchi | 0:cb03a47cd2ba | 227 | } |
takeuchi | 0:cb03a47cd2ba | 228 | else if(count==3 && r_flag==1){ |
takeuchi | 0:cb03a47cd2ba | 229 | pduty=pduty_slow; |
takeuchi | 0:cb03a47cd2ba | 230 | r_notch(pduty); |
takeuchi | 0:cb03a47cd2ba | 231 | disp_status(); |
takeuchi | 0:cb03a47cd2ba | 232 | lcd.locate(0,2); |
takeuchi | 0:cb03a47cd2ba | 233 | lcd.printf("Notch OFF "); |
takeuchi | 0:cb03a47cd2ba | 234 | } |
takeuchi | 0:cb03a47cd2ba | 235 | else if(count==4){ |
takeuchi | 0:cb03a47cd2ba | 236 | r_notch(0); |
takeuchi | 0:cb03a47cd2ba | 237 | lcd.locate(0,2); |
takeuchi | 0:cb03a47cd2ba | 238 | lcd.printf("Break!! "); |
takeuchi | 0:cb03a47cd2ba | 239 | wait(1.0); |
takeuchi | 0:cb03a47cd2ba | 240 | point1(point_sts); |
takeuchi | 0:cb03a47cd2ba | 241 | point2(point_sts); |
takeuchi | 0:cb03a47cd2ba | 242 | point_sts=1-point_sts; |
takeuchi | 0:cb03a47cd2ba | 243 | count=0; |
takeuchi | 0:cb03a47cd2ba | 244 | ressha=0; |
takeuchi | 0:cb03a47cd2ba | 245 | wait(2.0); |
takeuchi | 0:cb03a47cd2ba | 246 | } |
takeuchi | 0:cb03a47cd2ba | 247 | }//while |
takeuchi | 0:cb03a47cd2ba | 248 | |
takeuchi | 0:cb03a47cd2ba | 249 | }//while |
takeuchi | 0:cb03a47cd2ba | 250 | }//main |