我正在尝试使用Arduino的结构来打开多个RGB LED到特定的颜色。使用此示例代码,我创建了一个结构来保存红色引脚数,蓝色引脚数,蓝色值和红色值。我只使用LED上的3个引脚中的两个,因为我的应用只需要红色,蓝色和紫色。当我运行此代码时,错误的指示灯会亮起并且颜色不正确。我不确定我是否正确理解如何在Arduino环境中使用结构。我使用这个源http://playground.arduino.cc/Code/Struct来查找Arduino中结构的基本语法。我使用它类似于如何在OOP中使用对象。我正在寻找关于如何在Arduino中使用结构的清晰度,特别是我无法获得预期的结果。我期望连接到pin3和pin4的LED亮起紫色(因为它的红色和蓝色引脚都设置为HIGH),而连接到pin1和pin2的LED将亮起红色(就像pin1设置为HIGH一样) )。此外,当我删除打印语句时根本没有任何打开(即使这是唯一的更改)。我已经无数次检查了我的布线,并确定它不是硬件问题。感谢您提供的任何帮助。
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);
}
答案 0 :(得分:1)
正如帕维尔所说,你正在以错误的顺序做事。这会更有意义:
light1.redPin = 3;
light1.bluePin = 4;
light1.redValue = HIGH;
light1.blueValue = HIGH;
pinMode(light1.redPin, OUTPUT);
pinMode(light1.bluePin, OUTPUT);
我不确定我是否正确理解如何在Arduino环境中使用结构。
与C ++完全相同。
但是连接到pin1和pin2的LED将亮起红色(就好像pin1设置为HIGH)
您的序列打印件会将针脚D1(Tx)设置为输出,您会看到串行打印为打开针脚。
当我删除打印语句时,根本没有任何打开
正如预期的那样,因为您没有向这些引脚发送数据。
未初始化的全局变量的默认值为零,所以我希望您已将引脚D0(第一个引脚,标记为Rx)设置为输出,然后您正在写入它。
(已编辑添加)
实际上,一旦你完成了Serial.begin
,串行硬件将接管引脚0和1,因此尝试写入它们会失败。
您在引脚D1上看到的输出是我之前提到的Serial.print
,而引脚D0上的输出只是内部上拉,用于在您不使用它时保持Rx为高电平现在。如果你插入一个LED,你会发现D0比D1更暗淡。