c#中的光敏电阻和RGB LED

时间:2015-09-26 21:39:53

标签: c# arduino rgb

我多次尝试编写一个代码,根据灯光(在当前房间中)是打开还是关闭,将使2个RGB LED闪烁或以某种方式保持亮起。 当灯亮起时,2个RGB应该一次一秒地交替闪烁蓝色。 当灯熄灭时,两个RGB应该打开,并保持红色。 我正在使用2个RGB,电线,面包板,电阻器,光敏电阻和arduino UNO(不是原版,但它是一个非常接近的复制品...除了事实之外,你不能说两者之间有任何区别它没有说" UNO")。 RGB连接到引脚5,6,7和8,9,10。光敏电阻位于引脚13中。 这是我目前的代码(它在c#,btw中):

int sensPin = 13;

void setup()
{
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(13,INPUT);
  Serial.begin(9600);
}

void loop()
{
  int prVal = analogRead(sensPin);
  Serial.write(prVal);
    if(prVal>225)
    {
      digitalWrite(5,HIGH);
      digitalWrite(6,HIGH);
      digitalWrite(7,HIGH);
      digitalWrite(8,LOW);
      digitalWrite(9,HIGH);
      digitalWrite(10,HIGH);
      delay(500);
      digitalWrite(5,LOW);
      digitalWrite(6,HIGH);
      digitalWrite(7,HIGH);
      digitalWrite(8,HIGH);
      digitalWrite(9,HIGH);
      digitalWrite(10,HIGH);
      delay(500);
    }
    else
    {
      digitalWrite(5,HIGH);
      digitalWrite(6,HIGH);
      digitalWrite(7,LOW);
      digitalWrite(8,HIGH);
      digitalWrite(9,HIGH);
      digitalWrite(10,LOW);
      delay(10);
    }
}

我遇到的问题是两个RGB都保持红色......无论如何。我已经尝试摆弄电线,并进行三重检查以查看是否所有内容都已正确插入,但没有发生任何变化。另一件我觉得奇怪的是,在随机点,几分钟,RGB(房间里的灯光没有改变,没有触摸或移动硬件)将开始交替闪烁蓝色,然后再回来保持红色。

任何,所有的建议和帮助表示赞赏。

〜编辑〜 我改变了我的代码(和硬件)。由于评论中提出的建议,我将光敏电阻放在引脚12中,并相应地更改了我的代码。此外,变量已更改(名称为sensPin,现在它被声明为prPin),但没有更多。这就是我所拥有的:

int prPin = 12;

void setup()
{
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(prPin,INPUT);
  Serial.begin(9600);
}

void loop()
{
  int prVal = analogRead(prPin);
  Serial.write(prVal);
    if(prVal>225)
    {
      digitalWrite(5,HIGH);
      digitalWrite(6,HIGH);
      digitalWrite(7,HIGH);
      digitalWrite(8,LOW);
      digitalWrite(9,HIGH);
      digitalWrite(10,HIGH);
      delay(1000);
      digitalWrite(5,LOW);
      digitalWrite(6,HIGH);
      digitalWrite(7,HIGH);
      digitalWrite(8,HIGH);
      digitalWrite(9,HIGH);
      digitalWrite(10,HIGH);
      delay(1000);
    }
    else
    {
      digitalWrite(5,HIGH);
      digitalWrite(6,HIGH);
      digitalWrite(7,LOW);
      digitalWrite(8,HIGH);
      digitalWrite(9,HIGH);
      digitalWrite(10,LOW);
      delay(10);
    }
}

我上传了代码并运行了,但是上次发生了同样的事情。 我可能有一块坏板吗?我不认为是这样,但有机会。我测试了板上的所有东西,一切似乎都没问题......我不知道发生了什么。 再一次,我会感谢任何帮助,无论是一个小小的提示或建议,还是一个明确的彻底答案。我是一本开放的书,所以我接受你抛出的任何东西。

2 个答案:

答案 0 :(得分:1)

只有具有专用硬件的某些引脚才能用作模拟输入。它们标记为A0-A5,不与数字引脚IO0-IO13重叠。

定义时

int prPin = 12;

然后不要指望打电话

analogRead(prPin)

带来有意义的结果。

答案 1 :(得分:0)

根据Ben Voight提到的最后一个代码示例,您会对数字IO和ADC(模数转换器)感到困惑。

我建议使用WS2812型RGB LED,它们在Arduino上得到很好的支持,需要1个数字IO支持PWM(带有〜的那个)。

但你也问过C#,这个设备名为NusbioMCU,它允许任何.NET语言控制不同形状的RGB LED WS2812(Strip,Ring,Square)。它还有4个ADC,一个可用于连接光电阻。还有很多[Github上的样本] [1]。

enter image description here