1ピンだけで2個のLEDを別々に操作する その2 [Arduino]
マイコンの1本のI/O端子で2個のLEDを駆動:Design Ideas - EDN Japan
https://edn.itmedia.co.jp/edn/articles/0806/01/news020.html
ここを元にシミュレーションしてみた。
ツェナーダイオード使用バージョン
ダイオードを4個直列バージョン
LEDは一定以上の電圧にならないと電流が流れないのをうまく利用している。
1ピンだけで2個のLEDを別々に操作する [Arduino]
以前にATtiny202で踏切の音と光を出すのをやりました。
ただATtiny202はふつうに使えるGPIOが5つしかないのでなるべく使用するピン数を少なくしたいところ。
LEDを1ピンだけで2個別々に操作することを思いついたのでやってみました。
(多分すでに誰かやってると思うけど)(NeoPixelを使うというのもありだけど)
5VとGNDの間に抵抗を入れて真ん中で分圧し、そことGPIOのHigh、Low、Hi-Zの3ステートで、2個の極性の反対のLEDを個別に点灯。
両方点灯させたいときはダイナミック点灯で。
欠点としては、やや暗いのと、消灯時でも電流を消費することかな。
Circuit Simulator Applet
https://www.falstad.com/circuit/circuitjs.html
というのでシミュレーションしてみた。
// LED test : Blink two LEDs using only one pin
// +5V ---[470 Ohm]--+---+--|<|--+--- GPIO (H/L/Hi-Z)
// GND ---[470 Ohm]--+ +--|>|--+
#define LED_PIN 2
void setup() {
}
void loop() {
unsigned int i;
pinMode(LED_PIN, OUTPUT);
for(i=0; i<4; i++) {
digitalWrite(LED_PIN, i&1); // Blink LEDs alternately
delay(500);
}
pinMode(LED_PIN, INPUT); // Off LEDs
delay(1000);
pinMode(LED_PIN, OUTPUT);
for(i=0; i<1000; i++) {
digitalWrite(LED_PIN, i&1); // dynamic both LEDs on
delay(1);
}
pinMode(LED_PIN, INPUT); // Off LEDs
delay(1000);
}
もっといいやり方があるらしい。
マイコンの1本のI/O端子で2個のLEDを駆動:Design Ideas - EDN Japan
https://edn.itmedia.co.jp/edn/articles/0806/01/news020.html