
Arduino 1つのタクトスイッチでLEDの明るさを設定とオンオフ
Arduinoをはじめよう 第4版のExample5-2の実習です。
回路図です。

コードです。
// ボタンを押すとLEDが点灯し、
// ボタンから指を離した後も点いたままにする
// バウンシングを解消する簡単な方法を取り入れる
// ボタンを押したままにすると明るさが変化する
const int LED = 9;
const int BUTTON = 7;
int val = 0;
int old_val = 0;
int state = 0;
int brightness = 128;
unsigned long startTime = 0;
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);
}
void loop() {
val = digitalRead(BUTTON);
// 変化があるかどうかチェック
if ((val == HIGH) && (old_val == LOW)) {
state = 1 - state;
startTime = millis();
delay(10);
}
// ボタンが押し続けられているかをチェック
if ((val == HIGH) && (old_val == HIGH)) {
// 500ms以上押されているか?
if (state == 1 && (millis() - startTime) > 500) {
brightness++;
delay(10);
if (brightness > 255) {
brightness = 0;
}
}
}
old_val = val;
if (state == 1) {
analogWrite(LED, brightness);
} else {
analogWrite(LED, 0);
}
}
いいなと思ったら応援しよう!
