如何编写Arduino草图来解释Windows上的boblight数据?

时间:2013-06-03 18:00:03

标签: arduino

我花了几天时间在互联网上搜索有关此事的信息,但没有任何快乐:(真的希望有人可以提供帮助。

我正在尝试使用boblight,Arduino Uno和LED灯条创建一个流光溢彩的克隆。这应该会导致我房间的LED发生反应并使用屏幕上的颜色改变颜色。

我正在做的和其他人做的主要区别在于我没有带有可单独编程LED的LED灯条。我没有让LED与屏幕上的不同点匹配,而是根据屏幕上最主要(或平均?)的颜色,使所有LED成为相同的颜色。

我的电路设置方式与此页面上的图像类似,除了没有电阻器(道歉,我没有足够的声誉点将图像发布到这个帖子中:

http://www.jerome-bernard.com/images/rgb-led-strips-mosfets.png

我写了一个非常简单的草图来改变LED灯条的颜色,并且工作正常。我也在我的Windows PC上设置了boblight,包括.config文件,我觉得也可以(虽然不太确定怎么说!)

配置文件如下所示:

[global]
#interface  127.0.0.1
port        19333


[device]
name            arduino_ambilight
type            atmo 
output          "com3" 
rate            115200 
channels        3
interval        20000 
allowsync       on 
debug           on 
delayafteropen  10000000

[color]
name            red
rgb             FF0000

[color]
name            green
rgb             00FF00

[color]
name            blue
rgb             0000FF

[light]
name            main
color           red     arduino_ambilight 9
color           green   arduino_ambilight 10
color           blue    arduino_ambilight 11
hscan           0 100
vscan           0 100

问题是,我不知道如何从boblight获取信号到我的Arduino以及如何编写草图来解释boblight信息。

更新

我遵循了John b的建议,并将Adafruit LEDStream草图上传到了我的Arduino。 (请参阅下面的John b的帖子以获取代码链接)。这应该会使LED闪烁红色,绿色,蓝色。不幸的是它什么也没做。

我想这是因为我的布线没有像Adafruit教程推荐的那样设置(对于Adafruit布线,请参阅http://learn.adafruit.com/adalight-diy-ambient-tv-lighting/wiring-1)。

我不可能以这种方式设置接线,因为我的LED条与Adalight教程中使用的不同。如上所述,我的LED没有输入和输出,并且它们没有可单独寻址的LED。相反,我有一个简单的LED灯条,带有+ 12V,R,G和B.

如何调整Adafruit的LEDstream代码以配合我的布线设置(参见上面的图像链接)?要么是这样,要么我如何调整我的布线(假设我必须使用我的LED)来使用LEDStream?

有没有人可以提供帮助?

很多,非常感谢,

凯蒂

2 个答案:

答案 0 :(得分:1)

有点晚了,但我们走了):

 /* Ambilight Clone Variation Using boblight and 1 Red, 1 Green, 1 Blue Strips. 

Circuit is set up in a similar way to the image on this page.
http://www.jerome-bernard.com/images/rgb-led-strips-mosfets.png

Created 17 Feb 2014
By Chris O.
Ver. 0.50
*/

// constants won't change. Used here to set the PWM pin numbers / ONLY USE PWM~ PINS:
/* // Arduino Uno has 6 PWM pins.
const int Red_PWM_Pin =  3;      // RED 
const int Green_PWM_Pin =  5;    // GREEN
const int Blue_PWM_Pin =  6;     // BLUE 
*/
const int Red_PWM_Pin =  9;      // RED 
const int Green_PWM_Pin =  10;    // GREEN
const int Blue_PWM_Pin =  11;     // BLUE

// Set Serial Baud Rate here and in boblight.conf file.
// Use one of these rates: 9600, 14400, 19200, 28800, 38400, 57600, or 115200.
#define Baud_Rate 57600 

// Variables will change:
byte RedValue = 0x00; //HEX
byte GreenValue = 0;
byte BlueValue = 0;

// ***********************************************************************************************************
// *
// *                            Power Up Init.
// *
// *
// ***********************************************************************************************************
void setup() { 

  /* Test led strips on Power Up */ 
  analogWrite(Red_PWM_Pin, 127); //DEC / Set the pin to 50% (0~255)
  analogWrite(Green_PWM_Pin, 0x7F); //HEX
  analogWrite(Blue_PWM_Pin, 127); //DEC
  delay(1000);               // wait for a second
  analogWrite(Red_PWM_Pin, 0); //DEC
  analogWrite(Green_PWM_Pin, 0x00); //HEX
  analogWrite(Blue_PWM_Pin, 0); //DEC

  Serial.begin(Baud_Rate); //Serial.begin(115200);

}

// ***********************************************************************************************************
// *
// *                            Main Loop 
// *
// *
// ***********************************************************************************************************
void loop() 
{  
  if (Serial.available()>=4){ // if Serial Hardware Buffer has 4 or more bytes
    byte prefix1 = Serial.read(); // 1st prefix (HEX 0xFF) (DEC 255)
   // byte prefix2 = Serial.read(); // 2nd prefix (HEX 0x8F) (DEC 143)

    if (prefix1 == 0xFF){// && prefix2 == 0x8F){ // Do this only if we find the prefix 

      RedValue = Serial.read(); //read 2nd byte
      analogWrite(Red_PWM_Pin, RedValue);

      GreenValue = Serial.read(); //read 3rd byte
      analogWrite(Green_PWM_Pin, GreenValue);

      BlueValue = Serial.read(); //read 4th byte
      analogWrite(Blue_PWM_Pin, BlueValue);
    }
    else { // if no prefix found lets dump 1 byte of serial HW Buffer.
      byte dump = Serial.read(); 
      /* debug led */
      // Pin 13 has an LED connected on most Arduino boards, On Leonardo its PWM~ pin, on Uno it will go high if dump value is over 127
      // Pin 11 has the LED on Teensy 2.0
      // Pin 6  has the LED on Teensy++ 2.0
      // Pin 13 has the LED on Teensy 3.0
       analogWrite(13, dump); //debug led
      //Serial.println(dump);
    }
  }
}

// ***********************************************************************************************************
// *                             Copy This in to boblight.conf file 
// *                              for windows boblight 1.3 beta1
// *                            
// *             for windows boblight 1.3 beta1 go to The LiveLight Project http://www.livelightproject.com/
// *             http://www.livelightproject.com/downloads/Boblight/Boblight_for_V5.zip
// ***********************************************************************************************************
/*

[global]
timeout     20

#interface      127.0.0.1   not in use here
port            19333
# interpolation off   # on or off
# proportional  7.0
# saturation    5.0
# value     10.0
# valuerange    0.0 1.0
# use           no
# method        average
# threshold     20

[device]
name            arduino_ambilight
type            momo 
output          "com11"    # <-- set youre arduino port
rate            57600 # Use one of these rates: 9600, 14400, 19200, 28800, 38400, 57600, or 115200.
channels        3
prefix          FF # NOTE: this FF 8F prefix will not work in Win Boblight beta1.3 
# postfix       not in use here, will not work in Win Boblight beta1.3 
interval        40000 
# allowsync     on   not in use here
debug           off 
delayafteropen  20000000

[color]
name            red
rgb             FE0000

[color]
name            green
rgb             00FE00

[color]
name            blue
rgb             0000FE

[light]
name            main
color           red     arduino_ambilight 1
color           green   arduino_ambilight 2
color           blue    arduino_ambilight 3
hscan           0 100
vscan           0 100

*/

答案 1 :(得分:0)

下面是Adafruit代码的Github链接。他的字面意思是你在那里购买系统时会运行的代码。

https://github.com/adafruit/Adalight/blob/master/Arduino/LEDstream/LEDstream.pde 评论很好

以下是代码的一部分。 该代码基于从serail端口读取数据。 如果索引在范围内,则代码将数据保存在数组中。

if((bytesBuffered < 256) && ((c = Serial.read()) >= 0)) {
  buffer[indexIn++] = c;
  bytesBuffered++;
  lastByteTime = lastAckTime = t; // Reset timeout counters
} else {
  // No data received.  If this persists, send an ACK packet
  // to host once every second to alert it to our presence.
  if((t - lastAckTime) > 1000) {
    Serial.print("Ada\n"); // Send ACK string to host
    lastAckTime = t; // Reset counter
  }
  // If no data received for an extended time, turn off all LEDs.
  if((t - lastByteTime) > serialTimeout) {
    for(c=0; c<32767; c++) {
      for(SPDR=0; !(SPSR & _BV(SPIF)); );
    }
    delay(1); // One millisecond pause = latch
    lastByteTime = t; // Reset counter
  }
}

这是一个值得一去的地方。您应该在代码中询问有关您不理解的内容的问题