/*
Arduino入門 第7回 残り時間目安をLEDで表示
残り時間に応じて、LEDの点灯状態を変更し、
同時にアラーム音を1秒鳴らす
*/
#define TIMER 20 // タイマー時間(秒)
#define HALF_TIMER 10 // 「残り時間が半分」の時間(秒)
#define SOON_TIMER 3 // 「もうすぐ時間ですよ」の残り時間(秒)
#define SW_PIN A5 // スイッチ接続端子
#define SW_OFF 1 // スイッチOFFのdigitalReadの値
#define LED_PIN 12 // 1秒ごとに点滅するLEDの接続端子
#define LED_ON_INTERVAL 50 // LEDを点灯する時間
#define LED_OFF_INTERVAL 950 // LEDを消灯する時間
#define FULL_PIN 8 // 「残り時間が十分にある」LEDの接続端子
#define HALF_PIN 6 // 「残り時間が半分」LEDの接続端子
#define SOON_PIN 4 // 「もうすぐ時間ですよ」LEDの接続端子
#define SPEAKER_PIN A0 // スピーカー接続端子
#define ALARM_TONE 1760 // アラーム音の周波数
void setup() {
// LED接続端子を出力制御にする
pinMode(LED_PIN, OUTPUT);
pinMode(FULL_PIN, OUTPUT);
pinMode(HALF_PIN, OUTPUT);
pinMode(SOON_PIN, OUTPUT);
// スイッチ接続端子をプルアップ機能有効にする
pinMode(SW_PIN, INPUT_PULLUP);
}
void loop() {
// スイッチが押されるまで待つ
while( digitalRead(SW_PIN) == SW_OFF ) {
}
// 「残り時間が十分にあるLED」を点灯
digitalWrite(FULL_PIN, HIGH);
// 指定した時間、LEDを点滅する
for(int i=0; i<TIMER; i++) {
// 残り時間を計算
int nokori = TIMER - i;
// 残り時間が半分時のLED制御
if(nokori == HALF_TIMER){
digitalWrite(FULL_PIN, LOW); // 「残り時間十分」LEDをOFF
digitalWrite(HALF_PIN, HIGH); // 「残り時間半分」LEDをON
}
// もうすぐの時のLED制御
if(nokori == SOON_TIMER) {
digitalWrite(HALF_PIN, LOW); // 「残り時間半分」LEDをOFF
digitalWrite(SOON_PIN, HIGH); // 「もうすぐ」LEDをON
}
if(nokori==HALF_TIMER || nokori==SOON_TIMER) {
// LEDをピカッと点滅して、同時に音で知らせる
tone(SPEAKER_PIN, ALARM_TONE); // 最初にアラーム音を鳴らして、
digitalWrite(LED_PIN, HIGH); // LEDをピカッと1秒間で点滅して
delay(LED_ON_INTERVAL);
digitalWrite(LED_PIN, LOW);
delay(LED_OFF_INTERVAL);
noTone(SPEAKER_PIN); // アラーム音を止める
} else {
// LEDをピカッと1秒間で点滅するだけ
digitalWrite(LED_PIN, HIGH);
delay(LED_ON_INTERVAL);
digitalWrite(LED_PIN, LOW);
delay(LED_OFF_INTERVAL);
}
}
// アラームを鳴らす
tone(SPEAKER_PIN, ALARM_TONE);
delay(60);
noTone(SPEAKER_PIN);
delay(60);
tone(SPEAKER_PIN, ALARM_TONE);
delay(60);
noTone(SPEAKER_PIN);
delay(60);
tone(SPEAKER_PIN, ALARM_TONE);
delay(120);
noTone(SPEAKER_PIN);
// LEDを消灯
digitalWrite(SOON_PIN, LOW);
}