エレキジャックweb mbed入門 mbed RMCS鉄道模型自動制御システム 課題9です。2列車を交換運転できるレイアウトです3cds光センサ、2ポイントを設置しています。

Committer:
takeuchi
Date:
Sun Feb 19 03:44:29 2012 +0000
Revision:
0:cb03a47cd2ba

        

Who changed what in which revision?

UserRevisionLine numberNew 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