#define TERMINAL_A 3 #define TERMINAL_B 4 #define TERMINAL_C 5 #define TERMINAL_D 6 #define TERMINAL_F 7 #define TERMINAL_G 8 #define TERMINAL_H 9 #define TACT_SW 10 // 10番ピンをタクトスイッチ byte counter = 0; // Arduinoで使用できる1byteの型 byte state = 0; byte state_old = 0; void led_output(byte num){ switch(num) { case 0: digitalWrite(TERMINAL_A, HIGH); digitalWrite(TERMINAL_B, HIGH); digitalWrite(TERMINAL_C, HIGH); digitalWrite(TERMINAL_D, LOW); digitalWrite(TERMINAL_F, HIGH); digitalWrite(TERMINAL_G, HIGH); digitalWrite(TERMINAL_H, HIGH); break; case 1: digitalWrite(TERMINAL_A, HIGH); digitalWrite(TERMINAL_B, LOW); digitalWrite(TERMINAL_C, LOW); digitalWrite(TERMINAL_D, LOW); digitalWrite(TERMINAL_F, HIGH); digitalWrite(TERMINAL_G, LOW); digitalWrite(TERMINAL_H, LOW); break; case 2: digitalWrite(TERMINAL_A, HIGH); digitalWrite(TERMINAL_B, HIGH); digitalWrite(TERMINAL_C, LOW); digitalWrite(TERMINAL_D, HIGH); digitalWrite(TERMINAL_F, LOW); digitalWrite(TERMINAL_G, HIGH); digitalWrite(TERMINAL_H, HIGH); break; case 3: digitalWrite(TERMINAL_A, HIGH); digitalWrite(TERMINAL_B, HIGH); digitalWrite(TERMINAL_C, LOW); digitalWrite(TERMINAL_D, HIGH); digitalWrite(TERMINAL_F, HIGH); digitalWrite(TERMINAL_G, HIGH); digitalWrite(TERMINAL_H, LOW); break; case 4: digitalWrite(TERMINAL_A, HIGH); digitalWrite(TERMINAL_B, LOW); digitalWrite(TERMINAL_C, HIGH); digitalWrite(TERMINAL_D, HIGH); digitalWrite(TERMINAL_F, HIGH); digitalWrite(TERMINAL_G, LOW); digitalWrite(TERMINAL_H, LOW); break; case 5: digitalWrite(TERMINAL_A, LOW); digitalWrite(TERMINAL_B, HIGH); digitalWrite(TERMINAL_C, HIGH); digitalWrite(TERMINAL_D, HIGH); digitalWrite(TERMINAL_F, HIGH); digitalWrite(TERMINAL_G, HIGH); digitalWrite(TERMINAL_H, LOW); break; case 6: digitalWrite(TERMINAL_A, LOW); digitalWrite(TERMINAL_B, HIGH); digitalWrite(TERMINAL_C, HIGH); digitalWrite(TERMINAL_D, HIGH); digitalWrite(TERMINAL_F, HIGH); digitalWrite(TERMINAL_G, HIGH); digitalWrite(TERMINAL_H, HIGH); break; case 7: digitalWrite(TERMINAL_A, HIGH); digitalWrite(TERMINAL_B, HIGH); digitalWrite(TERMINAL_C, LOW); digitalWrite(TERMINAL_D, LOW); digitalWrite(TERMINAL_F, HIGH); digitalWrite(TERMINAL_G, LOW); digitalWrite(TERMINAL_H, LOW); break; case 8: digitalWrite(TERMINAL_A, HIGH); digitalWrite(TERMINAL_B, HIGH); digitalWrite(TERMINAL_C, HIGH); digitalWrite(TERMINAL_D, HIGH); digitalWrite(TERMINAL_F, HIGH); digitalWrite(TERMINAL_G, HIGH); digitalWrite(TERMINAL_H, HIGH); break; case 9: digitalWrite(TERMINAL_A, HIGH); digitalWrite(TERMINAL_B, HIGH); digitalWrite(TERMINAL_C, HIGH); digitalWrite(TERMINAL_D, HIGH); digitalWrite(TERMINAL_F, HIGH); digitalWrite(TERMINAL_G, HIGH); digitalWrite(TERMINAL_H, LOW); break; default: digitalWrite(TERMINAL_A, HIGH); digitalWrite(TERMINAL_B, HIGH); digitalWrite(TERMINAL_C, HIGH); digitalWrite(TERMINAL_D, LOW); digitalWrite(TERMINAL_F, HIGH); digitalWrite(TERMINAL_G, HIGH); digitalWrite(TERMINAL_H, HIGH); break; } } void setup() { // 初期化 pinMode(TERMINAL_A, OUTPUT); pinMode(TERMINAL_B, OUTPUT); pinMode(TERMINAL_C, OUTPUT); pinMode(TERMINAL_D, OUTPUT); pinMode(TERMINAL_F, OUTPUT); pinMode(TERMINAL_G, OUTPUT); pinMode(TERMINAL_H, OUTPUT); pinMode(TACT_SW, INPUT); // タクトスイッチに接続した10番ピンをインプットに設定 led_output(counter); } void loop() { state = digitalRead(TACT_SW); // 電流が流れているとHIGH, 流れていないとLOW if((state == HIGH) && (state_old == LOW)){ counter++; } else { } if(counter >= 10){ counter = 0; } led_output(counter); state_old = state; delay(50); }
配線
実行結果
loopの箇所だが、タクトスイッチから手を離すと、state == LOWとなるので、state_oldもLOWになる。
配線は7セグメントLEDのGRD(-)がブレッドボードで一緒になっているのでややこしく見えるが、タクトスイッチのHIGH LOWは10番ピンで感知している。
Arduinoは触りだけやったら辞めてラズパイに時間使おうと思ってたけど、Arduinoの奥深さが魅力的になってきた。