2014-12-26 4 views
-1

Когда я поставил "с" внутри setColor(c);слишком мало аргументов, чтобы функционировать Пустота SetColor (интермедиат, Int, Int) '

он говорит мне:

error: too few arguments to function 'void setColor(int, int, int)'.

Я понимаю, что я должен поставить 3 аргумента. Я не понимаю, что сериал правильно отображает 3 аргумента (255, 000, 000), так почему он продолжает сообщать мне об этой ошибке. Что я делаю не так ?

int rPin = 11; 
int gPin = 9; 
int bPin = 10; 

void setup() { 
    Serial.begin(9600); 
    pinMode(rPin, OUTPUT); 
    pinMode(gPin, OUTPUT); 
    pinMode(bPin, OUTPUT); 
} 

void loop() { 
    if (Serial.available() > 0) { 
      delay(100); 
      while (Serial.available() > 0) { 
       char c = Serial.read(); // serial will display an rgb code, for exemple: 255, 000, 000 (red color) 
       setColor(c); 
      } 
     } 
} 

void setColor(int red, int green, int blue) { 
    analogWrite(rPin, red); 
    analogWrite(gPin, green); 
    analogWrite(bPin, blue); 
} 
+0

Я не код на C, но вы получите строку/список, и вам придется передавать аргументы по одному. –

+0

В случае, если вы получаете список, выполните 'setColor (c [0], c [1], c [2])' или однако правильный синтаксис равен –

+0

. Если вы получите строку, вам придется разделить строку в список с функцией, а затем передать аргументы один за другим. –

ответ

0

Как ваша ошибка сказал вам, setColor(int red, int green, int blue) требует 3-х аргументов, которые вы должны пройти одновременно.

Проблема заключается в том, что вы получите ваши аргументы от чтения Serial порта, которые не являются int s, но значения ASCII из символов, которые вы пишете, то есть 0 = 48.

Для того, чтобы получить фактические значения, вам необходимо использовать Serial.parseInt().

Вот как выглядит ваш код.

int rPin = 11; 
int gPin = 9; 
int bPin = 10; 

void setup() { 
    Serial.begin(9600); 
    pinMode(rPin, OUTPUT); 
    pinMode(gPin, OUTPUT); 
    pinMode(bPin, OUTPUT); 
} 

void loop() { 
    if (Serial.available() > 0) { 
      delay(100); 

      while (Serial.available() > 0) { 

      // look for the next valid integer in the incoming serial stream: 
      int red = Serial.parseInt(); 
      // do it again: 
      int green = Serial.parseInt(); 
      // do it again: 
      int blue = Serial.parseInt(); 

      // look for the newline. That's the end of your sentence: 
      if (Serial.read() == '\n') { 
       // constrain the values to 0 - 255 
       red = 255 - constrain(red, 0, 255); 
       green = 255 - constrain(green, 0, 255); 
       blue = 255 - constrain(blue, 0, 255); 

       setColor(red, green, blue); 

      } 
     } 
} 

void setColor(int red, int green, int blue) { 
    analogWrite(rPin, red); 
    analogWrite(gPin, green); 
    analogWrite(bPin, blue); 
} 
Смежные вопросы