Charlieplexing LED

时间:2019-12-08 11:16:13

标签: arduino led

我正在尝试使用Uno的4个引脚对9个LED进行字符化。我可以点亮单个LED,但不了解如何同时点亮多个LED。有人可以解释这样做的正确方法吗?

我有一个正在Tinkercad在线工作的版本:https://www.tinkercad.com/things/4vsov86j8ca-charlieplexing-2/

这是我的代码:

const int UPPERPIN = 13;    //upmost pin
const int LOWERPIN = 10;     //lowest pin

void setup()
{
}

void loop()
{
  //update the leds
  updatePins();
}

//the function which manages the leds
void updatePins()
{
  // Each of these seem to work individually but not together.

  //LED 2
  pinMode(11, OUTPUT);
  digitalWrite(11, HIGH);
  pinMode(13, INPUT);
  digitalWrite(13, HIGH);

  //LED 8
  pinMode(12, INPUT);
  digitalWrite(12, HIGH);
  pinMode(11, OUTPUT);
  digitalWrite(11, LOW);

  delay(1000);

  //reset all LEDs
  resetAllPins();
}

void resetAllPins()
{
  for(int i = LOWERPIN; i <= UPPERPIN; i++)
  {
    pinMode(i, INPUT);
    digitalWrite(i, LOW);
  }
  //set everything to high impendance, so it will not function in the circuit
}

我已经附上了接线的屏幕截图。 charlieplexing wiring diagram

1 个答案:

答案 0 :(得分:1)

正如您所说,您可以打开单个LED,但是您不知道如何同时打开两个LED,我从您的问题中得知您根本不了解Charlieplexing。

Charlieplexing是一种特殊的复用形式。与传统的多路复用相比,它利用I / O引脚的三态功能来减少引脚的数量。

让我们举一个最简单的例子

enter image description here

在X1和X2都为输出时,X1为高电平,X2为低电平状态将打开LED 1,X1低电平和X2为高电平状态将打开LED2

很明显,您不能同时打开LED1和LED2。

但是您可以使它们看起来像同时在滥用人类视觉的持久性。如果您以足够快的速度闪烁1,它将看起来像是一直持续。因此,您要做的就是以该频率交替闪烁LED1和LED2。

https://en.wikipedia.org/wiki/Flicker_fusion_threshold

https://en.wikipedia.org/wiki/Persistence_of_vision