//////////////////////////入力のIOを処理する/////////////////////////////////////// // 入力IO byte ShiftData ; byte ShiftIn(int dataPin, int clockPin, int loadPin) //前半のビット処理 { unsigned char x ; int i ; x = 0; digitalWrite(loadPin, LOW) ; // 入力端子(A-H)の情報をレジスタに読込めと指示する digitalWrite(loadPin, HIGH) ; x = x | (digitalRead(dataPin) << 7) ;// H端子の内容を受信する for (i = 6 ; i >= 0 ; i--) { // G端子〜A端子まで繰り返す digitalWrite(clockPin, HIGH) ; // 1ビットシフト指示を出す digitalWrite(clockPin, LOW) ; x = x | (digitalRead(dataPin) << i) ; // シフトされた内容を受信する } return x ; } byte ShiftIn2(int dataPin, int clockPin, int loadPin) //後半のビット処理 { unsigned char x ; int i ; x = 0; for (i = 7 ; i >= 0 ; i--) { // G端子〜A端子まで繰り返すIC2個目 digitalWrite(clockPin, HIGH) ; // 1ビットシフト指示を出す digitalWrite(clockPin, LOW) ; x = x | (digitalRead(dataPin) << i) ; // シフトされた内容を受信する } return x ; } //////////////////////////入力のIOを処理する(終わり)/////////////////////////////////////// //////////////////////////変数初期化/////////////////////////////////////// //初期化 int Motor_5F = 0; int Motor_5B = 0; int Motor_6F = 0; int Motor_6B = 0; int Motor_7F = 0; int Motor_7B = 0; int Motor_8F = 0; int Motor_8B = 0; int Motor_1F = 0; int Motor_1B = 0; int Motor_2F = 0; int Motor_2B = 0; int Motor_3F = 0; int Motor_3B = 0; int Motor_4F = 0; int Motor_4B = 0; int MortorIO_1 = 0; int MortorIO_2 = 0; int MortorIO_5F = 0; int MortorIO_5B = 0; int MortorIO_6F = 0; int MortorIO_6B = 0; int MortorIO_7F = 0; int MortorIO_7B = 0; int MortorIO_8F = 0; int MortorIO_8B = 0; int MortorIO_1F = 0; int MortorIO_1B = 0; int MortorIO_2F = 0; int MortorIO_2B = 0; int MortorIO_3F = 0; int MortorIO_3B = 0; int MortorIO_4F = 0; int MortorIO_4B = 0; int ButtonIO_S7 = 0; int ButtonIO_S5 = 0; int ButtonIO_S3 = 0; int ButtonIO_S1 = 0; int ButtonIO_S0 = 0; int ButtonIO_S2 = 0; int ButtonIO_S4 = 0; int ButtonIO_S6 = 0; int ButtonIO_SE = 0; int ButtonIO_SC = 0; int ButtonIO_SA = 0; int ButtonIO_S8 = 0; int ButtonIO_S9 = 0; int ButtonIO_SB = 0; int ButtonIO_SD = 0; int ButtonIO_SF = 0; long Analog_L_X_ini_Value; long Analog_L_Y_ini_Value; long Analog_R_X_ini_Value; long Analog_R_Y_ini_Value; long AnalogZensin_L; long AnalogKoutai_L; long AnalogMigi_L; long AnalogHidari_L; long AnalogZensin_R; long AnalogKoutai_R; long AnalogMigi_R; long AnalogHidari_R; int Mode_OyaKo; uint8_t input[30]; // 文字列格納用 int i = 0; // 文字数のカウンタ uint8_t L_Zengo_Val; uint8_t L_sayuu_Val; uint8_t R_Zengo_Val; uint8_t R_sayuu_Val; uint8_t PSB_PAD_UP_Val; uint8_t PSB_PAD_DOWN_Val; uint8_t PSB_PAD_RIGHT_Val; uint8_t PSB_PAD_LEFT_Val; uint8_t PSB_CIRCLE_Val; uint8_t PSB_CROSS_Val; uint8_t PSB_SQUARE_Val; uint8_t PSB_TRIANGLE_Val; uint8_t PSB_L1_Val; uint8_t PSB_R1_Val; uint8_t PSB_L2_Val; uint8_t PSB_R2_Val; uint8_t PSB_L3_Val; uint8_t PSB_R3_Val; uint8_t PSB_START_Val; uint8_t PSB_SELECT_Val; uint8_t MyMode1_Val; uint8_t MyMode2_Val; uint8_t MyMode3_Val; uint8_t MyMode4_Val; uint8_t MyMode5_Val; int First_Check; //モーター用変数 uint8_t Mortor01_MortorType;//モーター種類 int16_t Mortor01_NowSpeed;//モーター加速用カウント int16_t Mortor01_TargetSpeed;//モーター加速用カウント uint8_t Mortor01_InputMode;//モータ指令 uint8_t Mortor01_BrakeFlag; uint8_t Mortor01_EMGBrakeFlag; uint8_t Mortor02_MortorType;//モーター種類 int16_t Mortor02_NowSpeed;//モーター加速用カウント int16_t Mortor02_TargetSpeed;//モーター加速用カウント uint8_t Mortor02_InputMode;//モータ指令 uint8_t Mortor02_BrakeFlag; uint8_t Mortor02_EMGBrakeFlag; uint8_t Mortor03_MortorType;//モーター種類 int16_t Mortor03_NowSpeed;//モーター加速用カウント int16_t Mortor03_TargetSpeed;//モーター加速用カウント uint8_t Mortor03_InputMode;//モータ指令 uint8_t Mortor03_BrakeFlag; uint8_t Mortor03_EMGBrakeFlag; uint8_t Mortor04_MortorType;//モーター種類 int16_t Mortor04_NowSpeed;//モーター加速用カウント int16_t Mortor04_TargetSpeed;//モーター加速用カウント uint8_t Mortor04_InputMode;//モータ指令 uint8_t Mortor04_BrakeFlag; uint8_t Mortor04_EMGBrakeFlag; uint8_t Mortor05_MortorType;//モーター種類 int16_t Mortor05_NowSpeed;//モーター加速用カウント int16_t Mortor05_TargetSpeed;//モーター加速用カウント uint8_t Mortor05_InputMode;//モータ指令 uint8_t Mortor05_BrakeFlag; uint8_t Mortor05_EMGBrakeFlag; uint8_t Mortor06_MortorType;//モーター種類 int16_t Mortor06_NowSpeed;//モーター加速用カウント int16_t Mortor06_TargetSpeed;//モーター加速用カウント uint8_t Mortor06_InputMode;//モータ指令 uint8_t Mortor06_BrakeFlag; uint8_t Mortor06_EMGBrakeFlag; uint8_t Mortor07_MortorType;//モーター種類 int16_t Mortor07_NowSpeed;//モーター加速用カウント int16_t Mortor07_TargetSpeed;//モーター加速用カウント uint8_t Mortor07_InputMode;//モータ指令 uint8_t Mortor07_BrakeFlag; uint8_t Mortor07_EMGBrakeFlag; uint8_t Mortor08_MortorType;//モーター種類 int16_t Mortor08_NowSpeed;//モーター加速用カウント int16_t Mortor08_TargetSpeed;//モーター加速用カウント uint8_t Mortor08_InputMode;//モータ指令 uint8_t Mortor08_BrakeFlag; uint8_t Mortor08_EMGBrakeFlag; char MyStr; int16_t ScanCount; unsigned long Beftime; //////////////////////////変数初期化(終わり)/////////////////////////////////////// //////////////////////////セットアップ(電源ON後1回だけ処理)/////////////////////////////////////// void setup() { delay(1000); //シリアル通信の初期化 Serial.begin(57600) ; //OUT_Motor pinMode(2, OUTPUT); pinMode(4, OUTPUT); //OUT_PWM_Motor pinMode(3, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); //I/O_OUT_PIN pinMode(12, OUTPUT) ; // 制御するピンは全て出力に設定する pinMode(13, OUTPUT) ; pinMode(14, OUTPUT) ; // 74HC165のピン情報初期化 pinMode(16, INPUT) ; pinMode(17, OUTPUT) ; pinMode(15, OUTPUT) ; digitalWrite(15, HIGH) ; digitalWrite(17, LOW) ; //モーター用加速変数設定値(50を基本。これ以上は大きくしない方が良い。小さいモーターであればOK。01と04は数値に関係なくON OFFされる) Mortor01_MortorType = 50;//ゆっくりONは無効 Mortor02_MortorType = 50; Mortor03_MortorType = 50; Mortor04_MortorType = 50;//ゆっくりONは無効 Mortor05_MortorType = 50; Mortor06_MortorType = 50; Mortor07_MortorType = 50; Mortor08_MortorType = 50; } //////////////////////////セットアップ(終わり)/////////////////////////////////////// //////////////////////////プログラムメイン/////////////////////////////////////// void loop() { //////////////////////////コントローラーからのシリアル通信の状態取得/////////////////////////////////////// if (Serial.available()) { input[i] = Serial.read(); // 文字数が6以上 or 末尾文字 if (input[i] == 255) { //インデックス i = 1; } else if (i == 1) { L_sayuu_Val = constrain(input[i], 0, 255); i++; } else if (i == 2) { L_Zengo_Val = constrain(input[i], 0, 255); i++; } else if (i == 3) { R_sayuu_Val = constrain(input[i], 0, 255); //no use i++; } else if (i == 4) { R_Zengo_Val = constrain(input[i], 0, 255); i++; //no use } else if (i == 5) { //KeyPad1 = ps2x.Button(PSB_PAD_UP) + ps2x.Button(PSB_PAD_DOWN) * 2 + ps2x.Button(PSB_PAD_RIGHT) * 4 + ps2x.Button(PSB_PAD_LEFT) * 8 + ps2x.Button(PSB_L1) * 16 + ps2x.Button(PSB_R1) * 32 + ps2x.Button(PSB_L3) * 64; uint8_t buffer_value1 = constrain(input[i], 0, 255); PSB_PAD_UP_Val = buffer_value1 & 0b00000001; PSB_PAD_DOWN_Val = buffer_value1 & 0b00000010; PSB_PAD_DOWN_Val = PSB_PAD_DOWN_Val >> 1; PSB_PAD_RIGHT_Val = buffer_value1 & 0b00000100; PSB_PAD_RIGHT_Val = PSB_PAD_RIGHT_Val >> 2; PSB_PAD_LEFT_Val = buffer_value1 & 0b00001000; PSB_PAD_LEFT_Val = PSB_PAD_LEFT_Val >> 3; PSB_L1_Val = buffer_value1 & 0b00010000; PSB_L1_Val = PSB_L1_Val >> 4; PSB_R1_Val = buffer_value1 & 0b00100000; PSB_R1_Val = PSB_R1_Val >> 5; PSB_L3_Val = buffer_value1 & 0b01000000; PSB_L3_Val = PSB_L3_Val >> 6; i++; } else if (i == 6) { //KeyPad2 = ps2x.Button(PSB_CIRCLE) + ps2x.Button(PSB_CROSS) * 2 + ps2x.Button(PSB_SQUARE) * 4 + ps2x.Button(PSB_TRIANGLE) * 8 + ps2x.Button(PSB_L2) * 16 + ps2x.Button(PSB_R2) * 32 + ps2x.Button(PSB_R3) * 64; uint8_t buffer_value2 = constrain(input[i], 0, 255); PSB_CIRCLE_Val = buffer_value2 & 0b00000001; PSB_CROSS_Val = buffer_value2 & 0b00000010; PSB_CROSS_Val = PSB_CROSS_Val >> 1; PSB_SQUARE_Val = buffer_value2 & 0b00000100; PSB_SQUARE_Val = PSB_SQUARE_Val >> 2; PSB_TRIANGLE_Val = buffer_value2 & 0b00001000; PSB_TRIANGLE_Val = PSB_TRIANGLE_Val >> 3; PSB_L2_Val = buffer_value2 & 0b00010000; PSB_L2_Val = PSB_L2_Val >> 4; PSB_R2_Val = buffer_value2 & 0b00100000; PSB_R2_Val = PSB_R2_Val >> 5; PSB_R3_Val = buffer_value2 & 0b01000000; PSB_R3_Val = PSB_R3_Val >> 6; i++; } else if (i == 7) { //KeyPad3 = ps2x.Button(PSB_START) + ps2x.Button(PSB_SELECT) * 2; uint8_t buffer_value3 = constrain(input[i], 0, 255); PSB_START_Val = buffer_value3 & 0b00000001; PSB_SELECT_Val = buffer_value3 & 0b00000010; PSB_SELECT_Val = PSB_SELECT_Val >> 1; MyMode1_Val = buffer_value3 & 0b00000100; MyMode1_Val = MyMode1_Val >> 2; MyMode2_Val = buffer_value3 & 0b00001000; MyMode2_Val = MyMode2_Val >> 3; MyMode3_Val = buffer_value3 & 0b00010000; MyMode3_Val = MyMode3_Val >> 4; MyMode4_Val = buffer_value3 & 0b00100000; MyMode4_Val = MyMode4_Val >> 5; MyMode5_Val = buffer_value3 & 0b01000000; MyMode5_Val = MyMode5_Val >> 6; i++; if (First_Check == 0) { Analog_L_X_ini_Value = L_sayuu_Val; Analog_L_Y_ini_Value = L_Zengo_Val; Analog_R_X_ini_Value = R_sayuu_Val; Analog_R_Y_ini_Value = R_Zengo_Val; AnalogZensin_L = Analog_L_Y_ini_Value + 25; AnalogKoutai_L = Analog_L_Y_ini_Value - 25; AnalogMigi_L = Analog_L_X_ini_Value - 25; AnalogHidari_L = Analog_L_X_ini_Value + 25; AnalogZensin_R = Analog_R_Y_ini_Value + 25; AnalogKoutai_R = Analog_R_Y_ini_Value - 25; AnalogMigi_R = Analog_R_X_ini_Value - 25; AnalogHidari_R = Analog_R_X_ini_Value + 25; First_Check = 1; } } else { //i++; } } //////////////////////////コントローラーからのシリアル通信の状態取得(終わり)/////////////////////////////////////// //////////////////////////74HC595の処理/////////////////////////////////////// //Motor_Group1のIO形成 if (Motor_5F == 1) { MortorIO_5F = 1; }//5F-analogWrite(6, 255)_A_1 if (Motor_5B == 1) { MortorIO_5B = 2; }//5B-analogWrite(6, 255)_B_1 if (Motor_6F == 1) { MortorIO_6F = 4; }//6F-analogWrite(9, 255);_C_1 if (Motor_6B == 1) { MortorIO_6B = 8; }//6B-analogWrite(9, 255);_D_1 if (Motor_7F == 1) { MortorIO_7F = 64; }//7F-analogWrite(11, 255);_G_1 if (Motor_7B == 1) { MortorIO_7B = 128; }//7B-analogWrite(11, 255);_H_1 if (Motor_8F == 1) { MortorIO_8F = 16; }//8F-analogWrite(10, 255);_E_1 if (Motor_8B == 1) { MortorIO_8B = 32; }//8F-analogWrite(10, 255);_F_1 if (Motor_5F == 0) { MortorIO_5F = 0; } if (Motor_5B == 0) { MortorIO_5B = 0; } if (Motor_6F == 0) { MortorIO_6F = 0; } if (Motor_6B == 0) { MortorIO_6B = 0; } if (Motor_7F == 0) { MortorIO_7F = 0; } if (Motor_7B == 0) { MortorIO_7B = 0; } if (Motor_8F == 0) { MortorIO_8F = 0; } if (Motor_8B == 0) { MortorIO_8B = 0; } MortorIO_1 = MortorIO_5F + MortorIO_5B + MortorIO_6F + MortorIO_6B + MortorIO_7F + MortorIO_7B + MortorIO_8F + MortorIO_8B; //Motor_Group2のIO形成 if (Motor_1F == 1) { MortorIO_1F = 1; }//1F-digitalWrite(2, HIGH);_A_2 if (Motor_1B == 1) { MortorIO_1B = 2; }//1B-digitalWrite(2, HIGH);_B_2 if (Motor_2F == 1) { MortorIO_2F = 4; }//2F-analogWrite(3, 255);_C_2 if (Motor_2B == 1) { MortorIO_2B = 8; }//2B-analogWrite(3, 255);_D_2 if (Motor_3F == 1) { MortorIO_3F = 16; }//3F-analogWrite(5, 255);_E_2 if (Motor_3B == 1) { MortorIO_3B = 32; }//3B-analogWrite(5, 255);_F_2 if (Motor_4F == 1) { MortorIO_4F = 64; }//4F-digitalWrite(4, HIGH);_G_2 if (Motor_4B == 1) { MortorIO_4B = 128; }//4B-digitalWrite(4, HIGH);_H_2 if (Motor_1F == 0) { MortorIO_1F = 0; } if (Motor_1B == 0) { MortorIO_1B = 0; } if (Motor_2F == 0) { MortorIO_2F = 0; } if (Motor_2B == 0) { MortorIO_2B = 0; } if (Motor_3F == 0) { MortorIO_3F = 0; } if (Motor_3B == 0) { MortorIO_3B = 0; } if (Motor_4F == 0) { MortorIO_4F = 0; } if (Motor_4B == 0) { MortorIO_4B = 0; } MortorIO_2 = MortorIO_1F + MortorIO_1B + MortorIO_2F + MortorIO_2B + MortorIO_3F + MortorIO_3B + MortorIO_4F + MortorIO_4B; digitalWrite(12, LOW) ; shiftOut(13, 14, MSBFIRST, MortorIO_1) ; shiftOut(13, 14, MSBFIRST, MortorIO_2) ; digitalWrite(12, HIGH) ; // ラッチ信号を出す //////////////////////////74HC595の処理(終わり)/////////////////////////////////////// //////////////////////////74HC165の処理/////////////////////////////////////// //入力IO読み取り byte dt ; byte dt2 ; dt = ShiftIn(16, 17, 15) ;//1個目のICを読む ShiftData = dt ; //Serial.print("01_"); //Serial.println(dt, BIN) ; dt2 = ShiftIn2(16, 17, 15) ;//2個目のICを読む ShiftData = dt2 ; //Serial.print("02_"); //Serial.println(dt2, BIN) ; //入力IO_Group1のフラグ化 ButtonIO_S9 = dt & 0b00000001; //A_1-S9 ButtonIO_SB = dt & 0b00000010; ButtonIO_SB = ButtonIO_SB >> 1; //B_1-SB ButtonIO_SC = dt & 0b00000100; ButtonIO_SC = ButtonIO_SC >> 2; //C_1-SC ButtonIO_SE = dt & 0b00001000; ButtonIO_SE = ButtonIO_SE >> 3; //D_1-SE ButtonIO_SF = dt & 0b00010000; ButtonIO_SF = ButtonIO_SF >> 4; //E_1-SF ButtonIO_SD = dt & 0b00100000; ButtonIO_SD = ButtonIO_SD >> 5; //F_1-SD ButtonIO_SA = dt & 0b01000000; ButtonIO_SA = ButtonIO_SA >> 6; //G_1-SA ButtonIO_S8 = dt & 0b10000000; ButtonIO_S8 = ButtonIO_S8 >> 7; //H_1-S8 //and処理でマスクをかけた後、ビットシフトして、10判定 //入力IO_Group2のフラグ化 ButtonIO_S1 = dt2 & 0b00000001; //A_2-S1 ButtonIO_S3 = dt2 & 0b00000010; ButtonIO_S3 = ButtonIO_S3 >> 1; //B_2-S3 ButtonIO_S4 = dt2 & 0b00000100; ButtonIO_S4 = ButtonIO_S4 >> 2; //C_2-S4 ButtonIO_S6 = dt2 & 0b00001000; ButtonIO_S6 = ButtonIO_S6 >> 3; //D_2-S6 ButtonIO_S7 = dt2 & 0b00010000; ButtonIO_S7 = ButtonIO_S7 >> 4; //E_2-S7 ButtonIO_S5 = dt2 & 0b00100000; ButtonIO_S5 = ButtonIO_S5 >> 5; //F_2-S5 ButtonIO_S2 = dt2 & 0b01000000; ButtonIO_S2 = ButtonIO_S2 >> 6; //G_2-S2 ButtonIO_S0 = dt2 & 0b10000000; ButtonIO_S0 = ButtonIO_S0 >> 7; //H_2-S0 //and処理でマスクをかけた後、ビットシフトして、10判定 //////////////////////////74HC165の処理(おわり)/////////////////////////////////////// //////////////////////////コントローラーからのスティックによって速度を変える処理/////////////////////////////////////// Mode_OyaKo = MyMode1_Val;; int Myspeed_MigiUe; int Myspeed_MigiSita; int Myspeed_HidariUe; int Myspeed_HidarSita; int ZengoBufferValue_L; int SayuuBufferValue_L; int ZengoBufferValue_R; int SayuuBufferValue_R; int Zengo_Sayuu_Handan; //AnalogINI if (PSB_START_Val == 1 ) { Analog_L_X_ini_Value = L_sayuu_Val; Analog_L_Y_ini_Value = L_Zengo_Val; Analog_R_X_ini_Value = R_sayuu_Val; Analog_R_Y_ini_Value = R_Zengo_Val; AnalogKoutai_L = Analog_L_Y_ini_Value + 25; AnalogZensin_L = Analog_L_Y_ini_Value - 25; AnalogHidari_L = Analog_L_X_ini_Value - 25; AnalogMigi_L = Analog_L_X_ini_Value + 25; AnalogKoutai_R = Analog_R_Y_ini_Value + 25; AnalogZensin_R = Analog_R_Y_ini_Value - 25; AnalogHidari_R = Analog_R_X_ini_Value - 25; AnalogMigi_R = Analog_R_X_ini_Value + 25; First_Check = 1; } //left stick if (abs(L_Zengo_Val - AnalogKoutai_L) >= abs(AnalogZensin_L - L_Zengo_Val)) { ZengoBufferValue_L = abs(L_Zengo_Val - AnalogKoutai_L); } else { ZengoBufferValue_L = abs(AnalogZensin_L - L_Zengo_Val); } if (abs(L_sayuu_Val - AnalogMigi_L) >= abs( AnalogHidari_L - L_sayuu_Val)) { SayuuBufferValue_L = abs(L_sayuu_Val - AnalogMigi_L); } else { SayuuBufferValue_L = abs(AnalogHidari_L - L_sayuu_Val); } //right stick if (abs(R_Zengo_Val - AnalogKoutai_R) >= abs(AnalogZensin_R - R_Zengo_Val)) { ZengoBufferValue_R = abs(R_Zengo_Val - AnalogKoutai_R); } else { ZengoBufferValue_R = abs(AnalogZensin_R - R_Zengo_Val); } if (abs(R_sayuu_Val - AnalogMigi_R) >= abs( AnalogHidari_R - R_sayuu_Val)) { SayuuBufferValue_R = abs(R_sayuu_Val - AnalogMigi_R); } else { SayuuBufferValue_R = abs(AnalogHidari_R - R_sayuu_Val); } //比較 if (ZengoBufferValue_L >= SayuuBufferValue_L) { if (ZengoBufferValue_L >= SayuuBufferValue_R) { if (ZengoBufferValue_L >= ZengoBufferValue_R) { Zengo_Sayuu_Handan = 1; //L-zengo } else { Zengo_Sayuu_Handan = 3; //R-zengo } } else { if (SayuuBufferValue_R >= ZengoBufferValue_R) { Zengo_Sayuu_Handan = 4; //R-sayuu } else { Zengo_Sayuu_Handan = 3; //R-zengo } } } else { if (SayuuBufferValue_L >= SayuuBufferValue_R) { if (SayuuBufferValue_L >= ZengoBufferValue_R) { Zengo_Sayuu_Handan = 2; //L-sayuu } else { Zengo_Sayuu_Handan = 3; //R-zengo } } else { if (SayuuBufferValue_R >= ZengoBufferValue_R) { Zengo_Sayuu_Handan = 4; //R-sayuu } else { Zengo_Sayuu_Handan = 3; //R-zengo } } } //////////////////////////コントローラーからのスティックによって速度を変える処理(終わり)/////////////////////////////////////// //////////////////////////モーターへ指令をする/////////////////////////////////////// if (First_Check == 1) {//コントローラー未接続防止 //前進 if (L_Zengo_Val <= 32 && Zengo_Sayuu_Handan == 1 || R_Zengo_Val <= 32 && Zengo_Sayuu_Handan == 3 ) { Mortor05_InputMode = 1; Mortor05_TargetSpeed = 30000; Mortor06_InputMode = 1; Mortor06_TargetSpeed = 30000; Mortor07_InputMode = 1; Mortor07_TargetSpeed = 30000; Mortor08_InputMode = 1; Mortor08_TargetSpeed = 30000; } else if (L_Zengo_Val <= 62 && Zengo_Sayuu_Handan == 1 || R_Zengo_Val <= 62 && Zengo_Sayuu_Handan == 3 ) { Mortor05_InputMode = 1; Mortor05_TargetSpeed = 20000; Mortor06_InputMode = 1; Mortor06_TargetSpeed = 20000; Mortor07_InputMode = 1; Mortor07_TargetSpeed = 20000; Mortor08_InputMode = 1; Mortor08_TargetSpeed = 20000; } else if (L_Zengo_Val <= 112 && Zengo_Sayuu_Handan == 1 || R_Zengo_Val <= 112 && Zengo_Sayuu_Handan == 3 ) { Mortor05_InputMode = 1; Mortor05_TargetSpeed = 5000; Mortor06_InputMode = 1; Mortor06_TargetSpeed = 5000; Mortor07_InputMode = 1; Mortor07_TargetSpeed = 5000; Mortor08_InputMode = 1; Mortor08_TargetSpeed = 5000; //後進 } else if (L_Zengo_Val >= 236 && Zengo_Sayuu_Handan == 1 || R_Zengo_Val >= 236 && Zengo_Sayuu_Handan == 3 ) { Mortor05_InputMode = 2; Mortor05_TargetSpeed = 30000; Mortor06_InputMode = 2; Mortor06_TargetSpeed = 30000; Mortor07_InputMode = 2; Mortor07_TargetSpeed = 30000; Mortor08_InputMode = 2; Mortor08_TargetSpeed = 30000; } else if (L_Zengo_Val >= 206 && Zengo_Sayuu_Handan == 1 || R_Zengo_Val >= 206 && Zengo_Sayuu_Handan == 3 ) { Mortor05_InputMode = 2; Mortor05_TargetSpeed = 20000; Mortor06_InputMode = 2; Mortor06_TargetSpeed = 20000; Mortor07_InputMode = 2; Mortor07_TargetSpeed = 20000; Mortor08_InputMode = 2; Mortor08_TargetSpeed = 20000; } else if (L_Zengo_Val >= 176 && Zengo_Sayuu_Handan == 1 || R_Zengo_Val >= 176 && Zengo_Sayuu_Handan == 3 ) { Mortor05_InputMode = 2; Mortor05_TargetSpeed = 5000; Mortor06_InputMode = 2; Mortor06_TargetSpeed = 5000; Mortor07_InputMode = 2; Mortor07_TargetSpeed = 5000; Mortor08_InputMode = 2; Mortor08_TargetSpeed = 5000; //yoko1(hidari) } else if (L_sayuu_Val <= 32 && Zengo_Sayuu_Handan == 2) { Mortor05_InputMode = 1; Mortor05_TargetSpeed = 30000; Mortor06_InputMode = 1; Mortor06_TargetSpeed = 30000; Mortor07_InputMode = 2; Mortor07_TargetSpeed = 30000; Mortor08_InputMode = 2; Mortor08_TargetSpeed = 30000; //yoko2 } else if (L_sayuu_Val <= 62 && Zengo_Sayuu_Handan == 2 ) { Mortor05_InputMode = 1; Mortor05_TargetSpeed = 20000; Mortor06_InputMode = 1; Mortor06_TargetSpeed = 20000; Mortor07_InputMode = 2; Mortor07_TargetSpeed = 20000; Mortor08_InputMode = 2; Mortor08_TargetSpeed = 20000; //yoko3 } else if (L_sayuu_Val <= 102 && Zengo_Sayuu_Handan == 2) { Mortor05_InputMode = 1; Mortor05_TargetSpeed = 5000; Mortor06_InputMode = 1; Mortor06_TargetSpeed = 5000; Mortor07_InputMode = 2; Mortor07_TargetSpeed = 5000; Mortor08_InputMode = 2; Mortor08_TargetSpeed = 5000; //yoko4(Migi) } else if (L_sayuu_Val >= 236 && Zengo_Sayuu_Handan == 2) { Mortor05_InputMode = 2; Mortor05_TargetSpeed = 30000; Mortor06_InputMode = 2; Mortor06_TargetSpeed = 30000; Mortor07_InputMode = 1; Mortor07_TargetSpeed = 30000; Mortor08_InputMode = 1; Mortor08_TargetSpeed = 30000; //yoko5 } else if (L_sayuu_Val >= 206 && Zengo_Sayuu_Handan == 2) { Mortor05_InputMode = 2; Mortor05_TargetSpeed = 20000; Mortor06_InputMode = 2; Mortor06_TargetSpeed = 20000; Mortor07_InputMode = 1; Mortor07_TargetSpeed = 20000; Mortor08_InputMode = 1; Mortor08_TargetSpeed = 20000; //yoko6 } else if (L_sayuu_Val >= 176 && Zengo_Sayuu_Handan == 2) { Mortor05_InputMode = 2; Mortor05_TargetSpeed = 5000; Mortor06_InputMode = 2; Mortor06_TargetSpeed = 5000; Mortor07_InputMode = 1; Mortor07_TargetSpeed = 5000; Mortor08_InputMode = 1; Mortor08_TargetSpeed = 5000; //yoko13(hidari) } else if (PSB_L1_Val == 1 && PSB_R1_Val == 0) { Mortor05_InputMode = 1; Mortor05_TargetSpeed = 30000; Mortor06_InputMode = 2; Mortor06_TargetSpeed = 30000; Mortor07_InputMode = 2; Mortor07_TargetSpeed = 30000; Mortor08_InputMode = 1; Mortor08_TargetSpeed = 30000; //yoko14(Right } else if (PSB_L1_Val == 0 && PSB_R1_Val == 1) { Mortor05_InputMode = 2; Mortor05_TargetSpeed = 30000; Mortor06_InputMode = 1; Mortor06_TargetSpeed = 30000; Mortor07_InputMode = 1; Mortor07_TargetSpeed = 30000; Mortor08_InputMode = 2; Mortor08_TargetSpeed = 30000; } else { Mortor05_InputMode = 0; Mortor06_InputMode = 0; Mortor07_InputMode = 0; Mortor08_InputMode = 0; } //コンベア if (PSB_TRIANGLE_Val == 1 && PSB_CROSS_Val == 0 ) { Mortor02_InputMode = 1; Mortor02_TargetSpeed = 30000; } else if (PSB_TRIANGLE_Val == 0 && PSB_CROSS_Val == 1 ) { Mortor02_InputMode = 2; Mortor02_TargetSpeed = 30000; } else if (PSB_TRIANGLE_Val == 1 && PSB_CROSS_Val == 1 ) { Mortor02_InputMode = 3; Mortor02_TargetSpeed = 30000; } else if (PSB_TRIANGLE_Val == 0 && PSB_CROSS_Val == 0 ) { Mortor02_InputMode = 0; } } //////////////////////////モーターへ指令をする(終わり)/////////////////////////////////////// //////////////////////////MortorDriver_Mortor01_注意)モーターはゆっくり動作できない。ON OFFのみ/////////////////////////////////////// Mortor01_BrakeFlag = 0; Mortor01_EMGBrakeFlag = 0; if (Mortor01_InputMode == 1) { if (Mortor01_NowSpeed >= 30000) { Mortor01_NowSpeed = 30000; } else if (Mortor01_NowSpeed < 0) { Mortor01_BrakeFlag = 1; Mortor01_NowSpeed = Mortor01_NowSpeed + Mortor01_MortorType * 10; } else { if (Mortor01_TargetSpeed >= Mortor01_NowSpeed) { Mortor01_NowSpeed = Mortor01_NowSpeed + Mortor01_MortorType;//速度インクリメント } else { Mortor01_NowSpeed = Mortor01_NowSpeed - Mortor01_MortorType * 10; } } } else if (Mortor01_InputMode == 2) { if (Mortor01_NowSpeed <= -30000) { Mortor01_NowSpeed = -30000; } else if (Mortor01_NowSpeed > 0) { Mortor01_BrakeFlag = 1; Mortor01_NowSpeed = Mortor01_NowSpeed - Mortor01_MortorType * 10; } else { if (Mortor01_TargetSpeed * -1 <= Mortor01_NowSpeed) { Mortor01_NowSpeed = Mortor01_NowSpeed - Mortor01_MortorType;//速度インクリメント } else { Mortor01_NowSpeed = Mortor01_NowSpeed + Mortor01_MortorType * 10; } } } else if (Mortor01_InputMode == 3) { if (Mortor01_NowSpeed < 0) { Mortor01_BrakeFlag = 1; if (Mortor01_InputMode < -5000) { Mortor01_EMGBrakeFlag = 1; } Mortor01_NowSpeed = Mortor01_NowSpeed + Mortor01_MortorType * 10; } else if (Mortor01_NowSpeed > 0) { Mortor01_BrakeFlag = 1; if (Mortor01_InputMode > 5000) { Mortor01_EMGBrakeFlag = 1; } Mortor01_NowSpeed = Mortor01_NowSpeed - Mortor01_MortorType * 10; } else if (Mortor01_NowSpeed == 0) { Mortor01_EMGBrakeFlag = 1; Mortor01_NowSpeed = 0; } } else if (Mortor01_InputMode == 0) { if (Mortor01_NowSpeed < 0) { Mortor01_BrakeFlag = 1; Mortor01_NowSpeed = Mortor01_NowSpeed + Mortor01_MortorType * 10; } else if (Mortor01_NowSpeed > 0) { Mortor01_BrakeFlag = 1; Mortor01_NowSpeed = Mortor01_NowSpeed - Mortor01_MortorType * 10; } else if (Mortor01_NowSpeed == 0) { Mortor01_NowSpeed = 0; } } if (Mortor01_EMGBrakeFlag == 1) { Motor_1F = 1; Motor_1B = 1; } else if (Mortor01_NowSpeed > 1000 && Mortor01_BrakeFlag == 0) { Motor_1F = 1; Motor_1B = 0; } else if (Mortor01_NowSpeed < -1000 && Mortor01_BrakeFlag == 0) { Motor_1F = 0; Motor_1B = 1; } else { Motor_1F = 0; Motor_1B = 0; } uint16_t Mortor01_MortorOUT; uint16_t Mortor01_Speedbuf; Mortor01_MortorOUT = abs(Mortor01_NowSpeed); if (Mortor01_MortorOUT <= 1000) { digitalWrite(2, LOW);//モーターOFF } else if (Mortor01_MortorOUT >= 29500) { digitalWrite(2, HIGH);//モーターON } else { Mortor01_Speedbuf = (Mortor01_MortorOUT - 1000) / 150 + 50 ; digitalWrite(2, HIGH);//モーターON } //////////////////////////MortorDriver_Mortor02_/////////////////////////////////////// Mortor02_BrakeFlag = 0; Mortor02_EMGBrakeFlag = 0; if (Mortor02_InputMode == 1) { if (Mortor02_NowSpeed >= 30000) { Mortor02_NowSpeed = 30000; } else if (Mortor02_NowSpeed < 0) { Mortor02_BrakeFlag = 1; Mortor02_NowSpeed = Mortor02_NowSpeed + Mortor02_MortorType * 10; } else { if (Mortor02_TargetSpeed >= Mortor02_NowSpeed) { Mortor02_NowSpeed = Mortor02_NowSpeed + Mortor02_MortorType;//速度インクリメント } else { Mortor02_NowSpeed = Mortor02_NowSpeed - Mortor02_MortorType * 10; } } } else if (Mortor02_InputMode == 2) { if (Mortor02_NowSpeed <= -30000) { Mortor02_NowSpeed = -30000; } else if (Mortor02_NowSpeed > 0) { Mortor02_BrakeFlag = 1; Mortor02_NowSpeed = Mortor02_NowSpeed - Mortor02_MortorType * 10; } else { if (Mortor02_TargetSpeed * -1 <= Mortor02_NowSpeed) { Mortor02_NowSpeed = Mortor02_NowSpeed - Mortor02_MortorType;//速度インクリメント } else { Mortor02_NowSpeed = Mortor02_NowSpeed + Mortor02_MortorType * 10; } } } else if (Mortor02_InputMode == 3) { if (Mortor02_NowSpeed < 0) { Mortor02_BrakeFlag = 1; if (Mortor02_InputMode < -5000) { Mortor02_EMGBrakeFlag = 1; } Mortor02_NowSpeed = Mortor02_NowSpeed + Mortor02_MortorType * 10; } else if (Mortor02_NowSpeed > 0) { Mortor02_BrakeFlag = 1; if (Mortor02_InputMode > 5000) { Mortor02_EMGBrakeFlag = 1; } Mortor02_NowSpeed = Mortor02_NowSpeed - Mortor02_MortorType * 10; } else if (Mortor02_NowSpeed == 0) { Mortor02_EMGBrakeFlag = 1; Mortor02_NowSpeed = 0; } } else if (Mortor02_InputMode == 0) { if (Mortor02_NowSpeed < 0) { Mortor02_BrakeFlag = 1; Mortor02_NowSpeed = Mortor02_NowSpeed + Mortor02_MortorType * 10; } else if (Mortor02_NowSpeed > 0) { Mortor02_BrakeFlag = 1; Mortor02_NowSpeed = Mortor02_NowSpeed - Mortor02_MortorType * 10; } else if (Mortor02_NowSpeed == 0) { Mortor02_NowSpeed = 0; } } if (Mortor02_EMGBrakeFlag == 1) { Motor_2F = 1; Motor_2B = 1; } else if (Mortor02_NowSpeed > 1000 && Mortor02_BrakeFlag == 0) { Motor_2F = 1; Motor_2B = 0; } else if (Mortor02_NowSpeed < -1000 && Mortor02_BrakeFlag == 0) { Motor_2F = 0; Motor_2B = 1; } else { Motor_2F = 0; Motor_2B = 0; } uint16_t Mortor02_MortorOUT; uint16_t Mortor02_Speedbuf; Mortor02_MortorOUT = abs(Mortor02_NowSpeed); if (Mortor02_MortorOUT <= 1000) { analogWrite(3, 0);//ここでモーターの速度を決める } else if (Mortor02_MortorOUT >= 29500) { analogWrite(3, 255);//ここでモーターの速度を決める } else { Mortor02_Speedbuf = (Mortor02_MortorOUT - 1000) / 150 + 50 ; analogWrite(3, Mortor02_Speedbuf);//ここでモーターの速度を決める } //////////////////////////MortorDriver_Mortor03_注意)モーターはゆっくり動作できない。ON OFFのみ/////////////////////////////////////// Mortor03_BrakeFlag = 0; Mortor03_EMGBrakeFlag = 0; if (Mortor03_InputMode == 1) { if (Mortor03_NowSpeed >= 30000) { Mortor03_NowSpeed = 30000; } else if (Mortor03_NowSpeed < 0) { Mortor03_BrakeFlag = 1; Mortor03_NowSpeed = Mortor03_NowSpeed + Mortor03_MortorType * 10; } else { if (Mortor03_TargetSpeed >= Mortor03_NowSpeed) { Mortor03_NowSpeed = Mortor03_NowSpeed + Mortor03_MortorType;//速度インクリメント } else { Mortor03_NowSpeed = Mortor03_NowSpeed - Mortor03_MortorType * 10; } } } else if (Mortor03_InputMode == 2) { if (Mortor03_NowSpeed <= -30000) { Mortor03_NowSpeed = -30000; } else if (Mortor03_NowSpeed > 0) { Mortor03_BrakeFlag = 1; Mortor03_NowSpeed = Mortor03_NowSpeed - Mortor03_MortorType * 10; } else { if (Mortor03_TargetSpeed * -1 <= Mortor03_NowSpeed) { Mortor03_NowSpeed = Mortor03_NowSpeed - Mortor03_MortorType;//速度インクリメント } else { Mortor03_NowSpeed = Mortor03_NowSpeed + Mortor03_MortorType * 10; } } } else if (Mortor03_InputMode == 3) { if (Mortor03_NowSpeed < 0) { Mortor03_BrakeFlag = 1; if (Mortor03_InputMode < -5000) { Mortor03_EMGBrakeFlag = 1; } Mortor03_NowSpeed = Mortor03_NowSpeed + Mortor03_MortorType * 10; } else if (Mortor03_NowSpeed > 0) { Mortor03_BrakeFlag = 1; if (Mortor03_InputMode > 5000) { Mortor03_EMGBrakeFlag = 1; } Mortor03_NowSpeed = Mortor03_NowSpeed - Mortor03_MortorType * 10; } else if (Mortor03_NowSpeed == 0) { Mortor03_EMGBrakeFlag = 1; Mortor03_NowSpeed = 0; } } else if (Mortor03_InputMode == 0) { if (Mortor03_NowSpeed < 0) { Mortor03_BrakeFlag = 1; Mortor03_NowSpeed = Mortor03_NowSpeed + Mortor03_MortorType * 10; } else if (Mortor03_NowSpeed > 0) { Mortor03_BrakeFlag = 1; Mortor03_NowSpeed = Mortor03_NowSpeed - Mortor03_MortorType * 10; } else if (Mortor03_NowSpeed == 0) { Mortor03_NowSpeed = 0; } } if (Mortor03_EMGBrakeFlag == 1) { Motor_3F = 1; Motor_3B = 1; } else if (Mortor03_NowSpeed > 1000 && Mortor03_BrakeFlag == 0) { Motor_3F = 1; Motor_3B = 0; } else if (Mortor03_NowSpeed < -1000 && Mortor03_BrakeFlag == 0) { Motor_3F = 0; Motor_3B = 1; } else { Motor_3F = 0; Motor_3B = 0; } uint16_t Mortor03_MortorOUT; uint16_t Mortor03_Speedbuf; Mortor03_MortorOUT = abs(Mortor03_NowSpeed); if (Mortor03_MortorOUT <= 1000) { digitalWrite(4, LOW);//モーターOFF } else if (Mortor03_MortorOUT >= 29500) { digitalWrite(4, HIGH);//モーターON } else { Mortor03_Speedbuf = (Mortor03_MortorOUT - 1000) / 150 + 50 ; digitalWrite(4, HIGH);//モーターON } //////////////////////////MortorDriver_Mortor04_/////////////////////////////////////// Mortor04_BrakeFlag = 0; Mortor04_EMGBrakeFlag = 0; if (Mortor04_InputMode == 1) { if (Mortor04_NowSpeed >= 30000) { Mortor04_NowSpeed = 30000; } else if (Mortor04_NowSpeed < 0) { Mortor04_BrakeFlag = 1; Mortor04_NowSpeed = Mortor04_NowSpeed + Mortor04_MortorType * 10; } else { if (Mortor04_TargetSpeed >= Mortor04_NowSpeed) { Mortor04_NowSpeed = Mortor04_NowSpeed + Mortor04_MortorType;//速度インクリメント } else { Mortor04_NowSpeed = Mortor04_NowSpeed - Mortor04_MortorType * 10; } } } else if (Mortor04_InputMode == 2) { if (Mortor04_NowSpeed <= -30000) { Mortor04_NowSpeed = -30000; } else if (Mortor04_NowSpeed > 0) { Mortor04_BrakeFlag = 1; Mortor04_NowSpeed = Mortor04_NowSpeed - Mortor04_MortorType * 10; } else { if (Mortor04_TargetSpeed * -1 <= Mortor04_NowSpeed) { Mortor04_NowSpeed = Mortor04_NowSpeed - Mortor04_MortorType;//速度インクリメント } else { Mortor04_NowSpeed = Mortor04_NowSpeed + Mortor04_MortorType * 10; } } } else if (Mortor04_InputMode == 3) { if (Mortor04_NowSpeed < 0) { Mortor04_BrakeFlag = 1; if (Mortor04_InputMode < -5000) { Mortor04_EMGBrakeFlag = 1; } Mortor04_NowSpeed = Mortor04_NowSpeed + Mortor04_MortorType * 10; } else if (Mortor04_NowSpeed > 0) { Mortor04_BrakeFlag = 1; if (Mortor04_InputMode > 5000) { Mortor04_EMGBrakeFlag = 1; } Mortor04_NowSpeed = Mortor04_NowSpeed - Mortor04_MortorType * 10; } else if (Mortor04_NowSpeed == 0) { Mortor04_EMGBrakeFlag = 1; Mortor04_NowSpeed = 0; } } else if (Mortor04_InputMode == 0) { if (Mortor04_NowSpeed < 0) { Mortor04_BrakeFlag = 1; Mortor04_NowSpeed = Mortor04_NowSpeed + Mortor04_MortorType * 10; } else if (Mortor04_NowSpeed > 0) { Mortor04_BrakeFlag = 1; Mortor04_NowSpeed = Mortor04_NowSpeed - Mortor04_MortorType * 10; } else if (Mortor04_NowSpeed == 0) { Mortor04_NowSpeed = 0; } } if (Mortor04_EMGBrakeFlag == 1) { Motor_4F = 1; Motor_4B = 1; } else if (Mortor04_NowSpeed > 1000 && Mortor04_BrakeFlag == 0) { Motor_4F = 1; Motor_4B = 0; } else if (Mortor04_NowSpeed < -1000 && Mortor04_BrakeFlag == 0) { Motor_4F = 0; Motor_4B = 1; } else { Motor_4F = 0; Motor_4B = 0; } uint16_t Mortor04_MortorOUT; uint16_t Mortor04_Speedbuf; Mortor04_MortorOUT = abs(Mortor04_NowSpeed); if (Mortor04_MortorOUT <= 1000) { analogWrite(5, 0);//ここでモーターの速度を決める } else if (Mortor04_MortorOUT >= 29500) { analogWrite(5, 255);//ここでモーターの速度を決める } else { Mortor04_Speedbuf = (Mortor04_MortorOUT - 1000) / 150 + 50 ; analogWrite(5, Mortor04_Speedbuf);//ここでモーターの速度を決める } //////////////////////////MortorDriver_Mortor05_/////////////////////////////////////// Mortor05_BrakeFlag = 0; Mortor05_EMGBrakeFlag = 0; if (Mortor05_InputMode == 1) { if (Mortor05_NowSpeed >= 30000) { Mortor05_NowSpeed = 30000; } else if (Mortor05_NowSpeed < 0) { Mortor05_BrakeFlag = 1; Mortor05_NowSpeed = Mortor05_NowSpeed + Mortor05_MortorType * 10; } else { if (Mortor05_TargetSpeed >= Mortor05_NowSpeed) { Mortor05_NowSpeed = Mortor05_NowSpeed + Mortor05_MortorType;//速度インクリメント } else { Mortor05_NowSpeed = Mortor05_NowSpeed - Mortor05_MortorType * 10; } } } else if (Mortor05_InputMode == 2) { if (Mortor05_NowSpeed <= -30000) { Mortor05_NowSpeed = -30000; } else if (Mortor05_NowSpeed > 0) { Mortor05_BrakeFlag = 1; Mortor05_NowSpeed = Mortor05_NowSpeed - Mortor05_MortorType * 10; } else { if (Mortor05_TargetSpeed * -1 <= Mortor05_NowSpeed) { Mortor05_NowSpeed = Mortor05_NowSpeed - Mortor05_MortorType;//速度インクリメント } else { Mortor05_NowSpeed = Mortor05_NowSpeed + Mortor05_MortorType * 10; } } } else if (Mortor05_InputMode == 3) { if (Mortor05_NowSpeed < 0) { Mortor05_BrakeFlag = 1; if (Mortor05_InputMode < -5000) { Mortor05_EMGBrakeFlag = 1; } Mortor05_NowSpeed = Mortor05_NowSpeed + Mortor05_MortorType * 10; } else if (Mortor05_NowSpeed > 0) { Mortor05_BrakeFlag = 1; if (Mortor05_InputMode > 5000) { Mortor05_EMGBrakeFlag = 1; } Mortor05_NowSpeed = Mortor05_NowSpeed - Mortor05_MortorType * 10; } else if (Mortor05_NowSpeed == 0) { Mortor05_EMGBrakeFlag = 1; Mortor05_NowSpeed = 0; } } else if (Mortor05_InputMode == 0) { if (Mortor05_NowSpeed < 0) { Mortor05_BrakeFlag = 1; Mortor05_NowSpeed = Mortor05_NowSpeed + Mortor05_MortorType * 10; } else if (Mortor05_NowSpeed > 0) { Mortor05_BrakeFlag = 1; Mortor05_NowSpeed = Mortor05_NowSpeed - Mortor05_MortorType * 10; } else if (Mortor05_NowSpeed == 0) { Mortor05_NowSpeed = 0; } } if (Mortor05_EMGBrakeFlag == 1) { Motor_5F = 1; Motor_5B = 1; } else if (Mortor05_NowSpeed > 1000 && Mortor05_BrakeFlag == 0) { Motor_5F = 1; Motor_5B = 0; } else if (Mortor05_NowSpeed < -1000 && Mortor05_BrakeFlag == 0) { Motor_5F = 0; Motor_5B = 1; } else { Motor_5F = 0; Motor_5B = 0; } uint16_t Mortor05_MortorOUT; uint16_t Mortor05_Speedbuf; Mortor05_MortorOUT = abs(Mortor05_NowSpeed); if (Mortor05_MortorOUT <= 1000) { analogWrite(6, 0);//ここでモーターの速度を決める } else if (Mortor05_MortorOUT >= 29500) { analogWrite(6, 255);//ここでモーターの速度を決める } else { Mortor05_Speedbuf = (Mortor05_MortorOUT - 1000) / 150 + 50 ; analogWrite(6, Mortor05_Speedbuf);//ここでモーターの速度を決める } //////////////////////////MortorDriver_Mortor06_/////////////////////////////////////// Mortor06_BrakeFlag = 0; Mortor06_EMGBrakeFlag = 0; if (Mortor06_InputMode == 1) { if (Mortor06_NowSpeed >= 30000) { Mortor06_NowSpeed = 30000; } else if (Mortor06_NowSpeed < 0) { Mortor06_BrakeFlag = 1; Mortor06_NowSpeed = Mortor06_NowSpeed + Mortor06_MortorType * 10; } else { if (Mortor06_TargetSpeed >= Mortor06_NowSpeed) { Mortor06_NowSpeed = Mortor06_NowSpeed + Mortor06_MortorType;//速度インクリメント } else { Mortor06_NowSpeed = Mortor06_NowSpeed - Mortor06_MortorType * 10; } } } else if (Mortor06_InputMode == 2) { if (Mortor06_NowSpeed <= -30000) { Mortor06_NowSpeed = -30000; } else if (Mortor06_NowSpeed > 0) { Mortor06_BrakeFlag = 1; Mortor06_NowSpeed = Mortor06_NowSpeed - Mortor06_MortorType * 10; } else { if (Mortor06_TargetSpeed * -1 <= Mortor06_NowSpeed) { Mortor06_NowSpeed = Mortor06_NowSpeed - Mortor06_MortorType;//速度インクリメント } else { Mortor06_NowSpeed = Mortor06_NowSpeed + Mortor06_MortorType * 10; } } } else if (Mortor06_InputMode == 3) { if (Mortor06_NowSpeed < 0) { Mortor06_BrakeFlag = 1; if (Mortor06_InputMode < -5000) { Mortor06_EMGBrakeFlag = 1; } Mortor06_NowSpeed = Mortor06_NowSpeed + Mortor06_MortorType * 10; } else if (Mortor06_NowSpeed > 0) { Mortor06_BrakeFlag = 1; if (Mortor06_InputMode > 5000) { Mortor06_EMGBrakeFlag = 1; } Mortor06_NowSpeed = Mortor06_NowSpeed - Mortor06_MortorType * 10; } else if (Mortor06_NowSpeed == 0) { Mortor06_EMGBrakeFlag = 1; Mortor06_NowSpeed = 0; } } else if (Mortor06_InputMode == 0) { if (Mortor06_NowSpeed < 0) { Mortor06_BrakeFlag = 1; Mortor06_NowSpeed = Mortor06_NowSpeed + Mortor06_MortorType * 10; } else if (Mortor06_NowSpeed > 0) { Mortor06_BrakeFlag = 1; Mortor06_NowSpeed = Mortor06_NowSpeed - Mortor06_MortorType * 10; } else if (Mortor06_NowSpeed == 0) { Mortor06_NowSpeed = 0; } } if (Mortor06_EMGBrakeFlag == 1) { Motor_6F = 1; Motor_6B = 1; } else if (Mortor06_NowSpeed > 1000 && Mortor06_BrakeFlag == 0) { Motor_6F = 1; Motor_6B = 0; } else if (Mortor06_NowSpeed < -1000 && Mortor06_BrakeFlag == 0) { Motor_6F = 0; Motor_6B = 1; } else { Motor_6F = 0; Motor_6B = 0; } uint16_t Mortor06_MortorOUT; uint16_t Mortor06_Speedbuf; Mortor06_MortorOUT = abs(Mortor06_NowSpeed); if (Mortor06_MortorOUT <= 1000) { analogWrite(9, 0);//ここでモーターの速度を決める } else if (Mortor06_MortorOUT >= 29500) { analogWrite(9, 255);//ここでモーターの速度を決める } else { Mortor06_Speedbuf = (Mortor06_MortorOUT - 1000) / 150 + 50 ; analogWrite(9, Mortor06_Speedbuf);//ここでモーターの速度を決める } //////////////////////////MortorDriver_Mortor07_/////////////////////////////////////// Mortor07_BrakeFlag = 0; Mortor07_EMGBrakeFlag = 0; if (Mortor07_InputMode == 1) { if (Mortor07_NowSpeed >= 30000) { Mortor07_NowSpeed = 30000; } else if (Mortor07_NowSpeed < 0) { Mortor07_BrakeFlag = 1; Mortor07_NowSpeed = Mortor07_NowSpeed + Mortor07_MortorType * 10; } else { if (Mortor07_TargetSpeed >= Mortor07_NowSpeed) { Mortor07_NowSpeed = Mortor07_NowSpeed + Mortor07_MortorType;//速度インクリメント } else { Mortor07_NowSpeed = Mortor07_NowSpeed - Mortor07_MortorType * 10; } } } else if (Mortor07_InputMode == 2) { if (Mortor07_NowSpeed <= -30000) { Mortor07_NowSpeed = -30000; } else if (Mortor07_NowSpeed > 0) { Mortor07_BrakeFlag = 1; Mortor07_NowSpeed = Mortor07_NowSpeed - Mortor07_MortorType * 10; } else { if (Mortor07_TargetSpeed * -1 <= Mortor07_NowSpeed) { Mortor07_NowSpeed = Mortor07_NowSpeed - Mortor07_MortorType;//速度インクリメント } else { Mortor07_NowSpeed = Mortor07_NowSpeed + Mortor07_MortorType * 10; } } } else if (Mortor07_InputMode == 3) { if (Mortor07_NowSpeed < 0) { Mortor07_BrakeFlag = 1; if (Mortor07_InputMode < -5000) { Mortor07_EMGBrakeFlag = 1; } Mortor07_NowSpeed = Mortor07_NowSpeed + Mortor07_MortorType * 10; } else if (Mortor07_NowSpeed > 0) { Mortor07_BrakeFlag = 1; if (Mortor07_InputMode > 5000) { Mortor07_EMGBrakeFlag = 1; } Mortor07_NowSpeed = Mortor07_NowSpeed - Mortor07_MortorType * 10; } else if (Mortor07_NowSpeed == 0) { Mortor07_EMGBrakeFlag = 1; Mortor07_NowSpeed = 0; } } else if (Mortor07_InputMode == 0) { if (Mortor07_NowSpeed < 0) { Mortor07_BrakeFlag = 1; Mortor07_NowSpeed = Mortor07_NowSpeed + Mortor07_MortorType * 10; } else if (Mortor07_NowSpeed > 0) { Mortor07_BrakeFlag = 1; Mortor07_NowSpeed = Mortor07_NowSpeed - Mortor07_MortorType * 10; } else if (Mortor07_NowSpeed == 0) { Mortor07_NowSpeed = 0; } } if (Mortor07_EMGBrakeFlag == 1) { Motor_7F = 1; Motor_7B = 1; } else if (Mortor07_NowSpeed > 1000 && Mortor07_BrakeFlag == 0) { Motor_7F = 1; Motor_7B = 0; } else if (Mortor07_NowSpeed < -1000 && Mortor07_BrakeFlag == 0) { Motor_7F = 0; Motor_7B = 1; } else { Motor_7F = 0; Motor_7B = 0; } uint16_t Mortor07_MortorOUT; uint16_t Mortor07_Speedbuf; Mortor07_MortorOUT = abs(Mortor07_NowSpeed); if (Mortor07_MortorOUT <= 1000) { analogWrite(11, 0);//ここでモーターの速度を決める } else if (Mortor07_MortorOUT >= 29500) { analogWrite(11, 255);//ここでモーターの速度を決める } else { Mortor07_Speedbuf = (Mortor07_MortorOUT - 1000) / 150 + 50 ; analogWrite(11, Mortor07_Speedbuf);//ここでモーターの速度を決める } //////////////////////////MortorDriver_Mortor08_/////////////////////////////////////// Mortor08_BrakeFlag = 0; Mortor08_EMGBrakeFlag = 0; if (Mortor08_InputMode == 1) { if (Mortor08_NowSpeed >= 30000) { Mortor08_NowSpeed = 30000; } else if (Mortor08_NowSpeed < 0) { Mortor08_BrakeFlag = 1; Mortor08_NowSpeed = Mortor08_NowSpeed + Mortor08_MortorType * 10; } else { if (Mortor08_TargetSpeed >= Mortor08_NowSpeed) { Mortor08_NowSpeed = Mortor08_NowSpeed + Mortor08_MortorType;//速度インクリメント } else { Mortor08_NowSpeed = Mortor08_NowSpeed - Mortor08_MortorType * 10; } } } else if (Mortor08_InputMode == 2) { if (Mortor08_NowSpeed <= -30000) { Mortor08_NowSpeed = -30000; } else if (Mortor08_NowSpeed > 0) { Mortor08_BrakeFlag = 1; Mortor08_NowSpeed = Mortor08_NowSpeed - Mortor08_MortorType * 10; } else { if (Mortor08_TargetSpeed * -1 <= Mortor08_NowSpeed) { Mortor08_NowSpeed = Mortor08_NowSpeed - Mortor08_MortorType;//速度インクリメント } else { Mortor08_NowSpeed = Mortor08_NowSpeed + Mortor08_MortorType * 10; } } } else if (Mortor08_InputMode == 3) { if (Mortor08_NowSpeed < 0) { Mortor08_BrakeFlag = 1; if (Mortor08_InputMode < -5000) { Mortor08_EMGBrakeFlag = 1; } Mortor08_NowSpeed = Mortor08_NowSpeed + Mortor08_MortorType * 10; } else if (Mortor08_NowSpeed > 0) { Mortor08_BrakeFlag = 1; if (Mortor08_InputMode > 5000) { Mortor08_EMGBrakeFlag = 1; } Mortor08_NowSpeed = Mortor08_NowSpeed - Mortor08_MortorType * 10; } else if (Mortor08_NowSpeed == 0) { Mortor08_EMGBrakeFlag = 1; Mortor08_NowSpeed = 0; } } else if (Mortor08_InputMode == 0) { if (Mortor08_NowSpeed < 0) { Mortor08_BrakeFlag = 1; Mortor08_NowSpeed = Mortor08_NowSpeed + Mortor08_MortorType * 10; } else if (Mortor08_NowSpeed > 0) { Mortor08_BrakeFlag = 1; Mortor08_NowSpeed = Mortor08_NowSpeed - Mortor08_MortorType * 10; } else if (Mortor08_NowSpeed == 0) { Mortor08_NowSpeed = 0; } } if (Mortor08_EMGBrakeFlag == 1) { Motor_8F = 1; Motor_8B = 1; } else if (Mortor08_NowSpeed > 1000 && Mortor08_BrakeFlag == 0) { Motor_8F = 1; Motor_8B = 0; } else if (Mortor08_NowSpeed < -1000 && Mortor08_BrakeFlag == 0) { Motor_8F = 0; Motor_8B = 1; } else { Motor_8F = 0; Motor_8B = 0; } uint16_t Mortor08_MortorOUT; uint16_t Mortor08_Speedbuf; Mortor08_MortorOUT = abs(Mortor08_NowSpeed); if (Mortor08_MortorOUT <= 1000) { analogWrite(10, 0);//ここでモーターの速度を決める } else if (Mortor08_MortorOUT >= 29500) { analogWrite(10, 255);//ここでモーターの速度を決める } else { Mortor08_Speedbuf = (Mortor08_MortorOUT - 1000) / 150 + 50 ; analogWrite(10, Mortor08_Speedbuf);//ここでモーターの速度を決める } //時間計測(通常は使わない) /* if(ScanCount>1000){ unsigned long Nowtime;//「time」をunsigned longで変数宣言 Nowtime = millis();//プログラム実行からの経過時間(ms)をtimeに返す Serial.println(Nowtime-Beftime); Beftime=Nowtime; ScanCount=0; } ScanCount=ScanCount+1; */ //時間計測(通常は使わない) //////////////////////////プログラムメイン(終わり)/////////////////////////////////////// }