#define LED1 0 #define LED2 1 #define LED3 2 #define SW 3 #define BUZZ 4 uint8_t ledNo[] = {LED3, LED2, LED1}; uint8_t mode; bool ledon, isClick; void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(BUZZ, OUTPUT); pinMode(SW, INPUT_PULLUP); mode = 0; ledon = false; isClick = false; } void loop() { if(swon()) mode = 1; switch(mode) { case 0: delay(300); break; case 1: for(uint8_t j=0; j<4; j++) { for(uint8_t i=0; i<60; i++) { if(j == 3) { digitalWrite(LED1, ledon); digitalWrite(LED2, ledon); digitalWrite(LED3, ledon); } else digitalWrite(ledNo[j], ledon); ledon = !ledon; delay(500); if(swon()) goto INTERRUPT; delay(500); } } mode = 2; break; INTERRUPT: digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); ledon = false; mode = 0; break; case 2: while(true) { beep(); if(swon()) break; delay(200); } digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); ledon = false; mode = 0; break; } } void beep() { tone(BUZZ, 1200); delay(200); noTone(BUZZ); } bool swon() { if(digitalRead(SW) == LOW) { if(isClick) //スイッチは押しっぱなし return false; else //スイッチは一度離した { beep(); isClick = true; return true; } } else { if(isClick) //スイッチを離した isClick = false; return false; } }