提问者:小点点

将RGB灯与Arduino结构一起使用


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

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);

}

共1个答案

匿名用户

正如Pawel所说,你做事情的顺序是错误的。这将更有意义:

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

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

我不确定我是否正确理解如何在Arduino环境中使用结构。

它与 C 中的完全相同。

而是连接到引脚1和引脚2的LED将亮起红色(就好像引脚1被设置为高)

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

当我删除打印语句时,根本没有打开任何东西。

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

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

(编辑后添加)

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

正如我之前提到的,D1引脚上的输出是< code>Serial.print,D0引脚上的输出只是内部上拉电阻,用于保持Rx为高电平,以防您刚才不使用它。如果你插入一个LED,你会看到D0比D1更暗。