RGB串行问题

时间:2012-12-03 17:52:29

标签: arduino

我正在尝试制作一个Arduino程序,它从串行监视器接收信号,然后相应地点亮LED,我用RGB设置它。但是我有一个问题,就是所有三个LED的灯都应该是蓝色的。这是我的代码:

#define SENSOR 0   
#define R_LED 11
#define G_LED 10
#define B_LED 9
#define BUTTON 12
int val = 0;
int times = 0;
int btn = LOW;
int old_btn = LOW;
int state = 0;
int r = 0;
int g = 0;
int b = 0;
byte inByte = 0;
char buffer[5];
void setup() {
  Serial.begin(9600);
  pinMode(BUTTON, INPUT);
}
void loop() {
  val = analogRead(SENSOR);
  Serial.println(val);
  if (Serial.available() > 0) {
    inByte = Serial.read();
    if (inByte == '#') {
      r = Serial.read() + 1;
      r = r * 25;
      g = Serial.read() + 1;
      g = g * 25;
      b = Serial.read() + 1;
      b = b * 25;
    }
  }   
  btn = digitalRead(BUTTON);
  if ((btn == HIGH) && (old_btn == LOW)){
    state = 1 - state;
  }
  old_btn = btn;
  if (state == 1){
    analogWrite(R_LED, r);
    analogWrite(G_LED, g);
    analogWrite(B_LED, b);
  }else{
    analogWrite(R_LED, 0);
    analogWrite(G_LED, 0);
    analogWrite(B_LED, 0);
  }
  delay(100);
}

注意:我确信这是一个编码问题,而不是机械问题,供您参考。

2 个答案:

答案 0 :(得分:1)

如果我理解你正在做什么,每次你想要改变颜色时,会在串行监视器上发送一些代码,例如#987,对吗?在这种情况下,问题在于当您执行r = Serial.read() + 1;时(同样适用于bg),Serial.read()将返回'0'中字符的ASCII代码{1}}到'9'(48 - 57)。试试这个:

  r = Serial.read() - '0' + 1;
  r = r * 25;
  g = Serial.read() - '0' + 1;
  g = g * 25;
  b = Serial.read() - '0' + 1;
  b = b * 25;

这将首先减去'0'的ASCII码,因此数字将在0-9范围内。

答案 1 :(得分:0)

在你的代码中,你对所有三个灯都做了同样的事情。

为什么你会期望蓝色表现不同?

analogWrite(R_LED, r);
analogWrite(G_LED, g);
analogWrite(B_LED, b);