我正在尝试使用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);
}
正如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更暗。