X-BoardV2の動作テストプログラムです

Dependencies:   mbed

Committer:
MCR_Xavier
Date:
Sun Apr 22 04:33:15 2018 +0000
Revision:
0:425a3be343d7
?????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MCR_Xavier 0:425a3be343d7 1 #include "mbed.h"
MCR_Xavier 0:425a3be343d7 2
MCR_Xavier 0:425a3be343d7 3 //シンボル定義
MCR_Xavier 0:425a3be343d7 4 #define FW 1 //前進
MCR_Xavier 0:425a3be343d7 5 #define BW 0 //後進
MCR_Xavier 0:425a3be343d7 6
MCR_Xavier 0:425a3be343d7 7 AnalogIn LineL(PA_0); //アナログラインセンサ
MCR_Xavier 0:425a3be343d7 8 AnalogIn LineR(PA_1); //アナログラインセンサ
MCR_Xavier 0:425a3be343d7 9 DigitalOut led1(PB_7); //LED_1
MCR_Xavier 0:425a3be343d7 10 DigitalOut led2(PB_6); //LED_2
MCR_Xavier 0:425a3be343d7 11 DigitalOut led3(PB_5); //LED_3
MCR_Xavier 0:425a3be343d7 12 DigitalOut led4(PB_4); //LED_4
MCR_Xavier 0:425a3be343d7 13 DigitalOut L_Dir(PB_1); //左モータ回転方向
MCR_Xavier 0:425a3be343d7 14 DigitalOut R_Dir(PA_9); //右モータ回転方向
MCR_Xavier 0:425a3be343d7 15 DigitalOut MotorDA(PA_11); //モーター出力EN
MCR_Xavier 0:425a3be343d7 16 DigitalIn SW_IN(PB_3); //スイッチ入力
MCR_Xavier 0:425a3be343d7 17 PwmOut PWM_L(PA_8); //左モータPWM
MCR_Xavier 0:425a3be343d7 18 PwmOut PWM_R(PA_10); //右モータPWM
MCR_Xavier 0:425a3be343d7 19 Serial pc(PA_2,PA_15); //tx, rx
MCR_Xavier 0:425a3be343d7 20
MCR_Xavier 0:425a3be343d7 21
MCR_Xavier 0:425a3be343d7 22 //割り込み定義
MCR_Xavier 0:425a3be343d7 23 Ticker flipper; //汎用タイマー
MCR_Xavier 0:425a3be343d7 24
MCR_Xavier 0:425a3be343d7 25 //プロトタイプ宣言
MCR_Xavier 0:425a3be343d7 26 void init(void); //マイコン初期設定
MCR_Xavier 0:425a3be343d7 27 void led_out(void); //LED出力
MCR_Xavier 0:425a3be343d7 28 void MotorCtrl(void); //モータ管理
MCR_Xavier 0:425a3be343d7 29 void SensUp(void); //センサー値更新
MCR_Xavier 0:425a3be343d7 30
MCR_Xavier 0:425a3be343d7 31 //グローバル変数の宣言
MCR_Xavier 0:425a3be343d7 32 int timer1=0; //汎用タイマー
MCR_Xavier 0:425a3be343d7 33 int ledval=1; //LED出力値
MCR_Xavier 0:425a3be343d7 34 int MotorL_Rev=0,MotorR_Rev=0; //モータの回転方向
MCR_Xavier 0:425a3be343d7 35 int MotorL=0,MotorR=0; //モータPWMデューティ比
MCR_Xavier 0:425a3be343d7 36 int ErrFlg=0; //エラー判定フラグ
MCR_Xavier 0:425a3be343d7 37 int SensValBuf=0; //センサ値のバッファ
MCR_Xavier 0:425a3be343d7 38 int SensorR,SensorL; //ラインセンサ
MCR_Xavier 0:425a3be343d7 39 //----------センサ値更新-----------------
MCR_Xavier 0:425a3be343d7 40 void SensUp(void){
MCR_Xavier 0:425a3be343d7 41 SensorR = LineR.read_u16()>>8;
MCR_Xavier 0:425a3be343d7 42 SensorL = LineL.read_u16()>>8;
MCR_Xavier 0:425a3be343d7 43 }
MCR_Xavier 0:425a3be343d7 44 //------------モータ管理--------------------
MCR_Xavier 0:425a3be343d7 45 void MotorCtrl(void){
MCR_Xavier 0:425a3be343d7 46 int RMotorVal,LMotorVal;
MCR_Xavier 0:425a3be343d7 47 if(ErrFlg){ //異常判定
MCR_Xavier 0:425a3be343d7 48 PWM_L.pulsewidth_us(0); //左PWM出力0
MCR_Xavier 0:425a3be343d7 49 PWM_R.pulsewidth_us(0); //右PWM出力0
MCR_Xavier 0:425a3be343d7 50 }
MCR_Xavier 0:425a3be343d7 51 else{ //通常時
MCR_Xavier 0:425a3be343d7 52 if(MotorL < 0 ){
MCR_Xavier 0:425a3be343d7 53 LMotorVal = MotorL * (-1);
MCR_Xavier 0:425a3be343d7 54 MotorL_Rev = BW;}
MCR_Xavier 0:425a3be343d7 55 else{
MCR_Xavier 0:425a3be343d7 56 LMotorVal = MotorL;
MCR_Xavier 0:425a3be343d7 57 MotorL_Rev = FW;}
MCR_Xavier 0:425a3be343d7 58
MCR_Xavier 0:425a3be343d7 59 if(MotorR < 0 ){
MCR_Xavier 0:425a3be343d7 60 RMotorVal = MotorR * (-1);
MCR_Xavier 0:425a3be343d7 61 MotorR_Rev = BW;}
MCR_Xavier 0:425a3be343d7 62 else{
MCR_Xavier 0:425a3be343d7 63 RMotorVal = MotorR;
MCR_Xavier 0:425a3be343d7 64 MotorR_Rev = FW;}
MCR_Xavier 0:425a3be343d7 65
MCR_Xavier 0:425a3be343d7 66 if(LMotorVal >= 1000) MotorL = 1000;
MCR_Xavier 0:425a3be343d7 67 if(RMotorVal >= 1000) MotorR = 1000;
MCR_Xavier 0:425a3be343d7 68 PWM_L.pulsewidth_us(LMotorVal); //左PWM (0~1000)
MCR_Xavier 0:425a3be343d7 69 PWM_R.pulsewidth_us(RMotorVal); //右PWM (0~1000)
MCR_Xavier 0:425a3be343d7 70 }
MCR_Xavier 0:425a3be343d7 71
MCR_Xavier 0:425a3be343d7 72 L_Dir = MotorL_Rev; //右モータ回転方向(H:CW)
MCR_Xavier 0:425a3be343d7 73 R_Dir = !MotorR_Rev; //左モータ回転方向(L:FW)
MCR_Xavier 0:425a3be343d7 74 }
MCR_Xavier 0:425a3be343d7 75 //-------------LED出力------------------
MCR_Xavier 0:425a3be343d7 76 void led_out(void){
MCR_Xavier 0:425a3be343d7 77 if(ledval & 0x01) led1 = 1;
MCR_Xavier 0:425a3be343d7 78 else led1 = 0;
MCR_Xavier 0:425a3be343d7 79 if(ledval & 0x02) led2 = 1;
MCR_Xavier 0:425a3be343d7 80 else led2 = 0;
MCR_Xavier 0:425a3be343d7 81 if(ledval & 0x04) led3 = 1;
MCR_Xavier 0:425a3be343d7 82 else led3 = 0;
MCR_Xavier 0:425a3be343d7 83 if(ledval & 0x08) led4 = 1;
MCR_Xavier 0:425a3be343d7 84 else led4 = 0;
MCR_Xavier 0:425a3be343d7 85 }
MCR_Xavier 0:425a3be343d7 86
MCR_Xavier 0:425a3be343d7 87 //----------タイマー割り込み---------------
MCR_Xavier 0:425a3be343d7 88 void flip(){
MCR_Xavier 0:425a3be343d7 89 timer1++;
MCR_Xavier 0:425a3be343d7 90 MotorCtrl();
MCR_Xavier 0:425a3be343d7 91 led_out();
MCR_Xavier 0:425a3be343d7 92 SensUp();
MCR_Xavier 0:425a3be343d7 93 }
MCR_Xavier 0:425a3be343d7 94
MCR_Xavier 0:425a3be343d7 95 //----------マイコン初期設定---------------
MCR_Xavier 0:425a3be343d7 96 void init(void){
MCR_Xavier 0:425a3be343d7 97 //I/O設定
MCR_Xavier 0:425a3be343d7 98 SW_IN.mode(PullUp); //スイッチ入力ピンプルアップ
MCR_Xavier 0:425a3be343d7 99 MotorDA = 1; //モータ出力無効
MCR_Xavier 0:425a3be343d7 100
MCR_Xavier 0:425a3be343d7 101 //割り込み処理開始
MCR_Xavier 0:425a3be343d7 102 flipper.attach_us(&flip,1000); //汎用タイマー割り込み
MCR_Xavier 0:425a3be343d7 103
MCR_Xavier 0:425a3be343d7 104 //PWM周期設定
MCR_Xavier 0:425a3be343d7 105 PWM_L.period(0.001);
MCR_Xavier 0:425a3be343d7 106 PWM_R.period(0.001);
MCR_Xavier 0:425a3be343d7 107 }
MCR_Xavier 0:425a3be343d7 108
MCR_Xavier 0:425a3be343d7 109 //---------------メイン--------------------
MCR_Xavier 0:425a3be343d7 110 int main() {
MCR_Xavier 0:425a3be343d7 111 init(); //マイコン初期設定
MCR_Xavier 0:425a3be343d7 112 wait(1);
MCR_Xavier 0:425a3be343d7 113 MotorDA = 0; //モータ出力有効
MCR_Xavier 0:425a3be343d7 114 while(1) {
MCR_Xavier 0:425a3be343d7 115 if(! SW_IN)ledval=0;
MCR_Xavier 0:425a3be343d7 116 if(ledval >= 16) ledval=0;
MCR_Xavier 0:425a3be343d7 117 pc.printf("%d\r\n",ledval);
MCR_Xavier 0:425a3be343d7 118 wait(1);
MCR_Xavier 0:425a3be343d7 119 ledval++;
MCR_Xavier 0:425a3be343d7 120
MCR_Xavier 0:425a3be343d7 121 }
MCR_Xavier 0:425a3be343d7 122 }