エレキジャックweb mbed入門 mbed RMCS鉄道模型自動制御システム 課題10です。単線ですが、ポイントを一つ設置して2列車を交互運転できるレイアウトです3アクティブ光センサ、1ポイントを設置しています。コンパクトに小型アルミトランクに組み込みました。

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 // mRMCS10 Active sensor 
00002 // Trunk rayout tansen oufuku
00003 // mbed RailModelContorolSystem
00004 
00005 #include "mbed.h"
00006 #include "TextLCD0420.h"
00007 
00008 #define ON 1
00009 #define OFF 0
00010 #define XON 0
00011 #define XOFF 1
00012 
00013 DigitalOut mled1(LED1);
00014 DigitalOut mled2(LED2);
00015 DigitalOut mled3(LED3);
00016 DigitalOut mled4(LED4);
00017 AnalogIn vr1_adc(p15);
00018 AnalogIn vr2_adc(p16);
00019 DigitalIn sens1(p17);
00020 DigitalIn sens2(p18);
00021 DigitalIn sens3(p19);
00022 PwmOut r1_pwm(p22);
00023 PwmOut r2_pwm(p23);
00024 DigitalOut po10(p5);
00025 DigitalOut po11(p6);
00026 DigitalOut po20(p7);
00027 DigitalOut po21(p8);
00028 DigitalIn Asens1(p9);
00029 DigitalIn Asens2(p10);
00030 DigitalIn Asens3(p11);
00031 
00032 TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,20,4); // rs, rw, e, d0, d1, d2, d3
00033 
00034 float pduty,pduty_slow;
00035 
00036 void notch(float duty){
00037   r1_pwm.write(duty);
00038   r2_pwm.write(0);
00039 }
00040 
00041 void r_notch(float duty){
00042   r1_pwm.write(0);
00043   r2_pwm.write(duty);
00044 }
00045 
00046 void point1(int x){
00047   if(x==0){
00048     po10=ON;
00049     po11=OFF;
00050     wait(0.2);
00051     po10=OFF;
00052     po11=OFF;
00053   }
00054   else if(x==1){
00055     po10=OFF;
00056     po11=ON;
00057     wait(0.2);
00058     po10=OFF;
00059     po11=OFF;
00060   }
00061 }
00062 
00063 int main() {      
00064   int i,count,ressha,init_sts;
00065   float pduty;
00066   r1_pwm.pulsewidth(0.000001);//1us=0.000001
00067   r1_pwm.period(0.00001);//1ms=0.001s
00068   r2_pwm.pulsewidth(0.000001);//1us=0.000001
00069   r2_pwm.period(0.00001);//1ms=0.001s
00070  
00071   lcd.cls();
00072   lcd.locate(0,0);
00073   lcd.printf("Set Train on rail!!");
00074   lcd.locate(0,1);
00075   lcd.printf("==>Sns1:XON,Sns2:XON");
00076 
00077   notch(0);  
00078   init_sts=1;
00079   ressha=0;  
00080   while(init_sts==1){
00081     if(Asens1==XON && Asens2==XON){
00082       lcd.cls();
00083       lcd.locate(0,0);
00084       lcd.printf("** mbed RMCS **");
00085       lcd.locate(0,1);
00086       lcd.printf("> Pse Main pwr on!");
00087       lcd.locate(0,1);
00088       lcd.printf("> System start ...");
00089       wait(1.0);
00090       point1(0);
00091       wait(1.0);
00092       point1(1);
00093       wait(1.0);
00094       point1(0);
00095       wait(1.0);
00096       init_sts=0;
00097     }
00098   }
00099 
00100   lcd.cls();
00101   lcd.locate(0,0);
00102   lcd.printf("** mbed RMCS10 **");
00103   
00104   while(1){
00105     
00106     lcd.locate(0,3);
00107     lcd.printf("Point1 0");
00108     point1(0);
00109     
00110     pduty=vr1_adc.read();
00111     r_notch(pduty);   
00112     wait(1.0);
00113     while(Asens3==XOFF){
00114       pduty=vr1_adc.read();
00115       r_notch(pduty);
00116       lcd.locate(0,1);
00117       lcd.printf("d:%3.0f%%",pduty*100);
00118       lcd.locate(0,2);
00119       lcd.printf("E:001 r_notch ON!");
00120     }
00121     r_notch(0);
00122     lcd.locate(0,1);
00123     lcd.printf("d:%3.0f%%",0);
00124     lcd.locate(0,2);
00125     lcd.printf("E:001 Teishachu!!");
00126     wait(5.0);
00127     pduty=vr1_adc.read();
00128     notch(pduty);
00129     wait(1.0);
00130     while(Asens1==XOFF){
00131       pduty=vr1_adc.read();
00132       notch(pduty);
00133       lcd.locate(0,1);
00134       lcd.printf("d:%3.0f%%",pduty*100);
00135       lcd.locate(0,2);
00136       lcd.printf("E:001 notch ON!  ");
00137 
00138     }
00139     notch(0);
00140     wait(3.0);
00141 
00142     lcd.locate(0,3);
00143     lcd.printf("Point1 1");
00144     
00145     point1(1);
00146     wait(1.0);
00147     pduty=vr2_adc.read();
00148     r_notch(pduty);   
00149     wait(1.0);
00150     while(Asens3==XOFF){
00151       pduty=vr2_adc.read();
00152       r_notch(pduty);
00153       lcd.locate(0,1);
00154       lcd.printf("d:%3.0f%%",pduty*100);
00155       lcd.locate(0,2);
00156       lcd.printf("E:002 r_notch ON!");
00157     }
00158     r_notch(0);
00159     lcd.locate(0,1);
00160     lcd.printf("d:%3.0f%%",0);
00161     lcd.locate(0,2);
00162     lcd.printf("E:002 Teishachu!!");
00163     wait(5.0);
00164     pduty=vr2_adc.read();
00165     notch(pduty);
00166     wait(1.0);
00167     while(Asens2==XOFF){
00168       pduty=vr2_adc.read();
00169       notch(pduty);
00170       lcd.locate(0,1);
00171       lcd.printf("d:%3.0f%%",pduty*100);
00172       lcd.locate(0,2);
00173       lcd.printf("E:002 notch ON!  ");
00174 
00175     }
00176     notch(0);
00177     wait(3.0);
00178   }//while
00179      
00180 }//main