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

main.cpp

Committer:
takeuchi
Date:
2012-02-19
Revision:
0:f3675b6d19ef

File content as of revision 0:f3675b6d19ef:

// mRMCS10 Active sensor 
// Trunk rayout tansen oufuku
// mbed RailModelContorolSystem

#include "mbed.h"
#include "TextLCD0420.h"

#define ON 1
#define OFF 0
#define XON 0
#define XOFF 1

DigitalOut mled1(LED1);
DigitalOut mled2(LED2);
DigitalOut mled3(LED3);
DigitalOut mled4(LED4);
AnalogIn vr1_adc(p15);
AnalogIn vr2_adc(p16);
DigitalIn sens1(p17);
DigitalIn sens2(p18);
DigitalIn sens3(p19);
PwmOut r1_pwm(p22);
PwmOut r2_pwm(p23);
DigitalOut po10(p5);
DigitalOut po11(p6);
DigitalOut po20(p7);
DigitalOut po21(p8);
DigitalIn Asens1(p9);
DigitalIn Asens2(p10);
DigitalIn Asens3(p11);

TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,20,4); // rs, rw, e, d0, d1, d2, d3

float pduty,pduty_slow;

void notch(float duty){
  r1_pwm.write(duty);
  r2_pwm.write(0);
}

void r_notch(float duty){
  r1_pwm.write(0);
  r2_pwm.write(duty);
}

void point1(int x){
  if(x==0){
    po10=ON;
    po11=OFF;
    wait(0.2);
    po10=OFF;
    po11=OFF;
  }
  else if(x==1){
    po10=OFF;
    po11=ON;
    wait(0.2);
    po10=OFF;
    po11=OFF;
  }
}

int main() {      
  int i,count,ressha,init_sts;
  float pduty;
  r1_pwm.pulsewidth(0.000001);//1us=0.000001
  r1_pwm.period(0.00001);//1ms=0.001s
  r2_pwm.pulsewidth(0.000001);//1us=0.000001
  r2_pwm.period(0.00001);//1ms=0.001s
 
  lcd.cls();
  lcd.locate(0,0);
  lcd.printf("Set Train on rail!!");
  lcd.locate(0,1);
  lcd.printf("==>Sns1:XON,Sns2:XON");

  notch(0);  
  init_sts=1;
  ressha=0;  
  while(init_sts==1){
    if(Asens1==XON && Asens2==XON){
      lcd.cls();
      lcd.locate(0,0);
      lcd.printf("** mbed RMCS **");
      lcd.locate(0,1);
      lcd.printf("> Pse Main pwr on!");
      lcd.locate(0,1);
      lcd.printf("> System start ...");
      wait(1.0);
      point1(0);
      wait(1.0);
      point1(1);
      wait(1.0);
      point1(0);
      wait(1.0);
      init_sts=0;
    }
  }

  lcd.cls();
  lcd.locate(0,0);
  lcd.printf("** mbed RMCS10 **");
  
  while(1){
    
    lcd.locate(0,3);
    lcd.printf("Point1 0");
    point1(0);
    
    pduty=vr1_adc.read();
    r_notch(pduty);   
    wait(1.0);
    while(Asens3==XOFF){
      pduty=vr1_adc.read();
      r_notch(pduty);
      lcd.locate(0,1);
      lcd.printf("d:%3.0f%%",pduty*100);
      lcd.locate(0,2);
      lcd.printf("E:001 r_notch ON!");
    }
    r_notch(0);
    lcd.locate(0,1);
    lcd.printf("d:%3.0f%%",0);
    lcd.locate(0,2);
    lcd.printf("E:001 Teishachu!!");
    wait(5.0);
    pduty=vr1_adc.read();
    notch(pduty);
    wait(1.0);
    while(Asens1==XOFF){
      pduty=vr1_adc.read();
      notch(pduty);
      lcd.locate(0,1);
      lcd.printf("d:%3.0f%%",pduty*100);
      lcd.locate(0,2);
      lcd.printf("E:001 notch ON!  ");

    }
    notch(0);
    wait(3.0);

    lcd.locate(0,3);
    lcd.printf("Point1 1");
    
    point1(1);
    wait(1.0);
    pduty=vr2_adc.read();
    r_notch(pduty);   
    wait(1.0);
    while(Asens3==XOFF){
      pduty=vr2_adc.read();
      r_notch(pduty);
      lcd.locate(0,1);
      lcd.printf("d:%3.0f%%",pduty*100);
      lcd.locate(0,2);
      lcd.printf("E:002 r_notch ON!");
    }
    r_notch(0);
    lcd.locate(0,1);
    lcd.printf("d:%3.0f%%",0);
    lcd.locate(0,2);
    lcd.printf("E:002 Teishachu!!");
    wait(5.0);
    pduty=vr2_adc.read();
    notch(pduty);
    wait(1.0);
    while(Asens2==XOFF){
      pduty=vr2_adc.read();
      notch(pduty);
      lcd.locate(0,1);
      lcd.printf("d:%3.0f%%",pduty*100);
      lcd.locate(0,2);
      lcd.printf("E:002 notch ON!  ");

    }
    notch(0);
    wait(3.0);
  }//while
     
}//main