SSブログ

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

ここを元にシミュレーションしてみた。

ツェナーダイオード使用バージョン
2leds_zener.png

ダイオードを4個直列バージョン
2leds_2pairs.png

LEDは一定以上の電圧にならないと電流が流れないのをうまく利用している。

2x2leds.jpg
nice!(0)  コメント(0) 

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

というのでシミュレーションしてみた。
2leds_h.png
2leds_z.png
2leds_l.png

// 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

nice!(0)  コメント(0)