将 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 更暗。
我正在尝试将一个结构与 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 更暗。