将 RGB 灯与 Arduino 结构一起使用

Using RGB Lights with Arduino Struct

我正在尝试将一个结构与 Arduino 一起使用,以将多个 RGB LED 点亮为特定颜色。使用此示例代码,我创建了一个结构来保存红色引脚编号、蓝色引脚编号、蓝色值和红色值。我只使用 LED 上 3 个引脚中的两个,因为我的应用只需要红色、蓝色和紫色。当我 运行 此代码时,不正确的灯亮起并且颜色不正确。我不确定我是否正确理解如何在 Arduino 环境中使用结构。我使用此来源 http://playground.arduino.cc/Code/Struct 来查找 Arduino 中结构的基本语法。我使用它的方式类似于在 OOP 中使用对象的方式。我正在寻找关于如何在 Arduino 中使用结构的清晰度,特别是我无法获得预期的结果。我希望连接到 pin3 和 pin4 的 LED 点亮紫色(因为它的红色和蓝色引脚都设置为高电平)但是连接到 pin1 和 pin2 的 LED 将点亮红色(就像 pin1 设置为高电平一样).此外,当我删除打印语句时,什么也不会打开(即使这是唯一的更改)。我检查了无数次我的接线,并确定这不是硬件问题。感谢您提供的任何帮助。

struct light {
  int redPin ;
  int bluePin;
  int redValue;
  int blueValue;
};

light light1;

void setup() {
  Serial.begin(9600);
  pinMode(light1.redPin, OUTPUT);
  pinMode(light1.bluePin, OUTPUT);

  light1.redPin = 3;
  light1.bluePin = 4;
  light1.redValue = HIGH;
  light1.blueValue = HIGH;
}

void loop() {
  Serial.print(light1.redPin);
  Serial.println(light1.redValue);
  Serial.print(light1.bluePin);
  Serial.println(light1.blueValue);
  digitalWrite(light1.redPin, light1.redValue);
  digitalWrite(light1.bluePin, light1.blueValue);

}

正如 Pawel 所建议的,您的操作顺序错误。这会更有意义:

  light1.redPin = 3;
  light1.bluePin = 4;
  light1.redValue = HIGH;
  light1.blueValue = HIGH;

  pinMode(light1.redPin, OUTPUT);
  pinMode(light1.bluePin, OUTPUT);

I am not sure if I correctly understand how to use a struct in the Arduino environment.

和C++完全一样


but instead the LED connected to pin1 and pin2 will light up red (as if pin1 is set to HIGH)

您的串行打印会将引脚 D1 (Tx) 设置为输出,并且您看到串行打印将引脚打开。

when I remove the print statements nothing turns on at all

正如预期的那样,因为您没有向这些引脚发送数据。


未初始化的全局变量的默认值为零,因此我希望您已将引脚 D0(第一个引脚,标记为 Rx)设置为输出,然后写入它。


(编辑添加)

实际上,一旦您完成了 Serial.begin,串行硬件就会接管引脚 0 和 1,因此尝试写入它们会失败。

你在引脚 D1 上看到的输出是我之前提到的 Serial.print,而引脚 D0 上的输出只是内部上拉,用于在你不使用时保持 Rx 为高电平就在现在。如果你插入一个 LED,你会看到 D0 比 D1 更暗。