#include Joystick_ Joystick = Joystick_(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD, 23, 0, true, true, false, false, false, false, false, false, false, false, false); #define RDOT 14 #define AC 10 uint8_t IP[4] = {16, 6, 5, 4}; uint8_t OP[5] = {9, 8, 7, 3, 2}; uint8_t keyStat[5][4]; uint8_t keyStatExt[3]; //√ . AC uint8_t keyin; void setup() { for(int i=0; i<4; i++) pinMode(IP[i], INPUT_PULLUP); pinMode(RDOT, INPUT_PULLUP); for(int i=0; i<5; i++) pinMode(OP[i], INPUT); //ハイインピーダンスにする pinMode(AC, INPUT); //ハイインピーダンスにする //キーの状態リセット for(int i=0; i<5; i++) for(int j=0; j<4; j++) keyStat[i][j] = 1; for(int i=0; i<3; i++) keyStatExt[i] = 1; Joystick.begin(); } void loop() { for(int i=0; i<5; i++) { pinMode(OP[i], OUTPUT); digitalWrite(OP[i], LOW); delay(1); //信号線の状態が安定するのを待つ for(int j=0; j<4; j++) { keyin = digitalRead(IP[j]); if(keyin != keyStat[i][j]) { Joystick.setButton(i + j * 5, (~keyin & 1)); keyStat[i][j] = keyin; } } pinMode(OP[i], INPUT); //ハイインピーダンスにする } for(int i=0; i<2; i++) { pinMode(OP[i], OUTPUT); digitalWrite(OP[i], LOW); delay(1); //信号線の状態が安定するのを待つ keyin = digitalRead(RDOT); if(keyin != keyStatExt[i]) { Joystick.setButton(i + 20, (~keyin & 1)); keyStatExt[i] = keyin; } pinMode(OP[i], INPUT); //ハイインピーダンスにする } pinMode(AC, OUTPUT); digitalWrite(AC, LOW); delay(1); //信号線の状態が安定するのを待つ keyin = digitalRead(IP[1]); if(keyin != keyStatExt[2]) { Joystick.setButton(22, (~keyin & 1)); keyStatExt[2] = keyin; } pinMode(AC, INPUT); //ハイインピーダンスにする }