複数のLEDをボタンで色々と操作してみよう

Lチカに続いてボタン(タクトスイッチ)を使ったものを作ってみます。これもボタンでon/offの切り替えや、押している間光る等からもう一歩工夫がしたい。

ということで以下の仕様で作ってみたいとおもいます。

  1. タクトスイッチは5つ、LEDは3つ使用
  2. 3つのスイッチはそれぞれLEDのon/offができる
  3. 4つ目のスイッチは全てのLEDのon、5つ目は全てのLEDをoff

そして出来上がったのこちら。

ファイル 2015-12-11 17 12 59 ファイル 2015-12-11 17 13 14

回路はこんな感じです。

1 2

[c]
int arrPin[] = {2, 3, 4, 5, 6};
int arrPush[] = {0, 0, 0, 0, 0};

int arrLED[] = {11, 12, 13};
int arrLF[] = {0, 0, 0};

void setup()
{
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);

pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);

Serial.begin(9600);
}

void loop()
{
int max = sizeof(arrPin) / sizeof(arrPin[0]);
int i;
for(i = 0; i < max; i++)
{
int dr = digitalRead(arrPin[i]);
if(dr == LOW)
{
arrPush[i] = 1;
}
else
{
if(arrPush[i] == 1)
{
if(arrPin[i] == 2 || arrPin[i] == 3 || arrPin[i] == 4)
{
int index;
switch (arrPin[i])
{
case 2 : index = 0; break;
case 3 : index = 1; break;
case 4 : index = 2; break;
}

arrLF[index] = (arrLF[index] == 1) ? 0 : 1;
dw(arrLED[index], arrLF[index]);
}
else if(arrPin[i] == 5 || arrPin[i] == 6)
{
int val = (arrPin[i] == 5) ? 1 : 0;
int jmax = sizeof(arrLED) / sizeof(arrLED[0]);

int j;
for(j = 0; j < jmax; j++)
{
dw(arrLED[j], val);
arrLF[j] = val;
}
}

arrPush[i] = 0;
}
}
}
}

void dw(int pin, int mode)
{
digitalWrite(pin, (mode == 1) ? HIGH : LOW);
}
[/c]

Previous Post

Next Post