ランサー

Dependencies:   SB1602E SDFileSystem mbed

Fork of Seeed_SDCard_Shield by Shields

Committer:
MCR_Xavier
Date:
Sun Apr 29 10:40:19 2018 +0000
Revision:
12:2cb9082e2d40
Parent:
11:5ec2507020da
Lancer2018????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MCR_Xavier 5:20bb1e34b354 1 //Lancer2016
screamer 3:5edc67dee8b7 2
MCR_Xavier 5:20bb1e34b354 3 //ヘッダー設定
screamer 0:525c842a3c89 4 #include "mbed.h"
screamer 0:525c842a3c89 5 #include "SDFileSystem.h"
MCR_Xavier 5:20bb1e34b354 6 #include "SB1602E.h"
MCR_Xavier 10:adefba925268 7 #include "stdlib.h"
screamer 0:525c842a3c89 8
MCR_Xavier 5:20bb1e34b354 9 //シンボル定義
MCR_Xavier 11:5ec2507020da 10 #define CLR 0,0,0 //無 RGBパターン
MCR_Xavier 11:5ec2507020da 11 #define RED 1,0,0 //赤
MCR_Xavier 11:5ec2507020da 12 #define GRE 0,1,0 //緑
MCR_Xavier 11:5ec2507020da 13 #define YEL 1,1,0 //黄
MCR_Xavier 11:5ec2507020da 14 #define BLU 0,0,1 //青
MCR_Xavier 11:5ec2507020da 15 #define PUR 1,0,1 //紫
MCR_Xavier 11:5ec2507020da 16 #define CYA 0,1,1 //水
MCR_Xavier 11:5ec2507020da 17 #define WHI 1,1,1 //白
MCR_Xavier 11:5ec2507020da 18 #define DFP 508 //フロントポテンショメータ機械原点
MCR_Xavier 11:5ec2507020da 19 #define DRP 234 //リヤポテンショメータ機械原点
MCR_Xavier 11:5ec2507020da 20 #define FW 1 //駆動輪前進
MCR_Xavier 11:5ec2507020da 21 #define BW 0 //駆動輪後進
MCR_Xavier 11:5ec2507020da 22 #define ST_EN ST_CTR = 0 //ステアリングモータ有効
MCR_Xavier 11:5ec2507020da 23 #define ST_DA ST_CTR = 1 //ステアリングモータ無効
MCR_Xavier 11:5ec2507020da 24 #define OTH_EN OTH_CTR = 0 //その他モータ有効
MCR_Xavier 11:5ec2507020da 25 #define OTH_DA OTH_CTR = 1 //その他モータ無効
MCR_Xavier 11:5ec2507020da 26 #define LA_DA LancFree_Flg=1 //槍無効
MCR_Xavier 11:5ec2507020da 27 #define LA_EN LancFree_Flg=0 //槍有効
MCR_Xavier 11:5ec2507020da 28 #define DSs 8 //LineセンサA/Dシフト数
MCR_Xavier 11:5ec2507020da 29 #define ASs 6 //トレース用LineセンサA/Dシフト数
MCR_Xavier 11:5ec2507020da 30 #define ThS 80 //Line白黒判別閾値
MCR_Xavier 11:5ec2507020da 31 #define ANGLE 0 //角度制御モード
MCR_Xavier 11:5ec2507020da 32 #define TRACE 1 //トレースモード
MCR_Xavier 11:5ec2507020da 33 #define WTRACE 2 //拡張トレースモード
MCR_Xavier 11:5ec2507020da 34 #define NUM_DATA 10 //ソート用データ数
MCR_Xavier 10:adefba925268 35 #define WWIDCLR W_WidsR=W_WidsL=0
MCR_Xavier 5:20bb1e34b354 36
MCR_Xavier 5:20bb1e34b354 37 SB1602E lcd(PB_9,PB_8); //LCD_I2C設定(SDA, SCL)
MCR_Xavier 7:c99fe0eb544a 38 SDFileSystem sd(PA_7,PA_6,PA_5,PB_6,"sd"); // MOSI, MISO, SCK, CS
screamer 0:525c842a3c89 39 FILE *fp;
MCR_Xavier 11:5ec2507020da 40
MCR_Xavier 5:20bb1e34b354 41 //センサ入力
MCR_Xavier 11:5ec2507020da 42 DigitalIn RS1(PC_10); //ロータリースイッチbit1
MCR_Xavier 11:5ec2507020da 43 DigitalIn RS2(PA_15); //ロータリースイッチbit2
MCR_Xavier 11:5ec2507020da 44 DigitalIn RS3(PA_12); //ロータリースイッチbit3
MCR_Xavier 5:20bb1e34b354 45 DigitalIn RS4(PA_9); //ロータリースイッチbit4
MCR_Xavier 5:20bb1e34b354 46 AnalogIn Line0(PC_0); //アナログラインセンサ
MCR_Xavier 5:20bb1e34b354 47 AnalogIn Line1(PC_1); //アナログラインセンサ
MCR_Xavier 5:20bb1e34b354 48 AnalogIn Line2(PC_2); //アナログラインセンサ
MCR_Xavier 5:20bb1e34b354 49 AnalogIn Line3(PC_3); //アナログラインセンサ
MCR_Xavier 5:20bb1e34b354 50 AnalogIn Line4(PA_0); //アナログラインセンサ
MCR_Xavier 5:20bb1e34b354 51 AnalogIn Line5(PA_1); //アナログラインセンサ
MCR_Xavier 5:20bb1e34b354 52 AnalogIn Line6(PA_2); //アナログラインセンサ
MCR_Xavier 5:20bb1e34b354 53 AnalogIn Line7(PA_3); //アナログラインセンサ
MCR_Xavier 5:20bb1e34b354 54 AnalogIn Steer_Ptm(PA_4); //ステアリングポテンショ
MCR_Xavier 5:20bb1e34b354 55 AnalogIn Lance_Ptm(PC_4); //槍ポテンショ
MCR_Xavier 5:20bb1e34b354 56 DigitalIn SW_W(PB_5); //スイッチ白
MCR_Xavier 5:20bb1e34b354 57 DigitalIn SW_R(PC_6); //スイッチ赤
MCR_Xavier 11:5ec2507020da 58 DigitalIn SW_B(PC_12); //スイッチ黒
MCR_Xavier 5:20bb1e34b354 59 InterruptIn s0signal(D6); //ロータリエンコーダA相
MCR_Xavier 5:20bb1e34b354 60 InterruptIn s1signal(D7); //ロータリエンコーダB相
MCR_Xavier 11:5ec2507020da 61
MCR_Xavier 5:20bb1e34b354 62 //モータ制御
MCR_Xavier 11:5ec2507020da 63 PwmOut PWM_CH1(PC_7); //3/2槍
MCR_Xavier 11:5ec2507020da 64 PwmOut PWM_CH2(PA_11); //1/4前左
MCR_Xavier 11:5ec2507020da 65 PwmOut PWM_CH3(PB_2); //2/4前右
MCR_Xavier 11:5ec2507020da 66 PwmOut PWM_CH4(PB_7); //4/2後右
MCR_Xavier 11:5ec2507020da 67 PwmOut PWM_CH5(PA_10); //1/3後左
MCR_Xavier 11:5ec2507020da 68 PwmOut PWM_CH6(PB_4); //3/1操舵
MCR_Xavier 11:5ec2507020da 69 DigitalOut Rev_CH1(PB_12); //操舵モータDIR
MCR_Xavier 11:5ec2507020da 70 DigitalOut Rev_CH2(PB_13); //前左モータDIR
MCR_Xavier 11:5ec2507020da 71 DigitalOut Rev_CH3(PC_8); //前右モータDIR
MCR_Xavier 11:5ec2507020da 72 DigitalOut Rev_CH4(PC_9); //後右モータDIR
MCR_Xavier 11:5ec2507020da 73 DigitalOut Rev_CH5(PB_14); //後左モータDIR
MCR_Xavier 11:5ec2507020da 74 DigitalOut Rev_CH6(PB_15); //槍モータDIR
MCR_Xavier 11:5ec2507020da 75 DigitalOut SensLED(PC_11); //センサ用LED
MCR_Xavier 11:5ec2507020da 76 DigitalOut ST_CTR(PB_0); //STEER_EnableCtrl
MCR_Xavier 11:5ec2507020da 77 DigitalOut OTH_CTR(PB_1); //OTHER_EnableCtrl
MCR_Xavier 11:5ec2507020da 78
MCR_Xavier 5:20bb1e34b354 79 //デバッグ
MCR_Xavier 11:5ec2507020da 80 DigitalOut LED_R(PA_13); //LED_R
MCR_Xavier 11:5ec2507020da 81 DigitalOut LED_G(PA_14); //LED_G
MCR_Xavier 11:5ec2507020da 82 DigitalOut LED_B(PB_3); //LED_B
MCR_Xavier 11:5ec2507020da 83
MCR_Xavier 5:20bb1e34b354 84 //割り込み定義
MCR_Xavier 11:5ec2507020da 85 Ticker flipper; //汎用タイマー
MCR_Xavier 11:5ec2507020da 86 Ticker sensget; //センサー用タイマー
MCR_Xavier 5:20bb1e34b354 87
MCR_Xavier 5:20bb1e34b354 88 //プロトタイプ宣言
MCR_Xavier 11:5ec2507020da 89 void init(void); //マイコン初期設定
MCR_Xavier 11:5ec2507020da 90 void MotorCtrl(void); //モータ管理
MCR_Xavier 11:5ec2507020da 91 void enc(); //エンコーダ処理
MCR_Xavier 11:5ec2507020da 92 int ModeSW(); //モードスイッチ値取得
MCR_Xavier 11:5ec2507020da 93 int Get_SW(); //スイッチ値取得
MCR_Xavier 11:5ec2507020da 94 void Get_Pot(); //ポテンショメータA/D取得
MCR_Xavier 11:5ec2507020da 95 void SpeedCtrl(int V); //速度制御
MCR_Xavier 11:5ec2507020da 96 int PotTest(); //ポテンショテスト
MCR_Xavier 11:5ec2507020da 97 float PwmTest(); //PWMテスト
MCR_Xavier 11:5ec2507020da 98 void SD_Mount(); //SDカードをマウントする
MCR_Xavier 11:5ec2507020da 99 void SD_Unmount(); //SDカードをアンマウントする
MCR_Xavier 11:5ec2507020da 100 void DSens(); //センサ変調処理
MCR_Xavier 11:5ec2507020da 101 void LineTrace(); //ライントレース
MCR_Xavier 11:5ec2507020da 102 void ErrChk(void); //エラーチェック
MCR_Xavier 11:5ec2507020da 103 void LanceAng(int Ang); //槍角度制御
MCR_Xavier 11:5ec2507020da 104 void Line_Dec(void); //白線判定
MCR_Xavier 11:5ec2507020da 105 void enCalc(void); //エンコーダ計算とか
MCR_Xavier 11:5ec2507020da 106 void Debug(void); //デバッグモード
MCR_Xavier 11:5ec2507020da 107 void SD_Log(void); //SDログ
MCR_Xavier 11:5ec2507020da 108 void SD_WriteSq(void); //SD書き込み
MCR_Xavier 11:5ec2507020da 109 void TmpLog(void); //内部メモリへのログ
MCR_Xavier 11:5ec2507020da 110 void SteerCtrl(char STMode); //ステアリングコントロール
MCR_Xavier 11:5ec2507020da 111 void AngleCtrl(int STAngle); //角度制御モード
MCR_Xavier 11:5ec2507020da 112 void Localization(void); // 位置推定
MCR_Xavier 11:5ec2507020da 113 void led_color(char R , char G , char B ); //LED色制御
MCR_Xavier 11:5ec2507020da 114 void ModeSelect(); //モード選択
MCR_Xavier 11:5ec2507020da 115
MCR_Xavier 5:20bb1e34b354 116
MCR_Xavier 5:20bb1e34b354 117 //グローバル変数の宣言
MCR_Xavier 11:5ec2507020da 118 int EnCount=0;
MCR_Xavier 11:5ec2507020da 119 long EnCountI=0; //エンコーダカウント
MCR_Xavier 11:5ec2507020da 120 int EnCount_1R=0; //コース1周分のエンコーダカウント毎週リセットされる
MCR_Xavier 11:5ec2507020da 121 unsigned char Rev=0; //エンコーダ回転方向判定
MCR_Xavier 11:5ec2507020da 122 unsigned char SD_Flag=0; //SDカードの状態判定
MCR_Xavier 11:5ec2507020da 123 unsigned char Line_Flg; //ライン情報フラグ
MCR_Xavier 11:5ec2507020da 124 unsigned char Shortcut_Flg=0; //ショートカットフラグ
MCR_Xavier 11:5ec2507020da 125 unsigned char Turbo_Flg=0; //コーナー出口のターボフラグ
MCR_Xavier 11:5ec2507020da 126 unsigned char R_Go = 15;
MCR_Xavier 11:5ec2507020da 127 unsigned char TestDrive_Flg=0; //駆動輪フリー
MCR_Xavier 11:5ec2507020da 128 unsigned char LancFree_Flg=0; //槍フリー
MCR_Xavier 11:5ec2507020da 129 int timer1=0,timer2=0,Tmpcnt=0,Log_timer=0; //タイマー
MCR_Xavier 5:20bb1e34b354 130 int Stime=0;
MCR_Xavier 11:5ec2507020da 131 char StartFlg=0;
MCR_Xavier 5:20bb1e34b354 132 unsigned long long cntT=0;
MCR_Xavier 5:20bb1e34b354 133 int ONSensData[8],OFFSensData[8],DSensData[8],TFSensData[8];//ラインセンサ値
MCR_Xavier 10:adefba925268 134 int Pot_F=0,Pot_R=0,Pot_F2=0,StrPot_R[10]; //ポテンショ
MCR_Xavier 5:20bb1e34b354 135 char LA_Rev,FL_Rev,FR_Rev,RR_Rev,RL_Rev,ST_Rev; //モータ回転方向
MCR_Xavier 5:20bb1e34b354 136 int LA_PWM=0,FL_PWM=0,FR_PWM=0,RR_PWM=0,RL_PWM=0,ST_PWM=0; //モータPWMデューティ
MCR_Xavier 11:5ec2507020da 137 int ErrSt=0;
MCR_Xavier 11:5ec2507020da 138 int Speed=0,Angle=0,STAngle=0;
MCR_Xavier 11:5ec2507020da 139 int iAng=0;
MCR_Xavier 11:5ec2507020da 140 long iV=0;
MCR_Xavier 5:20bb1e34b354 141 int TraceI,Trace_P=0,Trace_I=0,Trace_D=0,Trace_B=0;
MCR_Xavier 9:8ab0d3e46c3c 142 int Angle_P=0,Angle_I=0,Angle_D=0,Angle_B=0;
MCR_Xavier 5:20bb1e34b354 143 int RSW_Value;
MCR_Xavier 5:20bb1e34b354 144 char Turn_Flg=0;
MCR_Xavier 11:5ec2507020da 145 char ModeSelect_Flg=0;
MCR_Xavier 6:32698402be64 146 unsigned int R_LineCnt=0,L_LineCnt=0,R_LineCntF=0,L_LineCntF=0;
MCR_Xavier 5:20bb1e34b354 147 char R_LineFlg=0,L_LineFlg=0;
MCR_Xavier 5:20bb1e34b354 148 char DebugFlg=0;
MCR_Xavier 11:5ec2507020da 149 long W_WidsR=0,W_WidsL=0,W_WidsRCnt=0,W_WidsLCnt=0,dAng;
MCR_Xavier 6:32698402be64 150 unsigned char Count_C=0,Count_R=0,Count_L=0,Count_H=0;
MCR_Xavier 11:5ec2507020da 151 unsigned char R_No=1;
MCR_Xavier 6:32698402be64 152 int ParamS=1;
MCR_Xavier 11:5ec2507020da 153 int SPCom=4500,SPYobi=4500,SPCor=3200,loopJump=1000000,linewide=100;
MCR_Xavier 11:5ec2507020da 154 int TripTime =60000; //走行時間
MCR_Xavier 11:5ec2507020da 155 int AccelStopCnt = 1000; //駆動停止カウント
MCR_Xavier 11:5ec2507020da 156 int MotorStopCnt = 2000; //モータ停止カウント
MCR_Xavier 9:8ab0d3e46c3c 157 char SteerAngle;
MCR_Xavier 9:8ab0d3e46c3c 158 char SteerMode=0;
MCR_Xavier 11:5ec2507020da 159 char DefFlg=0;
MCR_Xavier 11:5ec2507020da 160 int FrontPot[NUM_DATA + 1],RearPot[NUM_DATA + 1];
MCR_Xavier 5:20bb1e34b354 161
MCR_Xavier 7:c99fe0eb544a 162 char Log_table[10][10];
MCR_Xavier 11:5ec2507020da 163 int Log_W_Wids[300][2];
MCR_Xavier 11:5ec2507020da 164 char Log_W_WidsLR[300];
MCR_Xavier 11:5ec2507020da 165 char Log_Count_R[300];
MCR_Xavier 11:5ec2507020da 166 char Log_tmp[100][6];
MCR_Xavier 12:2cb9082e2d40 167 char LLog_tmp[300];
MCR_Xavier 7:c99fe0eb544a 168 int Sensecnt=0,writeflg=0;
MCR_Xavier 7:c99fe0eb544a 169
MCR_Xavier 7:c99fe0eb544a 170 unsigned char WidsNo=0;
MCR_Xavier 7:c99fe0eb544a 171 char Logcnt=0;
MCR_Xavier 5:20bb1e34b354 172 char Trace_table[]={
MCR_Xavier 5:20bb1e34b354 173 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,3,3,
MCR_Xavier 5:20bb1e34b354 174 3,4,4,4,5,5,6,6,7,7,8,8,9,10,10,11,12,13,13,14,15,16,17,18,19,20,
MCR_Xavier 5:20bb1e34b354 175 22,23,24,25,27,28,30,31,33,34,36,38,39,41,43,45,47,49,51,53,56,
MCR_Xavier 5:20bb1e34b354 176 58,60,63,65,68,70,73,76,79,82,85,88,91,94,98,101,104,108,112,115,
MCR_Xavier 5:20bb1e34b354 177 119,123};
MCR_Xavier 5:20bb1e34b354 178 char Trace_table2[]={0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
MCR_Xavier 5:20bb1e34b354 179 3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,
MCR_Xavier 5:20bb1e34b354 180 9,10,10,10,10,11,11,11,12,12,12,13,13,13,14,14,14,15,15,15,16,16,
MCR_Xavier 5:20bb1e34b354 181 16,17,17,18,18,18,19,19,19,20,20};
MCR_Xavier 5:20bb1e34b354 182
MCR_Xavier 5:20bb1e34b354 183 float Motor_TableA[]={
MCR_Xavier 11:5ec2507020da 184 0.99,0.98,0.97,0.96,0.95,0.95,0.94,0.93,0.92,0.92,0.91,0.91,0.90,
MCR_Xavier 11:5ec2507020da 185 0.90,0.89,0.89,0.88,0.88,0.88,0.88,0.87,0.87,0.87,0.87,0.87,0.87,
MCR_Xavier 11:5ec2507020da 186 0.87,0.87,0.88,0.88,0.88,0.89,0.89,0.90,0.90,0.91,0.92,0.93,0.94,
MCR_Xavier 11:5ec2507020da 187 0.95,0.96,0.97,0.99,1.01,1.02,1.05,1.07,1.09,1.12,1.15};
MCR_Xavier 11:5ec2507020da 188
MCR_Xavier 5:20bb1e34b354 189 float Motor_TableB[]={
MCR_Xavier 11:5ec2507020da 190 1.01,1.02,1.03,1.04,1.06,1.07,1.08,1.10,1.11,1.13,1.14,1.16,1.18,
MCR_Xavier 11:5ec2507020da 191 1.19,1.21,1.23,1.25,1.27,1.29,1.31,1.34,1.36,1.39,1.41,1.44,1.47,
MCR_Xavier 11:5ec2507020da 192 1.50,1.53,1.56,1.59,1.63,1.67,1.70,1.75,1.79,1.83,1.88,1.93,1.98,
MCR_Xavier 11:5ec2507020da 193 2.04,2.10,2.16,2.23,2.30,2.38,2.46,2.55,2.64,2.74,2.85};
MCR_Xavier 11:5ec2507020da 194
MCR_Xavier 5:20bb1e34b354 195 float Motor_TableC[]={
MCR_Xavier 11:5ec2507020da 196 0.99,0.98,0.97,0.96,0.95,0.94,0.93,0.92,0.91,0.90,0.88,0.87,0.86,
MCR_Xavier 11:5ec2507020da 197 0.85,0.84,0.83,0.82,0.81,0.79,0.78,0.77,0.76,0.74,0.73,0.72,0.70,
MCR_Xavier 11:5ec2507020da 198 0.69,0.67,0.66,0.64,0.63,0.61,0.59,0.58,0.56,0.54,0.52,0.50,0.48,
MCR_Xavier 11:5ec2507020da 199 0.45,0.43,0.41,0.38,0.35,0.32,0.29,0.26,0.23,0.19,0.15};
MCR_Xavier 11:5ec2507020da 200
MCR_Xavier 5:20bb1e34b354 201 float Motor_TableD[]={
MCR_Xavier 11:5ec2507020da 202 1.01,1.02,1.03,1.04,1.05,1.06,1.07,1.08,1.09,1.10,1.12,1.13,1.14,
MCR_Xavier 11:5ec2507020da 203 1.15,1.16,1.17,1.18,1.19,1.21,1.22,1.23,1.24,1.26,1.27,1.28,1.30,
MCR_Xavier 11:5ec2507020da 204 1.31,1.33,1.34,1.36,1.37,1.39,1.41,1.42,1.44,1.46,1.48,1.50,1.52,
MCR_Xavier 11:5ec2507020da 205 1.55,1.57,1.59,1.62,1.65,1.68,1.71,1.74,1.77,1.81,1.85};
MCR_Xavier 5:20bb1e34b354 206
MCR_Xavier 7:c99fe0eb544a 207 ////////////////////////////////////////////////
MCR_Xavier 7:c99fe0eb544a 208 //-------------ベースプログラム-----------------//
MCR_Xavier 7:c99fe0eb544a 209 ////////////////////////////////////////////////
MCR_Xavier 5:20bb1e34b354 210 //----------モードSW--------------------
MCR_Xavier 5:20bb1e34b354 211 int ModeSW(){
MCR_Xavier 5:20bb1e34b354 212 char RSW=0;
MCR_Xavier 5:20bb1e34b354 213 if(RS1)RSW += 1;
MCR_Xavier 5:20bb1e34b354 214 if(RS2)RSW += 2;
MCR_Xavier 5:20bb1e34b354 215 if(RS3)RSW += 4;
MCR_Xavier 5:20bb1e34b354 216 if(RS4)RSW += 8;
MCR_Xavier 5:20bb1e34b354 217 RSW_Value=int(RSW);
MCR_Xavier 5:20bb1e34b354 218 return RSW;}
MCR_Xavier 7:c99fe0eb544a 219 //----------SW情報取得--------------------
MCR_Xavier 7:c99fe0eb544a 220 int Get_SW(){
MCR_Xavier 7:c99fe0eb544a 221 char SW_Val=0;
MCR_Xavier 7:c99fe0eb544a 222 if(SW_W)SW_Val |= 0x01;
MCR_Xavier 7:c99fe0eb544a 223 if(SW_R)SW_Val |= 0x02;
MCR_Xavier 7:c99fe0eb544a 224 if(SW_B)SW_Val |= 0x04;
MCR_Xavier 7:c99fe0eb544a 225 return SW_Val;}
MCR_Xavier 5:20bb1e34b354 226 //----------エラーチェック--------------------
MCR_Xavier 5:20bb1e34b354 227 void ErrChk(void){
MCR_Xavier 11:5ec2507020da 228 if(timer1 >= TripTime && StartFlg && Count_R == 12) ErrSt = AccelStopCnt;
MCR_Xavier 11:5ec2507020da 229 if(Pot_F >= 47 || Pot_F <= (-47)) ErrSt++;
MCR_Xavier 11:5ec2507020da 230 if(DSensData[3] <= 250 && DSensData[4] <= 250 && StartFlg && SteerMode != ANGLE ) ErrSt = ErrSt + 5;
MCR_Xavier 11:5ec2507020da 231 else if(ErrSt < 1000 && Pot_F == 0 ) ErrSt=0;
MCR_Xavier 11:5ec2507020da 232 if(ErrSt >= MotorStopCnt ) ErrSt = MotorStopCnt;
MCR_Xavier 5:20bb1e34b354 233 }
MCR_Xavier 7:c99fe0eb544a 234 //-----------エンコーダカウント------------------
MCR_Xavier 7:c99fe0eb544a 235 void s0_trigger_rise() { // A相立上り変化割込み時の処理 (Low -> High)
MCR_Xavier 7:c99fe0eb544a 236 Rev |= 0x01;
MCR_Xavier 7:c99fe0eb544a 237 if(Rev&0x10) EnCount--;
MCR_Xavier 7:c99fe0eb544a 238 else EnCount++;
MCR_Xavier 7:c99fe0eb544a 239 }
MCR_Xavier 7:c99fe0eb544a 240 void s0_trigger_fall() { // A相立下り変化割込み時の処理 (High -> Low)
MCR_Xavier 7:c99fe0eb544a 241 Rev &= ~0x01;
MCR_Xavier 7:c99fe0eb544a 242 if(Rev&0x10) EnCount++;
MCR_Xavier 7:c99fe0eb544a 243 else EnCount--;
MCR_Xavier 7:c99fe0eb544a 244 }
MCR_Xavier 7:c99fe0eb544a 245 void s1_trigger_rise() { // B相立上り変化割込み時の処理 (Low -> High)
MCR_Xavier 7:c99fe0eb544a 246 Rev |= 0x10;
MCR_Xavier 7:c99fe0eb544a 247 if(Rev&0x01) EnCount++;
MCR_Xavier 7:c99fe0eb544a 248 else EnCount--;
MCR_Xavier 7:c99fe0eb544a 249 }
MCR_Xavier 7:c99fe0eb544a 250 void s1_trigger_fall() { // B相立下り変化割込み時の処理 (High -> Low)
MCR_Xavier 7:c99fe0eb544a 251 Rev &= ~0x10;
MCR_Xavier 7:c99fe0eb544a 252 if(Rev&0x01) EnCount--;
MCR_Xavier 7:c99fe0eb544a 253 else EnCount++;
MCR_Xavier 7:c99fe0eb544a 254 }
MCR_Xavier 7:c99fe0eb544a 255 //----------エンコーダ計算--------------------
MCR_Xavier 7:c99fe0eb544a 256 void enCalc(void){
MCR_Xavier 7:c99fe0eb544a 257 EnCountI = EnCountI + EnCount;
MCR_Xavier 10:adefba925268 258 EnCount_1R = EnCount_1R + EnCount;
MCR_Xavier 7:c99fe0eb544a 259 EnCount = 0;
MCR_Xavier 7:c99fe0eb544a 260 }
MCR_Xavier 7:c99fe0eb544a 261 //----------フルカラーLED制御--------------------
MCR_Xavier 7:c99fe0eb544a 262 void led_color(char R , char G , char B )
MCR_Xavier 7:c99fe0eb544a 263 {
MCR_Xavier 11:5ec2507020da 264 if(LancFree_Flg)R=G=B=1;
MCR_Xavier 7:c99fe0eb544a 265 if ( R ) LED_R = 1;
MCR_Xavier 7:c99fe0eb544a 266 else LED_R = 0;
MCR_Xavier 7:c99fe0eb544a 267 if ( G ) LED_G = 1;
MCR_Xavier 7:c99fe0eb544a 268 else LED_G = 0;
MCR_Xavier 7:c99fe0eb544a 269 if ( B ) LED_B = 1;
MCR_Xavier 7:c99fe0eb544a 270 else LED_B = 0;
MCR_Xavier 7:c99fe0eb544a 271 }
MCR_Xavier 7:c99fe0eb544a 272 //----------センサー値の取得---------------
MCR_Xavier 7:c99fe0eb544a 273 void sensGet(){
MCR_Xavier 10:adefba925268 274 if(Stime >= 10) {
MCR_Xavier 10:adefba925268 275 Stime=0;
MCR_Xavier 11:5ec2507020da 276 //Hpsort(FrontPot, NUM_DATA);
MCR_Xavier 11:5ec2507020da 277 //Hpsort(RearPot, NUM_DATA);
MCR_Xavier 11:5ec2507020da 278 //Get_Pot();
MCR_Xavier 10:adefba925268 279 }
MCR_Xavier 7:c99fe0eb544a 280 if(Stime == 0 ) SensLED=0;
MCR_Xavier 7:c99fe0eb544a 281 if(Stime == 5 ) SensLED=1;
MCR_Xavier 7:c99fe0eb544a 282 if(Stime == 4 ) {
MCR_Xavier 7:c99fe0eb544a 283 OFFSensData[0] = Line0.read_u16()>>DSs;
MCR_Xavier 7:c99fe0eb544a 284 OFFSensData[1] = Line1.read_u16()>>DSs;
MCR_Xavier 7:c99fe0eb544a 285 OFFSensData[2] = Line2.read_u16()>>ASs;
MCR_Xavier 7:c99fe0eb544a 286 OFFSensData[3] = Line3.read_u16()>>ASs;
MCR_Xavier 7:c99fe0eb544a 287 OFFSensData[4] = Line4.read_u16()>>ASs;
MCR_Xavier 7:c99fe0eb544a 288 OFFSensData[5] = Line5.read_u16()>>ASs;
MCR_Xavier 7:c99fe0eb544a 289 OFFSensData[6] = Line6.read_u16()>>DSs;
MCR_Xavier 7:c99fe0eb544a 290 OFFSensData[7] = Line7.read_u16()>>DSs;
MCR_Xavier 7:c99fe0eb544a 291 }
MCR_Xavier 7:c99fe0eb544a 292 if(Stime == 9 ) {
MCR_Xavier 7:c99fe0eb544a 293 ONSensData[0] = Line0.read_u16()>>DSs;
MCR_Xavier 7:c99fe0eb544a 294 ONSensData[1] = Line1.read_u16()>>DSs;
MCR_Xavier 7:c99fe0eb544a 295 ONSensData[2] = Line2.read_u16()>>ASs;
MCR_Xavier 7:c99fe0eb544a 296 ONSensData[3] = Line3.read_u16()>>ASs;
MCR_Xavier 7:c99fe0eb544a 297 ONSensData[4] = Line4.read_u16()>>ASs;
MCR_Xavier 7:c99fe0eb544a 298 ONSensData[5] = Line5.read_u16()>>ASs;
MCR_Xavier 7:c99fe0eb544a 299 ONSensData[6] = Line6.read_u16()>>DSs;
MCR_Xavier 7:c99fe0eb544a 300 ONSensData[7] = Line7.read_u16()>>DSs;
MCR_Xavier 7:c99fe0eb544a 301 }
MCR_Xavier 11:5ec2507020da 302 //FrontPot[Stime] = Steer_Ptm.read_u16()>>6;
MCR_Xavier 11:5ec2507020da 303 //RearPot[Stime] = Lance_Ptm.read_u16()>>6;
MCR_Xavier 7:c99fe0eb544a 304 Stime++;
MCR_Xavier 9:8ab0d3e46c3c 305 }
MCR_Xavier 9:8ab0d3e46c3c 306 //----------ポテンショ値の取得---------------
MCR_Xavier 9:8ab0d3e46c3c 307 void Get_Pot(){
MCR_Xavier 9:8ab0d3e46c3c 308
MCR_Xavier 9:8ab0d3e46c3c 309 Pot_F2 = (DFP-(Steer_Ptm.read_u16()>>6));
MCR_Xavier 11:5ec2507020da 310 //Pot_F2 = DFP - FrontPot[4];
MCR_Xavier 11:5ec2507020da 311 Pot_F = int(Pot_F2/3);
MCR_Xavier 11:5ec2507020da 312 //Pot_R = RearPot[4];
MCR_Xavier 11:5ec2507020da 313 Pot_R = Lance_Ptm.read_u16()>>6;
MCR_Xavier 9:8ab0d3e46c3c 314 }
MCR_Xavier 7:c99fe0eb544a 315 //----------センサー値差分の計算---------------
MCR_Xavier 7:c99fe0eb544a 316 void DSens(){
MCR_Xavier 7:c99fe0eb544a 317
MCR_Xavier 7:c99fe0eb544a 318 int sensorno;
MCR_Xavier 7:c99fe0eb544a 319 for(sensorno=0;sensorno<=7;sensorno++){
MCR_Xavier 7:c99fe0eb544a 320 DSensData[sensorno] = OFFSensData[sensorno] - ONSensData[sensorno];
MCR_Xavier 7:c99fe0eb544a 321 if(DSensData[sensorno] >= ThS ) TFSensData[sensorno] = 1;
MCR_Xavier 7:c99fe0eb544a 322 else TFSensData[sensorno] = 0;
MCR_Xavier 7:c99fe0eb544a 323 }
MCR_Xavier 7:c99fe0eb544a 324 }
MCR_Xavier 7:c99fe0eb544a 325
MCR_Xavier 7:c99fe0eb544a 326 ////////////////////////////////////////////////
MCR_Xavier 7:c99fe0eb544a 327 //-------------便利機能プログラム---------------//
MCR_Xavier 7:c99fe0eb544a 328 ////////////////////////////////////////////////
MCR_Xavier 5:20bb1e34b354 329 //----------白線判別--------------------
MCR_Xavier 5:20bb1e34b354 330 void Line_Dec(void){
MCR_Xavier 7:c99fe0eb544a 331 char LR_Flg=0;
MCR_Xavier 6:32698402be64 332 if(TFSensData[0] && TFSensData[1] ) {
MCR_Xavier 6:32698402be64 333 R_LineCntF = 0;
MCR_Xavier 6:32698402be64 334 R_LineCnt++;}
MCR_Xavier 6:32698402be64 335 else {
MCR_Xavier 6:32698402be64 336 R_LineCnt = 0;
MCR_Xavier 6:32698402be64 337 R_LineCntF++;}
MCR_Xavier 6:32698402be64 338 if(TFSensData[6] && TFSensData[7] ) {
MCR_Xavier 6:32698402be64 339 L_LineCntF = 0;
MCR_Xavier 6:32698402be64 340 L_LineCnt++;}
MCR_Xavier 6:32698402be64 341 else {
MCR_Xavier 6:32698402be64 342 L_LineCnt = 0;
MCR_Xavier 6:32698402be64 343 L_LineCntF++;}
MCR_Xavier 5:20bb1e34b354 344
MCR_Xavier 5:20bb1e34b354 345 if(R_LineCnt >= 2 && !R_LineFlg ){
MCR_Xavier 5:20bb1e34b354 346 R_LineFlg = 1;
MCR_Xavier 5:20bb1e34b354 347 W_WidsRCnt = EnCountI;
MCR_Xavier 5:20bb1e34b354 348 }
MCR_Xavier 6:32698402be64 349 else if(!R_LineCnt && R_LineFlg && R_LineCntF >= 4 ){
MCR_Xavier 5:20bb1e34b354 350 R_LineFlg = 0;
MCR_Xavier 7:c99fe0eb544a 351 LR_Flg = 1;
MCR_Xavier 6:32698402be64 352 W_WidsR = EnCountI - W_WidsRCnt;
MCR_Xavier 7:c99fe0eb544a 353 Log_W_WidsLR[WidsNo] = LR_Flg;
MCR_Xavier 11:5ec2507020da 354 Log_Count_R[WidsNo] = Count_R;
MCR_Xavier 7:c99fe0eb544a 355 Log_W_Wids[WidsNo][0] = W_WidsR;
MCR_Xavier 11:5ec2507020da 356 //Log_W_Wids[WidsNo][1] = EnCountI;
MCR_Xavier 12:2cb9082e2d40 357 LLog_tmp[WidsNo] = EnCount;
MCR_Xavier 11:5ec2507020da 358 Log_W_Wids[WidsNo][1] = EnCount_1R;
MCR_Xavier 7:c99fe0eb544a 359 WidsNo++;
MCR_Xavier 5:20bb1e34b354 360 }
MCR_Xavier 5:20bb1e34b354 361 if(L_LineCnt >= 2 && !L_LineFlg ){
MCR_Xavier 5:20bb1e34b354 362 L_LineFlg = 1;
MCR_Xavier 5:20bb1e34b354 363 W_WidsLCnt = EnCountI;
MCR_Xavier 5:20bb1e34b354 364 }
MCR_Xavier 6:32698402be64 365 else if(!L_LineCnt && L_LineFlg && L_LineCntF >= 4 ){
MCR_Xavier 5:20bb1e34b354 366 L_LineFlg = 0;
MCR_Xavier 7:c99fe0eb544a 367 LR_Flg = 0;
MCR_Xavier 5:20bb1e34b354 368 W_WidsL = EnCountI - W_WidsLCnt;
MCR_Xavier 7:c99fe0eb544a 369 Log_W_WidsLR[WidsNo] = LR_Flg;
MCR_Xavier 11:5ec2507020da 370 Log_Count_R[WidsNo] = Count_R;
MCR_Xavier 7:c99fe0eb544a 371 Log_W_Wids[WidsNo][0] = W_WidsL;
MCR_Xavier 11:5ec2507020da 372 //Log_W_Wids[WidsNo][1] = EnCountI;
MCR_Xavier 12:2cb9082e2d40 373 LLog_tmp[WidsNo] = EnCount;
MCR_Xavier 11:5ec2507020da 374 Log_W_Wids[WidsNo][1] = EnCount_1R;
MCR_Xavier 7:c99fe0eb544a 375 WidsNo++;
MCR_Xavier 5:20bb1e34b354 376 }
MCR_Xavier 5:20bb1e34b354 377 }
MCR_Xavier 7:c99fe0eb544a 378
MCR_Xavier 5:20bb1e34b354 379 //----------モータ総合管理--------------------
MCR_Xavier 5:20bb1e34b354 380 void MotorCtrl(){
MCR_Xavier 11:5ec2507020da 381 if(ErrSt >= MotorStopCnt){ //異常判定
MCR_Xavier 5:20bb1e34b354 382 PWM_CH1.pulsewidth_us(0); //操舵PWM (0~100)
MCR_Xavier 5:20bb1e34b354 383 PWM_CH2.pulsewidth_us(0); //前左PWM (0~1000)
MCR_Xavier 5:20bb1e34b354 384 PWM_CH3.pulsewidth_us(0); //前右PWM (0~1000)
MCR_Xavier 5:20bb1e34b354 385 PWM_CH4.pulsewidth_us(0); //後右PWM (0~1000)
MCR_Xavier 5:20bb1e34b354 386 PWM_CH5.pulsewidth_us(0); //後左PWM (0~1000)
MCR_Xavier 5:20bb1e34b354 387 PWM_CH6.pulsewidth_us(0); //槍舵PWM (0~100)
MCR_Xavier 5:20bb1e34b354 388 OTH_DA;
MCR_Xavier 5:20bb1e34b354 389 }
MCR_Xavier 5:20bb1e34b354 390 else{
MCR_Xavier 11:5ec2507020da 391 if(FL_PWM >= 1000) FL_PWM = 1000;
MCR_Xavier 11:5ec2507020da 392 if(FR_PWM >= 1000) FR_PWM = 1000;
MCR_Xavier 11:5ec2507020da 393 if(RR_PWM >= 1000) RR_PWM = 1000;
MCR_Xavier 11:5ec2507020da 394 if(RL_PWM >= 1000) RL_PWM = 1000;
MCR_Xavier 5:20bb1e34b354 395 PWM_CH1.pulsewidth_us(ST_PWM); //槍PWM  (0~100)
MCR_Xavier 5:20bb1e34b354 396 PWM_CH2.pulsewidth_us(FL_PWM); //前左PWM (0~1000)
MCR_Xavier 5:20bb1e34b354 397 PWM_CH3.pulsewidth_us(FR_PWM); //前右PWM (0~1000)
MCR_Xavier 5:20bb1e34b354 398 PWM_CH4.pulsewidth_us(RR_PWM); //後右PWM (0~1000)
MCR_Xavier 5:20bb1e34b354 399 PWM_CH5.pulsewidth_us(RL_PWM); //後左PWM (0~1000)
MCR_Xavier 5:20bb1e34b354 400 PWM_CH6.pulsewidth_us(LA_PWM); //操舵PWM (0~100)
MCR_Xavier 5:20bb1e34b354 401 Rev_CH1 = ST_Rev; //槍回転方向 (H:CW)
MCR_Xavier 5:20bb1e34b354 402 Rev_CH2 = !FL_Rev; //前左回転方向(L:FW)
MCR_Xavier 5:20bb1e34b354 403 Rev_CH3 = FR_Rev; //前右回転方向(H:FW)
MCR_Xavier 5:20bb1e34b354 404 Rev_CH4 = RR_Rev; //後右回転方向(H:FW)
MCR_Xavier 5:20bb1e34b354 405 Rev_CH5 = !RL_Rev; //後左回転方向(L:FW)
MCR_Xavier 5:20bb1e34b354 406 Rev_CH6 = LA_Rev; //操舵回転方向(H:CW)
MCR_Xavier 5:20bb1e34b354 407 }
MCR_Xavier 5:20bb1e34b354 408 }
MCR_Xavier 5:20bb1e34b354 409 //----------速度制御--------------------
MCR_Xavier 5:20bb1e34b354 410 void SpeedCtrl(int V){
MCR_Xavier 11:5ec2507020da 411 long dV;
MCR_Xavier 11:5ec2507020da 412 int PT,SpeedBuf;
MCR_Xavier 11:5ec2507020da 413
MCR_Xavier 11:5ec2507020da 414 if(SpeedBuf != V) iV = 0;
MCR_Xavier 11:5ec2507020da 415 SpeedBuf = V;
MCR_Xavier 5:20bb1e34b354 416 dV=EnCount*32;
MCR_Xavier 11:5ec2507020da 417 if(ErrSt >= AccelStopCnt ){
MCR_Xavier 11:5ec2507020da 418 iV = 0;
MCR_Xavier 11:5ec2507020da 419 V = 0;}
MCR_Xavier 11:5ec2507020da 420 dV = (V - dV)*8;
MCR_Xavier 11:5ec2507020da 421 if(dV == 0) iV = 0;
MCR_Xavier 11:5ec2507020da 422 iV = iV + (dV/1000);
MCR_Xavier 11:5ec2507020da 423 dV = dV + iV;
MCR_Xavier 5:20bb1e34b354 424 if(dV <= 0){
MCR_Xavier 5:20bb1e34b354 425 dV=dV*(-1);
MCR_Xavier 5:20bb1e34b354 426 FL_Rev=FR_Rev=RR_Rev=RL_Rev=BW;
MCR_Xavier 5:20bb1e34b354 427 }
MCR_Xavier 11:5ec2507020da 428 else FL_Rev=FR_Rev=RR_Rev=RL_Rev=FW;
MCR_Xavier 7:c99fe0eb544a 429 if(dV>=1000) dV=1000;
MCR_Xavier 5:20bb1e34b354 430 if(Pot_F < 0){
MCR_Xavier 5:20bb1e34b354 431 PT = Pot_F * (-1);
MCR_Xavier 11:5ec2507020da 432 //PT = int (PT*2);
MCR_Xavier 8:352404951de8 433 if(PT >= 50 ) PT=50;
MCR_Xavier 11:5ec2507020da 434 //if(!DefFlg) PT = 0;
MCR_Xavier 5:20bb1e34b354 435 FL_PWM = int( dV * Motor_TableA[PT]);
MCR_Xavier 5:20bb1e34b354 436 FR_PWM = int( dV * Motor_TableB[PT]);
MCR_Xavier 5:20bb1e34b354 437 RL_PWM = int( dV * Motor_TableC[PT]);
MCR_Xavier 5:20bb1e34b354 438 RR_PWM = int( dV * Motor_TableD[PT]);
MCR_Xavier 5:20bb1e34b354 439 }
MCR_Xavier 5:20bb1e34b354 440 else{
MCR_Xavier 5:20bb1e34b354 441 PT = Pot_F;
MCR_Xavier 11:5ec2507020da 442 //PT = int (PT*2);
MCR_Xavier 8:352404951de8 443 if(PT >= 50 ) PT=50;
MCR_Xavier 11:5ec2507020da 444 //if(!DefFlg) PT = 0;
MCR_Xavier 5:20bb1e34b354 445 FR_PWM = int( dV * Motor_TableA[PT]);
MCR_Xavier 5:20bb1e34b354 446 FL_PWM = int( dV * Motor_TableB[PT]);
MCR_Xavier 5:20bb1e34b354 447 RR_PWM = int( dV * Motor_TableC[PT]);
MCR_Xavier 5:20bb1e34b354 448 RL_PWM = int( dV * Motor_TableD[PT]);
MCR_Xavier 5:20bb1e34b354 449 }
screamer 0:525c842a3c89 450
MCR_Xavier 5:20bb1e34b354 451 }
MCR_Xavier 5:20bb1e34b354 452 //----------槍角度制御--------------------
MCR_Xavier 5:20bb1e34b354 453 void LanceAng(int Ang){
MCR_Xavier 6:32698402be64 454 //int dAng;
MCR_Xavier 11:5ec2507020da 455
MCR_Xavier 5:20bb1e34b354 456 dAng = Pot_R - (DRP + (Ang * 3));
MCR_Xavier 5:20bb1e34b354 457 if(dAng <= 0){ //CW
MCR_Xavier 5:20bb1e34b354 458 iAng = 0;
MCR_Xavier 5:20bb1e34b354 459 LA_Rev = 1;
MCR_Xavier 5:20bb1e34b354 460 dAng = dAng * (-1);
MCR_Xavier 5:20bb1e34b354 461 }
MCR_Xavier 5:20bb1e34b354 462 else{ //CCW
MCR_Xavier 5:20bb1e34b354 463 LA_Rev = 0;
MCR_Xavier 5:20bb1e34b354 464 }
MCR_Xavier 11:5ec2507020da 465 dAng = dAng * 1;
MCR_Xavier 11:5ec2507020da 466 iAng = iAng + (dAng/50);
MCR_Xavier 11:5ec2507020da 467 dAng = dAng + iAng;
MCR_Xavier 5:20bb1e34b354 468 if(dAng >= 60) dAng = 60;
MCR_Xavier 11:5ec2507020da 469 if(LancFree_Flg && dAng >= 3)dAng = 3;
MCR_Xavier 11:5ec2507020da 470
MCR_Xavier 11:5ec2507020da 471 if(Ang >= 400) dAng=60;
MCR_Xavier 5:20bb1e34b354 472 LA_PWM = dAng;
MCR_Xavier 5:20bb1e34b354 473 }
MCR_Xavier 9:8ab0d3e46c3c 474 //------ステアリングコントロール-----------
MCR_Xavier 9:8ab0d3e46c3c 475 void SteerCtrl(char STMode){
MCR_Xavier 11:5ec2507020da 476 if(STMode == ANGLE) AngleCtrl(STAngle);
MCR_Xavier 9:8ab0d3e46c3c 477 else LineTrace();
MCR_Xavier 9:8ab0d3e46c3c 478 }
MCR_Xavier 9:8ab0d3e46c3c 479
MCR_Xavier 9:8ab0d3e46c3c 480 //-----------角度コントロール-------------
MCR_Xavier 9:8ab0d3e46c3c 481 void AngleCtrl(int STAngle){
MCR_Xavier 9:8ab0d3e46c3c 482 int Angle_V=0;
MCR_Xavier 11:5ec2507020da 483
MCR_Xavier 11:5ec2507020da 484 Angle_P=((STAngle*3) - Pot_F2)*(200);
MCR_Xavier 11:5ec2507020da 485 Angle_I = Angle_I + (Angle_P / (70));
MCR_Xavier 11:5ec2507020da 486 if(Angle_I >= 10000) Angle_I = 10000;
MCR_Xavier 11:5ec2507020da 487 if(Angle_I <= (-10000)) Angle_I = (-10000);
MCR_Xavier 9:8ab0d3e46c3c 488 Angle_D = Angle_B - Angle_P;
MCR_Xavier 9:8ab0d3e46c3c 489 Angle_B = Angle_P;
MCR_Xavier 11:5ec2507020da 490 Angle_V = Angle_P + (Angle_I ) - (Angle_D *0);
MCR_Xavier 11:5ec2507020da 491 Angle_V = Angle_V / 100;
MCR_Xavier 11:5ec2507020da 492
MCR_Xavier 11:5ec2507020da 493 /*Angle_P=((STAngle*3) - Pot_F2);
MCR_Xavier 11:5ec2507020da 494 Angle_D = Angle_B - Angle_P;
MCR_Xavier 11:5ec2507020da 495 Angle_B = Angle_P;
MCR_Xavier 11:5ec2507020da 496 //Angle_P = Angle_P*(100+(10*RSW_Value));
MCR_Xavier 9:8ab0d3e46c3c 497 Angle_I = Angle_I + (Angle_P / (10*RSW_Value));
MCR_Xavier 9:8ab0d3e46c3c 498 if(Angle_I >= 10000) Angle_I = 10000;
MCR_Xavier 9:8ab0d3e46c3c 499 if(Angle_I <= (-10000)) Angle_I = (-10000);
MCR_Xavier 11:5ec2507020da 500 Angle_V = Angle_P + (Angle_I ) - (Angle_D * 0);
MCR_Xavier 11:5ec2507020da 501 Angle_V = Angle_V / 100;*/
MCR_Xavier 9:8ab0d3e46c3c 502
MCR_Xavier 9:8ab0d3e46c3c 503 if(Angle_V <= -1){
MCR_Xavier 9:8ab0d3e46c3c 504 Angle_V = Angle_V*(-1);
MCR_Xavier 9:8ab0d3e46c3c 505 ST_Rev=0;
MCR_Xavier 9:8ab0d3e46c3c 506 if(!Turn_Flg && Angle_V >= 10) Angle_I = 0;
MCR_Xavier 9:8ab0d3e46c3c 507 Turn_Flg=1;
MCR_Xavier 9:8ab0d3e46c3c 508 }
MCR_Xavier 9:8ab0d3e46c3c 509 else {
MCR_Xavier 9:8ab0d3e46c3c 510 ST_Rev=1;
MCR_Xavier 9:8ab0d3e46c3c 511 if(Turn_Flg && Angle_V >= 10) Angle_I = 0;
MCR_Xavier 9:8ab0d3e46c3c 512 Turn_Flg=0;
MCR_Xavier 9:8ab0d3e46c3c 513 }
MCR_Xavier 7:c99fe0eb544a 514
MCR_Xavier 9:8ab0d3e46c3c 515 if(Angle_V >= 100) Angle_V=100;
MCR_Xavier 9:8ab0d3e46c3c 516 ST_PWM=Angle_V;
MCR_Xavier 9:8ab0d3e46c3c 517 }
MCR_Xavier 5:20bb1e34b354 518 //----------ライントレース---------------
MCR_Xavier 5:20bb1e34b354 519 void LineTrace(){
MCR_Xavier 5:20bb1e34b354 520 int Trace_V;
MCR_Xavier 11:5ec2507020da 521 if(SteerMode == WTRACE) TraceI=((DSensData[4]+DSensData[5]+DSensData[6]+DSensData[7])-(DSensData[3]+DSensData[2]+DSensData[1]+DSensData[0]));
MCR_Xavier 11:5ec2507020da 522 else TraceI=((DSensData[4]+DSensData[5])-(DSensData[3]+DSensData[2]));
MCR_Xavier 8:352404951de8 523 /* if(TraceI <= -1){
MCR_Xavier 5:20bb1e34b354 524 TraceI = TraceI*(-1);
MCR_Xavier 5:20bb1e34b354 525 ST_Rev=1;
MCR_Xavier 5:20bb1e34b354 526 if(!Turn_Flg) Trace_I = 0;
MCR_Xavier 5:20bb1e34b354 527 Turn_Flg=1;
MCR_Xavier 5:20bb1e34b354 528 }
MCR_Xavier 5:20bb1e34b354 529 else {
MCR_Xavier 5:20bb1e34b354 530 ST_Rev=0;
MCR_Xavier 5:20bb1e34b354 531 if(Turn_Flg) Trace_I = 0;
MCR_Xavier 5:20bb1e34b354 532 Turn_Flg=0;
MCR_Xavier 8:352404951de8 533 }*/
MCR_Xavier 11:5ec2507020da 534 Trace_P = TraceI * (10);
MCR_Xavier 5:20bb1e34b354 535 Trace_I = Trace_I + (Trace_P / (400));
MCR_Xavier 8:352404951de8 536 if(Trace_I >= 10000) Trace_I = 10000;
MCR_Xavier 8:352404951de8 537 if(Trace_I <= (-10000)) Trace_I = (-10000);
MCR_Xavier 5:20bb1e34b354 538 Trace_D = Trace_B - TraceI;
MCR_Xavier 5:20bb1e34b354 539 Trace_B = TraceI;
MCR_Xavier 8:352404951de8 540 Trace_V = Trace_P + Trace_I - (Trace_D * 50);
MCR_Xavier 5:20bb1e34b354 541 Trace_V = Trace_V / 100;
MCR_Xavier 8:352404951de8 542
MCR_Xavier 8:352404951de8 543 if(Trace_V <= -1){
MCR_Xavier 8:352404951de8 544 Trace_V = Trace_V*(-1);
MCR_Xavier 8:352404951de8 545 ST_Rev=1;
MCR_Xavier 8:352404951de8 546 if(!Turn_Flg && Trace_V >= 10) Trace_I = 0;
MCR_Xavier 8:352404951de8 547 Turn_Flg=1;
MCR_Xavier 8:352404951de8 548 }
MCR_Xavier 8:352404951de8 549 else {
MCR_Xavier 8:352404951de8 550 ST_Rev=0;
MCR_Xavier 8:352404951de8 551 if(Turn_Flg && Trace_V >= 10) Trace_I = 0;
MCR_Xavier 8:352404951de8 552 Turn_Flg=0;
MCR_Xavier 8:352404951de8 553 }
MCR_Xavier 8:352404951de8 554
MCR_Xavier 5:20bb1e34b354 555 if(Trace_V >= 100) Trace_V=100;
MCR_Xavier 5:20bb1e34b354 556 ST_PWM=Trace_V;
MCR_Xavier 5:20bb1e34b354 557 }
MCR_Xavier 10:adefba925268 558 //----------コース上自己位置推定---------------
MCR_Xavier 10:adefba925268 559 void Localization(void){
MCR_Xavier 5:20bb1e34b354 560
MCR_Xavier 11:5ec2507020da 561 if(Count_R == 0 && W_WidsR >= linewide){ //右1
MCR_Xavier 10:adefba925268 562 WWIDCLR;
MCR_Xavier 10:adefba925268 563 EnCount_1R =0;
MCR_Xavier 10:adefba925268 564 Count_R++;}
MCR_Xavier 11:5ec2507020da 565 else if(!Count_R && EnCount_1R >= 10000) Count_R++;
MCR_Xavier 10:adefba925268 566
MCR_Xavier 10:adefba925268 567 if(Count_R == 1 && W_WidsR >= linewide && EnCount_1R >= 54000){ //右2
MCR_Xavier 10:adefba925268 568 WWIDCLR;
MCR_Xavier 10:adefba925268 569 EnCount_1R = 57000;
MCR_Xavier 10:adefba925268 570 Count_R++;}
MCR_Xavier 10:adefba925268 571 else if(Count_R == 1 && EnCount_1R >= 60000) Count_R++;
MCR_Xavier 10:adefba925268 572
MCR_Xavier 11:5ec2507020da 573 if(Count_R == 2 && EnCount_1R >= 80000 && Shortcut_Flg ){ //予備減速
MCR_Xavier 11:5ec2507020da 574 Count_R++;
MCR_Xavier 11:5ec2507020da 575 EnCount_1R = 130000;
MCR_Xavier 11:5ec2507020da 576 }
MCR_Xavier 11:5ec2507020da 577 else if(Count_R == 2 && EnCount_1R >= 130000)Count_R++; //予備減速
MCR_Xavier 10:adefba925268 578
MCR_Xavier 11:5ec2507020da 579 if(Count_R == 3 && EnCount_1R >= 150000 && ( W_WidsR >= linewide || Shortcut_Flg )){ //コーナ1IN
MCR_Xavier 10:adefba925268 580 WWIDCLR;
MCR_Xavier 10:adefba925268 581 EnCount_1R = 153000;
MCR_Xavier 10:adefba925268 582 Count_R++;}
MCR_Xavier 10:adefba925268 583 else if(Count_R == 3 && EnCount_1R >= 156000) Count_R++;
MCR_Xavier 10:adefba925268 584
MCR_Xavier 11:5ec2507020da 585 if(Count_R == 4 && EnCount_1R >= 205000 && W_WidsR >= linewide && !Shortcut_Flg){ //コーナ1OUT
MCR_Xavier 10:adefba925268 586 WWIDCLR;
MCR_Xavier 10:adefba925268 587 EnCount_1R = 208000;
MCR_Xavier 10:adefba925268 588 Count_R++;}
MCR_Xavier 11:5ec2507020da 589 else if(Count_R == 4 && EnCount_1R >= 221000 && !Shortcut_Flg ) Count_R++;
MCR_Xavier 11:5ec2507020da 590 else if(Count_R == 4 && EnCount_1R >= 170000 && (DSensData[3] >= 400 || DSensData[4] >= 400 || DSensData[5] >= 400 || DSensData[6] >= 100 || DSensData[7] >= 100 || DSensData[0] >= 100 || DSensData[1] >= 100 || DSensData[2] >= 400) && Shortcut_Flg ){
MCR_Xavier 11:5ec2507020da 591 SteerMode = WTRACE;
MCR_Xavier 11:5ec2507020da 592 WWIDCLR;
MCR_Xavier 11:5ec2507020da 593 EnCount_1R = 239000;
MCR_Xavier 11:5ec2507020da 594 Count_R++;}
MCR_Xavier 11:5ec2507020da 595 else if(Count_R == 4 && EnCount_1R >= 200000 && Shortcut_Flg ) {
MCR_Xavier 11:5ec2507020da 596 SteerMode = TRACE;
MCR_Xavier 11:5ec2507020da 597 WWIDCLR;
MCR_Xavier 11:5ec2507020da 598 ErrSt = 1000;
MCR_Xavier 11:5ec2507020da 599 EnCount_1R = 239000;
MCR_Xavier 11:5ec2507020da 600 Count_R++;}
MCR_Xavier 11:5ec2507020da 601
MCR_Xavier 10:adefba925268 602
MCR_Xavier 11:5ec2507020da 603 if(Count_R == 5 && EnCount_1R >= 239000 && ( W_WidsR >= linewide || Shortcut_Flg)){ //右3
MCR_Xavier 10:adefba925268 604 WWIDCLR;
MCR_Xavier 10:adefba925268 605 EnCount_1R = 242000;
MCR_Xavier 10:adefba925268 606 Count_R++;}
MCR_Xavier 10:adefba925268 607 else if(Count_R == 5 && EnCount_1R >= 245000) Count_R++;
MCR_Xavier 10:adefba925268 608
MCR_Xavier 11:5ec2507020da 609 if(Count_R == 6 && W_WidsL >= linewide && EnCount_1R >= 290000){ //左1
MCR_Xavier 10:adefba925268 610 WWIDCLR;
MCR_Xavier 10:adefba925268 611 EnCount_1R = 299000;
MCR_Xavier 10:adefba925268 612 Count_R++;}
MCR_Xavier 10:adefba925268 613 else if(Count_R == 6 && EnCount_1R >= 302000) Count_R++;
MCR_Xavier 10:adefba925268 614
MCR_Xavier 11:5ec2507020da 615 if(Count_R == 7 && W_WidsR >= linewide && EnCount_1R >= 330000){ //右3
MCR_Xavier 10:adefba925268 616 WWIDCLR;
MCR_Xavier 10:adefba925268 617 EnCount_1R = 342000;
MCR_Xavier 10:adefba925268 618 Count_R++;}
MCR_Xavier 11:5ec2507020da 619 else if(Count_R == 7 && EnCount_1R >= 350000) Count_R++;
MCR_Xavier 10:adefba925268 620
MCR_Xavier 11:5ec2507020da 621 if(Count_R == 8 && W_WidsL >= linewide && EnCount_1R >= 380000){ //左2
MCR_Xavier 10:adefba925268 622 WWIDCLR;
MCR_Xavier 10:adefba925268 623 EnCount_1R = 385000;
MCR_Xavier 10:adefba925268 624 Count_R++;}
MCR_Xavier 10:adefba925268 625 else if(Count_R == 8 && EnCount_1R >= 388000) Count_R++;
MCR_Xavier 10:adefba925268 626
MCR_Xavier 10:adefba925268 627 if(Count_R == 9 && EnCount_1R >= 400000)Count_R++; //予備減速
MCR_Xavier 10:adefba925268 628
MCR_Xavier 10:adefba925268 629 if(Count_R == 10 && W_WidsR >= linewide && EnCount_1R >= 422000){ //コーナ1IN
MCR_Xavier 10:adefba925268 630 WWIDCLR;
MCR_Xavier 10:adefba925268 631 EnCount_1R = 425000;
MCR_Xavier 10:adefba925268 632 Count_R++;}
MCR_Xavier 10:adefba925268 633 else if(Count_R == 10 && EnCount_1R >= 428000) Count_R++;
MCR_Xavier 10:adefba925268 634
MCR_Xavier 11:5ec2507020da 635 if(Count_R == 11 && W_WidsR >= linewide && EnCount_1R >= 470000 && R_No != R_Go){ //コーナ1OUT
MCR_Xavier 10:adefba925268 636 WWIDCLR;
MCR_Xavier 10:adefba925268 637 EnCount_1R = 480000;
MCR_Xavier 10:adefba925268 638 Count_R++;}
MCR_Xavier 11:5ec2507020da 639 else if(Count_R == 11 && EnCount_1R >= 483000 && R_No != R_Go) Count_R++;
MCR_Xavier 10:adefba925268 640
MCR_Xavier 11:5ec2507020da 641 if(Count_R >= 12 && W_WidsR >= linewide && EnCount_1R >= 500000){ //右1
MCR_Xavier 10:adefba925268 642 Count_C++;
MCR_Xavier 10:adefba925268 643 WWIDCLR;
MCR_Xavier 10:adefba925268 644 EnCount_1R =0;
MCR_Xavier 11:5ec2507020da 645 Count_R = 1;
MCR_Xavier 11:5ec2507020da 646 R_No ++;}
MCR_Xavier 11:5ec2507020da 647 else if(Count_R >= 12 && EnCount_1R >= 550000){
MCR_Xavier 10:adefba925268 648 Count_C++;
MCR_Xavier 10:adefba925268 649 EnCount_1R = 3000;
MCR_Xavier 11:5ec2507020da 650 Count_R = 1;
MCR_Xavier 11:5ec2507020da 651 R_No ++;}
MCR_Xavier 10:adefba925268 652
MCR_Xavier 10:adefba925268 653 }
MCR_Xavier 5:20bb1e34b354 654 //----------タイマー割り込み---------------
MCR_Xavier 5:20bb1e34b354 655 void flip(){
MCR_Xavier 5:20bb1e34b354 656 timer1++;
MCR_Xavier 11:5ec2507020da 657 timer2++;
MCR_Xavier 11:5ec2507020da 658 //Log_timer++;
MCR_Xavier 11:5ec2507020da 659 ErrChk();
MCR_Xavier 9:8ab0d3e46c3c 660 Get_Pot();
MCR_Xavier 5:20bb1e34b354 661 DSens();
MCR_Xavier 9:8ab0d3e46c3c 662 SteerCtrl(SteerMode);
MCR_Xavier 11:5ec2507020da 663 if(!TestDrive_Flg)SpeedCtrl(Speed);
MCR_Xavier 5:20bb1e34b354 664 MotorCtrl();
MCR_Xavier 5:20bb1e34b354 665 Line_Dec();
MCR_Xavier 6:32698402be64 666 LanceAng(Angle);
MCR_Xavier 11:5ec2507020da 667 //if(ModeSW()==0 && !SW_W) SD_Mount();
MCR_Xavier 11:5ec2507020da 668 //if(ModeSW()==1 && !SW_W) SD_Unmount();
MCR_Xavier 7:c99fe0eb544a 669 enCalc();
MCR_Xavier 11:5ec2507020da 670 //if(Log_timer >= 9 && writeflg && Tmpcnt <= 5999) TmpLog();
MCR_Xavier 7:c99fe0eb544a 671 //if(timer1 >= 1000 && !SW_W && !SW_B && !DebugFlg) Debug();
MCR_Xavier 5:20bb1e34b354 672 //ST_EN;
MCR_Xavier 5:20bb1e34b354 673 /*if(ModeSW()==2){
MCR_Xavier 5:20bb1e34b354 674 ST_EN;
MCR_Xavier 5:20bb1e34b354 675 //OTH_EN;
MCR_Xavier 5:20bb1e34b354 676 Angle = Pot_F + 90;
MCR_Xavier 5:20bb1e34b354 677 }
MCR_Xavier 5:20bb1e34b354 678 else if(ModeSW()==0) {
MCR_Xavier 5:20bb1e34b354 679 ST_DA;
MCR_Xavier 5:20bb1e34b354 680 OTH_DA;
MCR_Xavier 5:20bb1e34b354 681 }*/
MCR_Xavier 7:c99fe0eb544a 682
MCR_Xavier 7:c99fe0eb544a 683 }
MCR_Xavier 7:c99fe0eb544a 684 //----------Tmpログモード--------------------
MCR_Xavier 7:c99fe0eb544a 685 void TmpLog(){
MCR_Xavier 7:c99fe0eb544a 686
MCR_Xavier 11:5ec2507020da 687 LLog_tmp[Tmpcnt] = EnCount;
MCR_Xavier 11:5ec2507020da 688 /*Log_tmp[0][Tmpcnt] = Count_R;
MCR_Xavier 11:5ec2507020da 689 Log_tmp[1][Tmpcnt] = Count_R;
MCR_Xavier 11:5ec2507020da 690 Log_tmp[2][Tmpcnt] = W_WidsR;
MCR_Xavier 11:5ec2507020da 691 Log_tmp[3][Tmpcnt] = W_WidsL;
MCR_Xavier 11:5ec2507020da 692 Log_tmp[4][Tmpcnt] = DSensData[3];
MCR_Xavier 11:5ec2507020da 693 Log_tmp[5][Tmpcnt] = DSensData[4];
MCR_Xavier 11:5ec2507020da 694 Log_tmp[6][Tmpcnt] = Pot_R>>2;
MCR_Xavier 11:5ec2507020da 695 Log_tmp[7][Tmpcnt] = 0;
MCR_Xavier 11:5ec2507020da 696 Log_tmp[8][Tmpcnt] = 0;
MCR_Xavier 11:5ec2507020da 697 Log_tmp[9][Tmpcnt] = 0;*/
MCR_Xavier 7:c99fe0eb544a 698 Tmpcnt++;
MCR_Xavier 11:5ec2507020da 699 Log_timer = 0;
MCR_Xavier 7:c99fe0eb544a 700 }
MCR_Xavier 7:c99fe0eb544a 701 //----------SDログモード--------------------
MCR_Xavier 7:c99fe0eb544a 702 void SDLog(){
MCR_Xavier 7:c99fe0eb544a 703 //char i=0;
MCR_Xavier 7:c99fe0eb544a 704 if( SD_Flag & 0x02){
MCR_Xavier 7:c99fe0eb544a 705 //fprintf(fp, "%-10d%-10d\r\n",EnCount,EnCountI);
MCR_Xavier 7:c99fe0eb544a 706 //fprintf(fp, "%-4d%-4d%-4d%-4d\r\n",Log_table[0][0],Log_table[0][1],Log_table[0][6],Log_table[0][7]);
MCR_Xavier 7:c99fe0eb544a 707 //fprintf(fp, "%-4d%-4d%-4d%-4d%-4d%-4d%-4d%-4d\r\n",ONSensData[0],OFFSensData[0],ONSensData[1],OFFSensData[1],ONSensData[6],OFFSensData[6],ONSensData[7],OFFSensData[7]);
MCR_Xavier 7:c99fe0eb544a 708 /*for(i=0;i<=10;i++){
MCR_Xavier 7:c99fe0eb544a 709 fprintf(fp, "%-4d%-4d%-4d%-4d\r\n",Log_table[i][0],Log_table[i][1],Log_table[i][6],Log_table[i][7]);
MCR_Xavier 7:c99fe0eb544a 710 }*/
MCR_Xavier 7:c99fe0eb544a 711 }
MCR_Xavier 7:c99fe0eb544a 712 else Log_timer=0;
MCR_Xavier 7:c99fe0eb544a 713
MCR_Xavier 7:c99fe0eb544a 714 }
MCR_Xavier 7:c99fe0eb544a 715 //----------SD書き込みシーケンス--------------------
MCR_Xavier 7:c99fe0eb544a 716 void SD_WriteSq(){
MCR_Xavier 7:c99fe0eb544a 717 int i=0;
MCR_Xavier 7:c99fe0eb544a 718 if( SD_Flag & 0x02){
MCR_Xavier 7:c99fe0eb544a 719 //fprintf(fp, "\r\nLineWidsL\r\n");
MCR_Xavier 7:c99fe0eb544a 720 fprintf(fp, "EncountI time \r\n");
MCR_Xavier 11:5ec2507020da 721 fprintf(fp, "%-10d%-10d%-10d\r\n",EnCountI,timer1,Count_C);
MCR_Xavier 11:5ec2507020da 722 fprintf(fp, "Encount PWM1 PWM2 PWM3 PWM4 F_Pot R_Pot \r\n");
MCR_Xavier 11:5ec2507020da 723 for(i=0;i<=Tmpcnt;i++){
MCR_Xavier 11:5ec2507020da 724 //fprintf(fp, "%-10d%-4d%-2d\r\n",W_WidsR[i][0],Log_W_Wids[i][1],Log_W_WidsLR[i]);
MCR_Xavier 11:5ec2507020da 725 //fprintf(fp, "%-10d%-4d%-4d%-4d%-4d%-4d%-4d%-4d%-4d%-4d\r\n",Log_tmp[0][i],Log_tmp[1][i],Log_tmp[2][i],Log_tmp[3][i],Log_tmp[4][i],Log_tmp[5][i],Log_tmp[6][i],Log_tmp[7][i],Log_tmp[8][i],Log_tmp[9][i]);
MCR_Xavier 11:5ec2507020da 726 //fprintf(fp, "%-10d%-6d%-6d%-6d%-6d%-6d%-6d\r\n",LLog_tmp[i],Log_tmp[0][i],Log_tmp[1][i],Log_tmp[2][i],Log_tmp[3][i],Log_tmp[4][i],Log_tmp[5][i]);
MCR_Xavier 11:5ec2507020da 727 //fprintf(fp, "%-10d\r\n",LLog_tmp[i]);
MCR_Xavier 11:5ec2507020da 728 }
MCR_Xavier 11:5ec2507020da 729 fprintf(fp, "Wids EnCount_1R WidsLR \r\n");
MCR_Xavier 11:5ec2507020da 730 for(i=0;i<=WidsNo;i++){
MCR_Xavier 12:2cb9082e2d40 731 fprintf(fp, "%-20d%-20d%-4d%-4d%-4d\r\n",Log_W_Wids[i][0],Log_W_Wids[i][1],Log_W_WidsLR[i],Log_Count_R[i],LLog_tmp[i]);
MCR_Xavier 7:c99fe0eb544a 732 }
MCR_Xavier 7:c99fe0eb544a 733 }
MCR_Xavier 7:c99fe0eb544a 734
MCR_Xavier 5:20bb1e34b354 735 }
MCR_Xavier 5:20bb1e34b354 736 //---------SDカードをマウント-------------
MCR_Xavier 5:20bb1e34b354 737 void SD_Mount(){
MCR_Xavier 5:20bb1e34b354 738 if(SD_Flag == 0x00){
MCR_Xavier 6:32698402be64 739 led_color(RED);
MCR_Xavier 7:c99fe0eb544a 740 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 741 lcd.printf(0,"Mounting");
MCR_Xavier 5:20bb1e34b354 742 fp = fopen("/sd/Log.txt", "w");
MCR_Xavier 6:32698402be64 743 led_color(BLU);
MCR_Xavier 5:20bb1e34b354 744 SD_Flag |= 0x01;
MCR_Xavier 7:c99fe0eb544a 745 if (fp != NULL){
MCR_Xavier 7:c99fe0eb544a 746 SD_Flag |= 0x02; //success
MCR_Xavier 7:c99fe0eb544a 747 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 748 lcd.printf(0,"Success");
MCR_Xavier 7:c99fe0eb544a 749 }
MCR_Xavier 5:20bb1e34b354 750 else SD_Flag |= 0x10; //fail
MCR_Xavier 5:20bb1e34b354 751 }
MCR_Xavier 6:32698402be64 752 led_color(GRE);
MCR_Xavier 5:20bb1e34b354 753 }
MCR_Xavier 5:20bb1e34b354 754
MCR_Xavier 5:20bb1e34b354 755 //---------SDカードをアンマウント-------------
MCR_Xavier 5:20bb1e34b354 756 void SD_Unmount(){
MCR_Xavier 5:20bb1e34b354 757 if(SD_Flag & 0x01){
MCR_Xavier 7:c99fe0eb544a 758 led_color(RED);
MCR_Xavier 7:c99fe0eb544a 759 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 760 lcd.printf(0,"UnMnt...");
MCR_Xavier 7:c99fe0eb544a 761 SD_WriteSq();
MCR_Xavier 5:20bb1e34b354 762 SD_Flag = 0;
screamer 0:525c842a3c89 763 fclose(fp);
MCR_Xavier 7:c99fe0eb544a 764 led_color(WHI);
MCR_Xavier 7:c99fe0eb544a 765 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 766 lcd.printf(0,"Success");
MCR_Xavier 7:c99fe0eb544a 767 wait(1);
MCR_Xavier 5:20bb1e34b354 768 }}
MCR_Xavier 5:20bb1e34b354 769 //----------マイコン初期設定---------------
MCR_Xavier 5:20bb1e34b354 770 void init(void){
MCR_Xavier 5:20bb1e34b354 771 //I/O設定
MCR_Xavier 5:20bb1e34b354 772 RS1.mode(PullDown); //ロータリスイッチbit1
MCR_Xavier 5:20bb1e34b354 773 RS2.mode(PullDown); //ロータリスイッチbit2
MCR_Xavier 5:20bb1e34b354 774 RS3.mode(PullDown); //ロータリスイッチbit3
MCR_Xavier 5:20bb1e34b354 775 RS4.mode(PullDown); //ロータリスイッチbit4
MCR_Xavier 5:20bb1e34b354 776 SW_W.mode(PullUp); //スイッチ白
MCR_Xavier 5:20bb1e34b354 777 SW_R.mode(PullUp); //スイッチ赤
MCR_Xavier 5:20bb1e34b354 778 SW_B.mode(PullUp); //スイッチ黒
MCR_Xavier 5:20bb1e34b354 779 s0signal.rise(&s0_trigger_rise); //エンコーダA相立ち上がり
MCR_Xavier 5:20bb1e34b354 780 s0signal.fall(&s0_trigger_fall); //エンコーダA相立ち下がり
MCR_Xavier 5:20bb1e34b354 781 s1signal.rise(&s1_trigger_rise); //エンコーダB相立ち上がり
MCR_Xavier 5:20bb1e34b354 782 s1signal.fall(&s1_trigger_fall); //エンコーダB相立ち下がり
MCR_Xavier 5:20bb1e34b354 783 //割り込み処理開始
MCR_Xavier 5:20bb1e34b354 784 flipper.attach_us(&flip,1000); //汎用タイマー割り込み
MCR_Xavier 5:20bb1e34b354 785 sensget.attach_us(&sensGet,100); //センサー用タイマー割り込み
MCR_Xavier 5:20bb1e34b354 786 //PWM周期設定
MCR_Xavier 5:20bb1e34b354 787 PWM_CH1.period(0.0001);
MCR_Xavier 5:20bb1e34b354 788 PWM_CH2.period(0.001);
MCR_Xavier 5:20bb1e34b354 789 PWM_CH3.period(0.001);
MCR_Xavier 5:20bb1e34b354 790 PWM_CH4.period(0.001);
MCR_Xavier 5:20bb1e34b354 791 PWM_CH5.period(0.001);
MCR_Xavier 5:20bb1e34b354 792 PWM_CH6.period(0.0001);
MCR_Xavier 5:20bb1e34b354 793 ST_DA;
MCR_Xavier 5:20bb1e34b354 794 OTH_DA;
screamer 0:525c842a3c89 795 }
MCR_Xavier 5:20bb1e34b354 796 //----------------メイン---------------------
MCR_Xavier 10:adefba925268 797 int main(){
MCR_Xavier 5:20bb1e34b354 798 init(); //マイコン初期設定
MCR_Xavier 6:32698402be64 799 wait(1);
MCR_Xavier 5:20bb1e34b354 800 ST_EN;
MCR_Xavier 11:5ec2507020da 801 SteerMode = TRACE;
MCR_Xavier 5:20bb1e34b354 802 lcd.contrast( 0x2E ); //LCDコントラスト設定
MCR_Xavier 5:20bb1e34b354 803 wait(0.5);
MCR_Xavier 11:5ec2507020da 804 if(ModeSelect_Flg == 0) ModeSelect();
MCR_Xavier 11:5ec2507020da 805 wait(1);
MCR_Xavier 5:20bb1e34b354 806 while(SW_R){
MCR_Xavier 5:20bb1e34b354 807 if(!SW_W && !SW_B && !DebugFlg) Debug();
MCR_Xavier 5:20bb1e34b354 808 lcd.clear();
MCR_Xavier 11:5ec2507020da 809 lcd.printf(0,"%dms",TripTime);
MCR_Xavier 11:5ec2507020da 810 lcd.printf(1,"%dmm/s",SPCom);
MCR_Xavier 6:32698402be64 811 //if(!SW_W) SD_Mount();
MCR_Xavier 10:adefba925268 812 wait(0.1);
MCR_Xavier 5:20bb1e34b354 813 }
MCR_Xavier 5:20bb1e34b354 814 lcd.clear();
MCR_Xavier 5:20bb1e34b354 815 lcd.printf(0,"Ready!");
MCR_Xavier 6:32698402be64 816 lcd.printf(1,"%x",SD_Flag);
MCR_Xavier 5:20bb1e34b354 817 wait(1);
MCR_Xavier 5:20bb1e34b354 818 lcd.clear();
MCR_Xavier 5:20bb1e34b354 819 lcd.printf(0,"Go!");
MCR_Xavier 5:20bb1e34b354 820 OTH_EN;
MCR_Xavier 5:20bb1e34b354 821 W_WidsL = W_WidsR = 0;
MCR_Xavier 10:adefba925268 822 //Speed = SPCom;
MCR_Xavier 11:5ec2507020da 823 Angle = 90;
MCR_Xavier 10:adefba925268 824 Speed = SPCom;
MCR_Xavier 10:adefba925268 825 EnCount_1R = -40000;
MCR_Xavier 11:5ec2507020da 826 timer1 =0;
MCR_Xavier 11:5ec2507020da 827 StartFlg = 1;
MCR_Xavier 11:5ec2507020da 828 //writeflg = 1;
MCR_Xavier 5:20bb1e34b354 829 while(1){
MCR_Xavier 10:adefba925268 830
MCR_Xavier 11:5ec2507020da 831 if(!SW_W && !SW_B && !DebugFlg && !EnCount) Debug();
MCR_Xavier 11:5ec2507020da 832 /*if(timer2 >= 100){
MCR_Xavier 11:5ec2507020da 833 timer2 = 0;
MCR_Xavier 11:5ec2507020da 834 lcd.clear();
MCR_Xavier 11:5ec2507020da 835 lcd.printf(0,"%d",timer1);
MCR_Xavier 11:5ec2507020da 836 lcd.printf(1,"%d",ErrSt);
MCR_Xavier 11:5ec2507020da 837 }*/
MCR_Xavier 10:adefba925268 838 Localization();
MCR_Xavier 11:5ec2507020da 839 //if(Log_timer >= 10 && writeflg && Tmpcnt <= 1000) TmpLog();
MCR_Xavier 6:32698402be64 840
MCR_Xavier 10:adefba925268 841 if(Count_R == 0 ){
MCR_Xavier 10:adefba925268 842 Speed = SPCom;
MCR_Xavier 11:5ec2507020da 843 led_color(WHI);
MCR_Xavier 11:5ec2507020da 844 Angle = 90;}
MCR_Xavier 10:adefba925268 845 if(Count_R == 1 ){
MCR_Xavier 10:adefba925268 846 Speed = SPCom;
MCR_Xavier 11:5ec2507020da 847 led_color(RED);
MCR_Xavier 11:5ec2507020da 848 if(EnCount_1R >= 30000) Angle = 150;
MCR_Xavier 11:5ec2507020da 849 else if(EnCount_1R >= 13000) Angle = 180;//11000
MCR_Xavier 11:5ec2507020da 850 }
MCR_Xavier 10:adefba925268 851 if(Count_R == 2 ){
MCR_Xavier 10:adefba925268 852 Speed = SPCom;
MCR_Xavier 11:5ec2507020da 853 led_color(GRE);
MCR_Xavier 11:5ec2507020da 854 if(EnCount_1R >= 75000) Angle = 180; //75000
MCR_Xavier 11:5ec2507020da 855 else Angle = 150;
MCR_Xavier 11:5ec2507020da 856 }
MCR_Xavier 10:adefba925268 857 if(Count_R == 3 ){
MCR_Xavier 10:adefba925268 858 Speed = SPYobi;
MCR_Xavier 11:5ec2507020da 859 Angle = 90;
MCR_Xavier 10:adefba925268 860 led_color(BLU);}
MCR_Xavier 10:adefba925268 861 if(Count_R == 4 ){
MCR_Xavier 10:adefba925268 862 led_color(YEL);
MCR_Xavier 11:5ec2507020da 863 if(EnCount_1R >= 200000 && Turbo_Flg) Speed = SPCom;
MCR_Xavier 11:5ec2507020da 864 else Speed = SPCor;
MCR_Xavier 11:5ec2507020da 865 Angle = 30;
MCR_Xavier 11:5ec2507020da 866 STAngle = -27;
MCR_Xavier 11:5ec2507020da 867 //if(Shortcut_Flg)SteerMode = ANGLE;
MCR_Xavier 11:5ec2507020da 868 }
MCR_Xavier 11:5ec2507020da 869 if(Count_R == 5 ){
MCR_Xavier 10:adefba925268 870 Speed = SPCom;
MCR_Xavier 11:5ec2507020da 871 Angle = 125;
MCR_Xavier 10:adefba925268 872 led_color(RED);}
MCR_Xavier 10:adefba925268 873 if(Count_R == 6 ){
MCR_Xavier 11:5ec2507020da 874 if(Shortcut_Flg)SteerMode = WTRACE;
MCR_Xavier 10:adefba925268 875 Speed = SPCom;
MCR_Xavier 6:32698402be64 876 led_color(GRE);
MCR_Xavier 11:5ec2507020da 877 if(EnCount_1R >= 270000){
MCR_Xavier 11:5ec2507020da 878 LA_EN;
MCR_Xavier 11:5ec2507020da 879 Angle = 52;}
MCR_Xavier 11:5ec2507020da 880 else if(EnCount_1R >= 240000) LA_DA;//Angle = 130;
MCR_Xavier 6:32698402be64 881 }
MCR_Xavier 10:adefba925268 882 if(Count_R == 7 ){
MCR_Xavier 11:5ec2507020da 883 if(Shortcut_Flg)SteerMode = TRACE;
MCR_Xavier 10:adefba925268 884 Speed = SPCom;
MCR_Xavier 10:adefba925268 885 led_color(PUR);
MCR_Xavier 11:5ec2507020da 886 if(EnCount_1R >= 320000){
MCR_Xavier 11:5ec2507020da 887 LA_EN;
MCR_Xavier 11:5ec2507020da 888 Angle = 135;}
MCR_Xavier 11:5ec2507020da 889 else LA_DA;//Angle = 52;
MCR_Xavier 6:32698402be64 890 }
MCR_Xavier 10:adefba925268 891 if(Count_R == 8 ){
MCR_Xavier 10:adefba925268 892 Speed = SPCom;
MCR_Xavier 6:32698402be64 893 led_color(RED);
MCR_Xavier 11:5ec2507020da 894 if(EnCount_1R >= 365000){
MCR_Xavier 11:5ec2507020da 895 LA_EN;
MCR_Xavier 11:5ec2507020da 896 Angle = 49;}
MCR_Xavier 11:5ec2507020da 897 else LA_DA;//Angle = 132;
MCR_Xavier 6:32698402be64 898 }
MCR_Xavier 10:adefba925268 899 if(Count_R == 9 ){
MCR_Xavier 11:5ec2507020da 900 LA_EN;
MCR_Xavier 10:adefba925268 901 Speed = SPCom;
MCR_Xavier 11:5ec2507020da 902 Angle = 49;
MCR_Xavier 10:adefba925268 903 led_color(GRE);}
MCR_Xavier 10:adefba925268 904 if(Count_R == 10){
MCR_Xavier 10:adefba925268 905 Speed = SPYobi;
MCR_Xavier 10:adefba925268 906 led_color(WHI);}
MCR_Xavier 10:adefba925268 907 if(Count_R == 11){
MCR_Xavier 10:adefba925268 908 led_color(BLU);
MCR_Xavier 10:adefba925268 909 Angle = 90;
MCR_Xavier 11:5ec2507020da 910 STAngle = -6;
MCR_Xavier 11:5ec2507020da 911 if(R_No == R_Go){
MCR_Xavier 11:5ec2507020da 912 if(EnCount_1R <= 470000){
MCR_Xavier 11:5ec2507020da 913 Angle = 400;
MCR_Xavier 11:5ec2507020da 914 SteerMode = ANGLE;}
MCR_Xavier 11:5ec2507020da 915 else {
MCR_Xavier 11:5ec2507020da 916 SteerMode = TRACE;
MCR_Xavier 11:5ec2507020da 917 ErrSt = AccelStopCnt;
MCR_Xavier 11:5ec2507020da 918 if(EnCount==0)Angle = 90;
MCR_Xavier 11:5ec2507020da 919 }
MCR_Xavier 11:5ec2507020da 920 }
MCR_Xavier 11:5ec2507020da 921 if(EnCount_1R >= 470000 && Turbo_Flg) Speed = SPCom;
MCR_Xavier 11:5ec2507020da 922 else Speed = SPCor;
MCR_Xavier 11:5ec2507020da 923 }
MCR_Xavier 10:adefba925268 924 if(Count_R == 12){
MCR_Xavier 11:5ec2507020da 925 SteerMode = TRACE;
MCR_Xavier 10:adefba925268 926 Speed = SPCom;
MCR_Xavier 10:adefba925268 927 led_color(YEL);}
MCR_Xavier 10:adefba925268 928
MCR_Xavier 10:adefba925268 929 }
MCR_Xavier 7:c99fe0eb544a 930 }
MCR_Xavier 11:5ec2507020da 931
MCR_Xavier 11:5ec2507020da 932 //----------モード選択--------------------
MCR_Xavier 11:5ec2507020da 933 void ModeSelect(void){
MCR_Xavier 11:5ec2507020da 934 int DebugModeSW;
MCR_Xavier 11:5ec2507020da 935 writeflg = 0;
MCR_Xavier 11:5ec2507020da 936 ModeSelect_Flg=1;
MCR_Xavier 11:5ec2507020da 937 lcd.clear();
MCR_Xavier 11:5ec2507020da 938 lcd.printf(0,"Select");
MCR_Xavier 11:5ec2507020da 939 lcd.printf(1,"TripTime");
MCR_Xavier 11:5ec2507020da 940 wait(1);
MCR_Xavier 11:5ec2507020da 941 lcd.clear();
MCR_Xavier 11:5ec2507020da 942 while( SW_R ){
MCR_Xavier 11:5ec2507020da 943 DebugModeSW = ModeSW();
MCR_Xavier 11:5ec2507020da 944 switch(DebugModeSW){
MCR_Xavier 11:5ec2507020da 945 case 0:
MCR_Xavier 11:5ec2507020da 946 lcd.clear();
MCR_Xavier 11:5ec2507020da 947 lcd.printf(0,"Turbo_ON");
MCR_Xavier 11:5ec2507020da 948 Turbo_Flg = 1;
MCR_Xavier 11:5ec2507020da 949 wait(0.1);
MCR_Xavier 11:5ec2507020da 950 break;
MCR_Xavier 11:5ec2507020da 951 case 1:
MCR_Xavier 11:5ec2507020da 952 lcd.clear();
MCR_Xavier 11:5ec2507020da 953 lcd.printf(0,"Round30");
MCR_Xavier 11:5ec2507020da 954 TripTime =30000;
MCR_Xavier 11:5ec2507020da 955 R_Go = 7;
MCR_Xavier 11:5ec2507020da 956 wait(0.1);
MCR_Xavier 11:5ec2507020da 957 break;
MCR_Xavier 11:5ec2507020da 958 case 2:
MCR_Xavier 11:5ec2507020da 959 lcd.clear();
MCR_Xavier 11:5ec2507020da 960 lcd.printf(0,"Round60");
MCR_Xavier 11:5ec2507020da 961 TripTime =60000;
MCR_Xavier 11:5ec2507020da 962 R_Go = 15;
MCR_Xavier 11:5ec2507020da 963 wait(0.1);
MCR_Xavier 11:5ec2507020da 964 break;
MCR_Xavier 11:5ec2507020da 965 case 3:
MCR_Xavier 11:5ec2507020da 966 lcd.clear();
MCR_Xavier 11:5ec2507020da 967 lcd.printf(0,"Round10");
MCR_Xavier 11:5ec2507020da 968 TripTime =10000;
MCR_Xavier 11:5ec2507020da 969 R_Go = 2;
MCR_Xavier 11:5ec2507020da 970 wait(0.1);
MCR_Xavier 11:5ec2507020da 971 break;
MCR_Xavier 11:5ec2507020da 972 case 4:
MCR_Xavier 11:5ec2507020da 973 lcd.clear();
MCR_Xavier 11:5ec2507020da 974 lcd.printf(0,"Round20");
MCR_Xavier 11:5ec2507020da 975 TripTime =20000;
MCR_Xavier 11:5ec2507020da 976 wait(0.1);
MCR_Xavier 11:5ec2507020da 977 break;
MCR_Xavier 11:5ec2507020da 978 case 5:
MCR_Xavier 11:5ec2507020da 979 lcd.clear();
MCR_Xavier 11:5ec2507020da 980 lcd.printf(0,"Shortcut60");
MCR_Xavier 11:5ec2507020da 981 TripTime =60000;
MCR_Xavier 11:5ec2507020da 982 Shortcut_Flg = 1;
MCR_Xavier 11:5ec2507020da 983 wait(0.1);
MCR_Xavier 11:5ec2507020da 984 break;
MCR_Xavier 11:5ec2507020da 985
MCR_Xavier 11:5ec2507020da 986 default:
MCR_Xavier 11:5ec2507020da 987 lcd.clear();
MCR_Xavier 11:5ec2507020da 988 lcd.printf(0,"Select");
MCR_Xavier 11:5ec2507020da 989 lcd.printf(1,"1-5");
MCR_Xavier 11:5ec2507020da 990 wait(0.1);
MCR_Xavier 11:5ec2507020da 991 break;
MCR_Xavier 11:5ec2507020da 992 }
MCR_Xavier 11:5ec2507020da 993 }
MCR_Xavier 11:5ec2507020da 994 wait(1);
MCR_Xavier 11:5ec2507020da 995 lcd.clear();
MCR_Xavier 11:5ec2507020da 996 while( SW_R){
MCR_Xavier 11:5ec2507020da 997 DebugModeSW = ModeSW();
MCR_Xavier 11:5ec2507020da 998 switch(DebugModeSW){
MCR_Xavier 11:5ec2507020da 999 case 1:
MCR_Xavier 11:5ec2507020da 1000 lcd.clear();
MCR_Xavier 11:5ec2507020da 1001 lcd.printf(0,"STSpeed");
MCR_Xavier 11:5ec2507020da 1002 lcd.printf(1,"5m/s");
MCR_Xavier 11:5ec2507020da 1003 SPCom=5000;
MCR_Xavier 11:5ec2507020da 1004 wait(0.1);
MCR_Xavier 11:5ec2507020da 1005 break;
MCR_Xavier 11:5ec2507020da 1006 case 4:
MCR_Xavier 11:5ec2507020da 1007 lcd.clear();
MCR_Xavier 11:5ec2507020da 1008 lcd.printf(0,"STSpeed");
MCR_Xavier 11:5ec2507020da 1009 lcd.printf(1,"4.5m/s");
MCR_Xavier 11:5ec2507020da 1010 wait(1);
MCR_Xavier 11:5ec2507020da 1011 SPCom=4500;
MCR_Xavier 11:5ec2507020da 1012 SPCor=2800;
MCR_Xavier 11:5ec2507020da 1013 break;
MCR_Xavier 11:5ec2507020da 1014 case 3:
MCR_Xavier 11:5ec2507020da 1015 lcd.clear();
MCR_Xavier 11:5ec2507020da 1016 lcd.printf(0,"STSpeed");
MCR_Xavier 12:2cb9082e2d40 1017 lcd.printf(1,"6m/s");
MCR_Xavier 12:2cb9082e2d40 1018 SPCom=6000;
MCR_Xavier 11:5ec2507020da 1019 wait(0.1);
MCR_Xavier 11:5ec2507020da 1020 break;
MCR_Xavier 11:5ec2507020da 1021 case 2:
MCR_Xavier 11:5ec2507020da 1022 lcd.clear();
MCR_Xavier 11:5ec2507020da 1023 lcd.printf(0,"STSpeed");
MCR_Xavier 11:5ec2507020da 1024 lcd.printf(1,"5.2m/s");
MCR_Xavier 11:5ec2507020da 1025 SPCom=5200;
MCR_Xavier 11:5ec2507020da 1026 wait(0.1);
MCR_Xavier 11:5ec2507020da 1027 break;
MCR_Xavier 11:5ec2507020da 1028 case 5:
MCR_Xavier 11:5ec2507020da 1029 lcd.clear();
MCR_Xavier 11:5ec2507020da 1030 lcd.printf(0,"AllSpeed");
MCR_Xavier 11:5ec2507020da 1031 lcd.printf(1,"3m/s");
MCR_Xavier 11:5ec2507020da 1032 wait(1);
MCR_Xavier 11:5ec2507020da 1033 SPCom=3000;
MCR_Xavier 11:5ec2507020da 1034 SPYobi=3000;
MCR_Xavier 11:5ec2507020da 1035 SPCor=3000;
MCR_Xavier 11:5ec2507020da 1036 wait(0.1);
MCR_Xavier 11:5ec2507020da 1037 break;
MCR_Xavier 11:5ec2507020da 1038
MCR_Xavier 11:5ec2507020da 1039 case 6:
MCR_Xavier 11:5ec2507020da 1040 lcd.clear();
MCR_Xavier 11:5ec2507020da 1041 lcd.printf(0,"FreeDrive");
MCR_Xavier 11:5ec2507020da 1042 TestDrive_Flg=1;
MCR_Xavier 11:5ec2507020da 1043 wait(0.1);
MCR_Xavier 11:5ec2507020da 1044 break;
MCR_Xavier 11:5ec2507020da 1045
MCR_Xavier 11:5ec2507020da 1046 default:
MCR_Xavier 11:5ec2507020da 1047 lcd.clear();
MCR_Xavier 11:5ec2507020da 1048 lcd.printf(0,"Select");
MCR_Xavier 11:5ec2507020da 1049 lcd.printf(1,"1-6");
MCR_Xavier 11:5ec2507020da 1050 wait(0.1);
MCR_Xavier 11:5ec2507020da 1051 break;
MCR_Xavier 11:5ec2507020da 1052 }
MCR_Xavier 11:5ec2507020da 1053 }
MCR_Xavier 11:5ec2507020da 1054 }
MCR_Xavier 11:5ec2507020da 1055
MCR_Xavier 7:c99fe0eb544a 1056 //----------デバッグモード--------------------
MCR_Xavier 7:c99fe0eb544a 1057 void Debug(void){
MCR_Xavier 7:c99fe0eb544a 1058 int DebugModeSW;
MCR_Xavier 11:5ec2507020da 1059 int PotTest1,PotTest2;
MCR_Xavier 11:5ec2507020da 1060 writeflg = 0;
MCR_Xavier 7:c99fe0eb544a 1061 DebugFlg=1;
MCR_Xavier 7:c99fe0eb544a 1062 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1063 lcd.printf(0,"DBGMode");
MCR_Xavier 7:c99fe0eb544a 1064 wait(2);
MCR_Xavier 7:c99fe0eb544a 1065 while( SW_R ){
MCR_Xavier 7:c99fe0eb544a 1066 DebugModeSW = ModeSW();
MCR_Xavier 7:c99fe0eb544a 1067 switch(DebugModeSW){
MCR_Xavier 7:c99fe0eb544a 1068 case 1:
MCR_Xavier 7:c99fe0eb544a 1069 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1070 lcd.printf(0,"SensT/F");
MCR_Xavier 7:c99fe0eb544a 1071 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1072 break;
MCR_Xavier 7:c99fe0eb544a 1073 case 2:
MCR_Xavier 7:c99fe0eb544a 1074 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1075 lcd.printf(0,"SensA/D");
MCR_Xavier 7:c99fe0eb544a 1076 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1077 break;
MCR_Xavier 7:c99fe0eb544a 1078 case 3:
MCR_Xavier 7:c99fe0eb544a 1079 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1080 lcd.printf(0,"Trip");
MCR_Xavier 7:c99fe0eb544a 1081 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1082 break;
MCR_Xavier 7:c99fe0eb544a 1083 case 4:
MCR_Xavier 7:c99fe0eb544a 1084 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1085 lcd.printf(0,"LinWidLR");
MCR_Xavier 7:c99fe0eb544a 1086 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1087 break;
MCR_Xavier 7:c99fe0eb544a 1088 case 5:
MCR_Xavier 7:c99fe0eb544a 1089 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1090 lcd.printf(0,"LineCnr");
MCR_Xavier 7:c99fe0eb544a 1091 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1092 break;
MCR_Xavier 7:c99fe0eb544a 1093 case 6:
MCR_Xavier 7:c99fe0eb544a 1094 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1095 lcd.printf(0,"LineA/D");
MCR_Xavier 7:c99fe0eb544a 1096 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1097 break;
MCR_Xavier 7:c99fe0eb544a 1098 case 7:
MCR_Xavier 7:c99fe0eb544a 1099 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1100 lcd.printf(0,"PotA/D");
MCR_Xavier 7:c99fe0eb544a 1101 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1102 break;
MCR_Xavier 7:c99fe0eb544a 1103 case 8:
MCR_Xavier 7:c99fe0eb544a 1104 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1105 lcd.printf(0,"Speed5");
MCR_Xavier 7:c99fe0eb544a 1106 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1107 break;
MCR_Xavier 7:c99fe0eb544a 1108 case 9:
MCR_Xavier 7:c99fe0eb544a 1109 lcd.clear();
MCR_Xavier 11:5ec2507020da 1110 lcd.printf(0,"Speed7");
MCR_Xavier 7:c99fe0eb544a 1111 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1112 break;
MCR_Xavier 7:c99fe0eb544a 1113 case 10:
MCR_Xavier 7:c99fe0eb544a 1114 lcd.clear();
MCR_Xavier 11:5ec2507020da 1115 lcd.printf(0,"Speed2");
MCR_Xavier 7:c99fe0eb544a 1116 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1117 break;
MCR_Xavier 7:c99fe0eb544a 1118 case 11:
MCR_Xavier 7:c99fe0eb544a 1119 lcd.clear();
MCR_Xavier 11:5ec2507020da 1120 lcd.printf(0,"Speed0");
MCR_Xavier 7:c99fe0eb544a 1121 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1122 break;
MCR_Xavier 7:c99fe0eb544a 1123 case 12:
MCR_Xavier 7:c99fe0eb544a 1124 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1125 lcd.printf(0,"linewide");
MCR_Xavier 7:c99fe0eb544a 1126 lcd.printf(1,"100");
MCR_Xavier 7:c99fe0eb544a 1127 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1128 break;
MCR_Xavier 7:c99fe0eb544a 1129 case 13:
MCR_Xavier 7:c99fe0eb544a 1130 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1131 lcd.printf(0,"SD_Mount?");
MCR_Xavier 7:c99fe0eb544a 1132 lcd.printf(1,"%x",SD_Flag);
MCR_Xavier 7:c99fe0eb544a 1133 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1134 if(!SW_W) SD_Mount();
MCR_Xavier 11:5ec2507020da 1135 writeflg = 1;
MCR_Xavier 7:c99fe0eb544a 1136 break;
MCR_Xavier 7:c99fe0eb544a 1137 case 14:
MCR_Xavier 7:c99fe0eb544a 1138 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1139 lcd.printf(0,"SD_UnMount?");
MCR_Xavier 7:c99fe0eb544a 1140 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1141 if(!SW_W) SD_Unmount();
MCR_Xavier 7:c99fe0eb544a 1142 break;
MCR_Xavier 7:c99fe0eb544a 1143 case 15:
MCR_Xavier 7:c99fe0eb544a 1144 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1145 lcd.printf(0,"DSPSens");
MCR_Xavier 7:c99fe0eb544a 1146 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1147 break;
MCR_Xavier 7:c99fe0eb544a 1148 default:
MCR_Xavier 7:c99fe0eb544a 1149 break;
MCR_Xavier 7:c99fe0eb544a 1150 }
MCR_Xavier 7:c99fe0eb544a 1151 }
MCR_Xavier 11:5ec2507020da 1152 wait(1);
MCR_Xavier 7:c99fe0eb544a 1153 while( SW_R){
MCR_Xavier 7:c99fe0eb544a 1154 DebugModeSW = ModeSW();
MCR_Xavier 7:c99fe0eb544a 1155 switch(DebugModeSW){
MCR_Xavier 7:c99fe0eb544a 1156 case 1:
MCR_Xavier 7:c99fe0eb544a 1157 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1158 lcd.printf(0,"0167RL");
MCR_Xavier 7:c99fe0eb544a 1159 lcd.printf(1,"%1d%1d%1d%1d%1d%1d",TFSensData[0],TFSensData[1],TFSensData[6],TFSensData[7],R_LineFlg ,L_LineFlg);
MCR_Xavier 7:c99fe0eb544a 1160 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1161 break;
MCR_Xavier 7:c99fe0eb544a 1162 case 2:
MCR_Xavier 7:c99fe0eb544a 1163 lcd.clear();
MCR_Xavier 11:5ec2507020da 1164 //lcd.printf(0,"SensA/D");
MCR_Xavier 11:5ec2507020da 1165 lcd.printf(0,"%3d,%3d",DSensData[3],DSensData[4]);
MCR_Xavier 11:5ec2507020da 1166 lcd.printf(1,"%3d,%3d",DSensData[2],DSensData[5]);
MCR_Xavier 7:c99fe0eb544a 1167 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1168 break;
MCR_Xavier 7:c99fe0eb544a 1169 case 3:
MCR_Xavier 7:c99fe0eb544a 1170 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1171 lcd.printf(0,"%d",EnCount );
MCR_Xavier 7:c99fe0eb544a 1172 lcd.printf(1,"%d",EnCountI);
MCR_Xavier 7:c99fe0eb544a 1173 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1174 break;
MCR_Xavier 7:c99fe0eb544a 1175 case 4:
MCR_Xavier 7:c99fe0eb544a 1176 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1177 lcd.printf(0,"%d",W_WidsL );
MCR_Xavier 7:c99fe0eb544a 1178 lcd.printf(1,"%d",W_WidsR );
MCR_Xavier 7:c99fe0eb544a 1179 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1180 break;
MCR_Xavier 7:c99fe0eb544a 1181 case 5:
MCR_Xavier 7:c99fe0eb544a 1182 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1183 lcd.printf(0,"%d",R_LineCnt );
MCR_Xavier 7:c99fe0eb544a 1184 lcd.printf(1,"%d",L_LineCnt );
MCR_Xavier 7:c99fe0eb544a 1185 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1186 break;
MCR_Xavier 7:c99fe0eb544a 1187 case 6:
MCR_Xavier 7:c99fe0eb544a 1188 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1189 lcd.printf(0,"%3d,%3d",DSensData[0],DSensData[1]);
MCR_Xavier 7:c99fe0eb544a 1190 lcd.printf(1,"%3d,%3d",DSensData[6],DSensData[7]);
MCR_Xavier 7:c99fe0eb544a 1191 wait(0.5);
MCR_Xavier 7:c99fe0eb544a 1192 break;
MCR_Xavier 7:c99fe0eb544a 1193 case 7:
MCR_Xavier 11:5ec2507020da 1194 PotTest1 = (DFP-(Steer_Ptm.read_u16()>>6))/3;
MCR_Xavier 11:5ec2507020da 1195 PotTest2 = ((Lance_Ptm.read_u16()>>6)-DRP)/3;
MCR_Xavier 7:c99fe0eb544a 1196 lcd.clear();
MCR_Xavier 11:5ec2507020da 1197 lcd.printf(0,"%3d,%3d",Pot_F,PotTest1);
MCR_Xavier 11:5ec2507020da 1198 lcd.printf(1,"%3d,%3d",Pot_R,PotTest2);
MCR_Xavier 11:5ec2507020da 1199 /*lcd.printf(0,"%3d,%3d",RearPot[1],RearPot[4]);
MCR_Xavier 11:5ec2507020da 1200 lcd.printf(1,"%3d,%3d",RearPot[5],RearPot[9]);*/
MCR_Xavier 7:c99fe0eb544a 1201 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1202 break;
MCR_Xavier 7:c99fe0eb544a 1203 case 8:
MCR_Xavier 11:5ec2507020da 1204 SPCom=5000;
MCR_Xavier 7:c99fe0eb544a 1205 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1206 lcd.printf(0,"Speed5");
MCR_Xavier 11:5ec2507020da 1207 lcd.printf(1,"%d",SPCom);
MCR_Xavier 7:c99fe0eb544a 1208 wait(0.1);
MCR_Xavier 8:352404951de8 1209 //SPYobi=3500;
MCR_Xavier 8:352404951de8 1210 //SPCor=3000;
MCR_Xavier 8:352404951de8 1211 //ParamS=2000;
MCR_Xavier 7:c99fe0eb544a 1212 break;
MCR_Xavier 7:c99fe0eb544a 1213 case 9:
MCR_Xavier 11:5ec2507020da 1214 SPCom=7000;
MCR_Xavier 7:c99fe0eb544a 1215 lcd.clear();
MCR_Xavier 8:352404951de8 1216 lcd.printf(0,"Speed7");
MCR_Xavier 11:5ec2507020da 1217 lcd.printf(1,"%d",SPCom);
MCR_Xavier 7:c99fe0eb544a 1218 wait(0.1);
MCR_Xavier 8:352404951de8 1219 //SPYobi=3000;
MCR_Xavier 8:352404951de8 1220 //SPCor=3000;
MCR_Xavier 7:c99fe0eb544a 1221 break;
MCR_Xavier 7:c99fe0eb544a 1222 case 10:
MCR_Xavier 11:5ec2507020da 1223 SPCom=2000;
MCR_Xavier 11:5ec2507020da 1224 SPYobi=2000;
MCR_Xavier 11:5ec2507020da 1225 SPCor=2000;
MCR_Xavier 7:c99fe0eb544a 1226 lcd.clear();
MCR_Xavier 11:5ec2507020da 1227 lcd.printf(0,"Speed2");
MCR_Xavier 11:5ec2507020da 1228 lcd.printf(1,"%d",SPCom);
MCR_Xavier 7:c99fe0eb544a 1229 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1230 break;
MCR_Xavier 7:c99fe0eb544a 1231 case 11:
MCR_Xavier 11:5ec2507020da 1232 SPCom=0;
MCR_Xavier 11:5ec2507020da 1233 SPYobi=0;
MCR_Xavier 11:5ec2507020da 1234 SPCor=0;
MCR_Xavier 7:c99fe0eb544a 1235 lcd.clear();
MCR_Xavier 11:5ec2507020da 1236 lcd.printf(0,"Speed0");
MCR_Xavier 11:5ec2507020da 1237 lcd.printf(1,"%d",SPCom);
MCR_Xavier 7:c99fe0eb544a 1238 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1239 break;
MCR_Xavier 7:c99fe0eb544a 1240 case 12:
MCR_Xavier 7:c99fe0eb544a 1241 lcd.clear();
MCR_Xavier 11:5ec2507020da 1242 lcd.printf(0,"R_No");
MCR_Xavier 11:5ec2507020da 1243 lcd.printf(1,"%d",R_No);
MCR_Xavier 7:c99fe0eb544a 1244 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1245 linewide=100;
MCR_Xavier 7:c99fe0eb544a 1246 break;
MCR_Xavier 11:5ec2507020da 1247 case 13:
MCR_Xavier 11:5ec2507020da 1248 lcd.clear();
MCR_Xavier 11:5ec2507020da 1249 lcd.printf(0,"ErrSt");
MCR_Xavier 11:5ec2507020da 1250 lcd.printf(1,"%d",ErrSt);
MCR_Xavier 11:5ec2507020da 1251 wait(0.1);
MCR_Xavier 11:5ec2507020da 1252 break;
MCR_Xavier 7:c99fe0eb544a 1253 case 15:
MCR_Xavier 7:c99fe0eb544a 1254 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1255 lcd.printf(0,"%d",DSensData[0]);
MCR_Xavier 7:c99fe0eb544a 1256 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1257 break;
MCR_Xavier 7:c99fe0eb544a 1258 default:
MCR_Xavier 7:c99fe0eb544a 1259 break;
MCR_Xavier 7:c99fe0eb544a 1260 }
MCR_Xavier 7:c99fe0eb544a 1261 }
MCR_Xavier 7:c99fe0eb544a 1262
MCR_Xavier 7:c99fe0eb544a 1263
MCR_Xavier 7:c99fe0eb544a 1264 while( SW_W ){
MCR_Xavier 7:c99fe0eb544a 1265 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1266 lcd.printf(0,"Exit?");
MCR_Xavier 7:c99fe0eb544a 1267 wait(0.1);
MCR_Xavier 7:c99fe0eb544a 1268 }
MCR_Xavier 7:c99fe0eb544a 1269 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1270 lcd.printf(0,"Bye-Bye");
MCR_Xavier 7:c99fe0eb544a 1271 wait(2);
MCR_Xavier 7:c99fe0eb544a 1272 lcd.clear();
MCR_Xavier 7:c99fe0eb544a 1273 DebugFlg=0;
MCR_Xavier 7:c99fe0eb544a 1274 }