#include #define SPEAKER 2 char pin[] = {3, 4, 5, 6, 7, 8, 9}; char line1[] = {5, 6}; char line2[] = {5, 6, 7, 9}; char line5[] = {6, 9}; char button1[] = {DPAD_UP, DPAD_RIGHT}; char button2[] = {DPAD_DOWN, DPAD_LEFT, BUTTON_START, BUTTON_A}; char button5[] = {BUTTON_BACK, BUTTON_B}; char button6 = BUTTON_X; unsigned int frequency[] = {262, 294, 330}; byte stat1[2], stat2[4], stat5[2], stat6; byte keyin; void setup() { pinMode(SPEAKER, OUTPUT); for(int i=0; i<7; i++) pinMode(pin[i], INPUT_PULLUP); for(int i=0; i<3; i++) { tone(SPEAKER, frequency[i], 200); delay(200); } // ボタンの状態初期値 stat1[0] = 1; stat1[1] = 1; for(int i=0; i<4; i++) stat2[i] = 1; stat5[0] = 1; stat5[1] = 1; stat6 = 1; XInput.setAutoSend(false); XInput.begin(); } void loop() { char p; // LINE1 for(int i=0; i<2; i++) { p = line1[i]; pinMode(p, OUTPUT); digitalWrite(p, LOW); keyin = digitalRead(pin[0]); if(keyin != stat1[i]) { XInput.setButton(button1[i], !(keyin & 1)); stat1[i] = keyin; } pinMode(p, INPUT_PULLUP); } // LINE2 for(int i=0; i<4; i++) { p = line2[i]; pinMode(p, OUTPUT); digitalWrite(p, LOW); keyin = digitalRead(pin[1]); if(keyin != stat2[i]) { XInput.setButton(button2[i], !(keyin & 1)); stat2[i] = keyin; } pinMode(p, INPUT_PULLUP); } // LINE5 for(int i=0; i<2; i++) { p = line5[i]; pinMode(p, OUTPUT); digitalWrite(p, LOW); keyin = digitalRead(pin[4]); if(keyin != stat5[i]) { XInput.setButton(button5[i], !(keyin & 1)); stat5[i] = keyin; } pinMode(p, INPUT_PULLUP); } // LINE6 p = pin[6]; pinMode(p, OUTPUT); digitalWrite(p, LOW); keyin = digitalRead(pin[5]); if(keyin != stat6) { XInput.setButton(button6, !(keyin & 1)); stat6 = keyin; } pinMode(p, INPUT_PULLUP); XInput.send(); }