1

シリアルモニターから信号を受信し、それに応じてLEDを点灯させるArduinoプログラムを作成しようとしています。これは、RGBで設定しています。しかし、私は3つの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);
}

注:参考までに、これは機械的な問題ではなく、コーディングの問題であると確信しています。

4

2 に答える 2

1

あなたが正しくやっていることを理解していれば#987、色を変更するたびにシリアルモニターに送信されるコードなど、正しいですか? その場合、問題は、実行すると(およびr = Serial.read() + 1;についても同じことが言えます)、(48 - 57)までの文字の ASCII コードが返されることです。これを試して:bgSerial.read()'0''9'

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

これにより、最初に ASCII コードが減算'0'されるため、数値は適切な 0 ~ 9 の範囲になります。

于 2012-12-03T18:20:07.660 に答える
0

コードでは、3 つのライトすべてに対して同じことを行っています。

青の振る舞いが違うと思うのはなぜですか?

analogWrite(R_LED, r);
analogWrite(G_LED, g);
analogWrite(B_LED, b);
于 2012-12-03T18:07:51.623 に答える