使用带有Arduino Struct的RGB灯

时间:2016-02-09 17:32:49

标签: struct arduino rgb led

我正在尝试使用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);

}

1 个答案:

答案 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更暗淡。