//初期化 int IC_OUT_1 = 0; int IC_OUT_2 = 0; int IC_OUT_1A = 0; int IC_OUT_1B = 0; int IC_OUT_1C = 0; int IC_OUT_1D = 0; int IC_OUT_1E = 0; int IC_OUT_1F = 0; int IC_OUT_1G = 0; int IC_OUT_1H = 0; int IC_OUT_2A = 0; int IC_OUT_2B = 0; int IC_OUT_2C = 0; int IC_OUT_2D = 0; int IC_OUT_2E = 0; int IC_OUT_2F = 0; int IC_OUT_2G = 0; int IC_OUT_2H = 0; //Cont 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; uint8_t buffer_value1; uint8_t buffer_value2; uint8_t buffer_value3; int InputType;//0〜7 int InputTypeFlag;//0〜1 void setup() { Serial.begin(57600) ; //I/O_OUT_PIN pinMode(12, OUTPUT) ; // 制御するピンは全て出力に設定する pinMode(13, OUTPUT) ; pinMode(14, OUTPUT) ; } void loop() { //シリアル通信取得部分 if (Serial.available()) { input[i] = Serial.read(); // 8バイトを取得する 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); i++; } else if (i == 4) { R_Zengo_Val = constrain(input[i], 0, 255); i++; } 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; 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; 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; 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++; } else { i++; } } //シリアル通信取得部分// //出力タイプ変更(セレクト+スタートボタン) if (PSB_START_Val == 1 && PSB_SELECT_Val == 1 && InputTypeFlag==0) { InputTypeFlag=1; InputType = InputType + 1; if (InputType > 3) { InputType = 0; } }else if (PSB_START_Val == 0 && PSB_SELECT_Val == 0 && InputTypeFlag==1) { InputTypeFlag=0; } //拡張IC操作部分 uint8_t MyBuffer1; uint8_t MyBuffer2; if (InputType == 0) { MyBuffer2 = 255;//1バイト目(インデックス) MyBuffer1 = buffer_value3;//8バイト目 } else if (InputType == 1) { MyBuffer1 = L_sayuu_Val;//2バイト目(インデックス) MyBuffer2 = L_Zengo_Val;//3バイト目 } else if (InputType == 2) { MyBuffer1 = R_sayuu_Val;//4バイト目(インデックス) MyBuffer2 = R_Zengo_Val;//5バイト目 } else if (InputType == 3) { MyBuffer1 = buffer_value1;//6バイト目(インデックス) MyBuffer2 = buffer_value2;//7バイト目 } //74HC595-1の状態を設定する値 IC_OUT_1A = MyBuffer1 & 0b00000001; IC_OUT_1B = MyBuffer1 & 0b00000010; IC_OUT_1C = MyBuffer1 & 0b00000100; IC_OUT_1D = MyBuffer1 & 0b00001000; IC_OUT_1E = MyBuffer1 & 0b00010000; IC_OUT_1F = MyBuffer1 & 0b00100000; IC_OUT_1G = MyBuffer1 & 0b01000000; IC_OUT_1H = MyBuffer1 & 0b10000000; //74HC595-2の状態を設定する値 IC_OUT_2A = MyBuffer2 & 0b00000001; IC_OUT_2B = MyBuffer2 & 0b00000010; IC_OUT_2C = MyBuffer2 & 0b00000100; IC_OUT_2D = MyBuffer2 & 0b00001000; IC_OUT_2E = MyBuffer2 & 0b00010000; IC_OUT_2F = MyBuffer2 & 0b00100000; IC_OUT_2G = MyBuffer2 & 0b01000000; IC_OUT_2H = MyBuffer2 & 0b10000000; //ここで数値を並べる IC_OUT_1 = IC_OUT_1A + IC_OUT_1B + IC_OUT_1C + IC_OUT_1D + IC_OUT_1E + IC_OUT_1F + IC_OUT_1G + IC_OUT_1H; IC_OUT_2 = IC_OUT_2A + IC_OUT_2B + IC_OUT_2C + IC_OUT_2D + IC_OUT_2E + IC_OUT_2F + IC_OUT_2G + IC_OUT_2H; //IC_OUTへの指令 digitalWrite(12, LOW) ;//送信準備 shiftOut(13, 14, MSBFIRST, IC_OUT_2) ;//74HC595-2の状態をICへ設定 shiftOut(13, 14, MSBFIRST, IC_OUT_1) ;//74HC595-1の状態をICへ設定 digitalWrite(12, HIGH);// ラッチ信号を出すと、出力ピンが設定のとおりの出力に変化 //拡張IC操作部分// }