Arduinoで74HC4051APを使う−その3−

その3です。

今回は4051を使って10個のボタン入力を制御したいと思います。
これはダーツ盤のマトリックス回路が7×10なので、
1個4051では8つの入出力までしか制御できないんです。

だから、2つの4051を使って10個のボタンを制御したいと思ったんです。

ではまずは回路図からです。

その1で作った回路を2つ作るイメージですね。
具体的には4051が1個につき、5個のボタンを制御します。

次はプログラムです。
プログラムは5個のボタン制御を2回連続で行うようなものです。

// 1個目の4051用
int OUT_PIN_0 = 2;
int OUT_PIN_1 = 3;
int OUT_PIN_2 = 4;

// 2個目の4051用
int OUT_PIN_3 = 5;
int OUT_PIN_4 = 6;
int OUT_PIN_5 = 7;

int IN_DATA_PIN_0 = A0;
int IN_DATA_PIN_1 = A1;

int HALF_MAX_COUNT = 4;

int r0 = 0;
int r1 = 0;
int r2 = 0;
int count = 0;

void setup() {
pinMode(OUT_PIN_0, OUTPUT);
pinMode(OUT_PIN_1, OUTPUT);
pinMode(OUT_PIN_2, OUTPUT);
pinMode(OUT_PIN_3, OUTPUT);
pinMode(OUT_PIN_4, OUTPUT);
pinMode(OUT_PIN_5, OUTPUT);

Serial.begin(9600);
}

void loop() {

for (count = 0; count <= HALF_MAX_COUNT; count++) {
r0 = bitRead(count, 0);
r1 = bitRead(count, 1);
r2 = bitRead(count, 2);

digitalWrite(OUT_PIN_0, r0);
digitalWrite(OUT_PIN_1, r1);
digitalWrite(OUT_PIN_2, r2);

Serial.print("0 : ");
Serial.print(count);
Serial.print(" : ");
Serial.println(analogRead(IN_DATA_PIN_0)/4);

delay(100);
}

for (count = 0; count <= HALF_MAX_COUNT; count++) {
r0 = bitRead(count, 0);
r1 = bitRead(count, 1);
r2 = bitRead(count, 2);

digitalWrite(OUT_PIN_3, r0);
digitalWrite(OUT_PIN_4, r1);
digitalWrite(OUT_PIN_5, r2);

Serial.print("1 : ");
Serial.print(count);
Serial.print(" : ");
Serial.println(analogRead(IN_DATA_PIN_1)/4);

delay(100);
}
}