#define CLOCK 3 #define DATA 2 uint8_t button[10] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 14}; uint8_t btstat[10]; void setup() { pinMode(CLOCK, OUTPUT); pinMode(DATA, OUTPUT); for(int i=0; i<10; i++) { pinMode(button[i], INPUT_PULLUP); btstat[i] = 1; } //Digisparkが動作するまで待つ digitalWrite(CLOCK, LOW); pinMode(CLOCK, INPUT); while(digitalRead(CLOCK) == LOW) delay(1); pinMode(CLOCK, OUTPUT); } void loop() { uint8_t state; for(int i=0; i<10; i++) { state = digitalRead(button[i]); if(btstat[i] != state) { if(state == LOW) //押した { sendCode(i+1); } else //離した { sendCode(0xf); //離した sendCode(i+1); } btstat[i] = state; delay(10); //チャタリング軽減 } } } void sendCode(uint8_t code) { for(int i=0; i<4; i++) //ボタン番号1-10は4ビットで充分 { digitalWrite(DATA, (code >> i) & 1); digitalWrite(CLOCK, LOW); delay(1); digitalWrite(CLOCK, HIGH); delay(1); } }