ランサー

Dependencies:   SB1602E SDFileSystem mbed

Fork of Seeed_SDCard_Shield by Shields

Committer:
MCR_Xavier
Date:
Tue Apr 18 12:01:43 2017 +0000
Revision:
10:adefba925268
Parent:
9:8ab0d3e46c3c
Child:
11:5ec2507020da
?????

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