Arduino代码未处理串行输出

时间:2019-10-11 21:06:08

标签: c arduino

我正在使用Arduino Uno进行嵌入式系统课程。我的任务是我必须编写一个实现这些规范的函数。接受用户输入(“ R”,“ G”,“ B”)并显示红色,绿色或蓝色。函数名称必须是dispColor(),输入必须是char a,并且它们不能返回。我的代码在下面,但是,每当我输入一个输入时,我都不会收到输出。我的代码中的错误在哪里?

String dispColor(char){

  char a = Serial.read();

  if (a == "R")
    Serial.print("Red");
  else if (a == "G")
    Serial.print("Green");
  else if (a == "B")
    Serial.print("Blue");

}

void setup() {
// put your setup code here, to run once:
  Serial.begin(9600);
  String dispColor();
}

void loop() {
// put your main code here, to run repeatedly:

}

我更新的代码

void dispColor(char a){
  if(Serial.available()){
        a = Serial.read();
        if(a == 'R')
        Serial.print("Red");
        else if(a == 'G')
        Serial.print("Green");
        else if(a == 'B')
        Serial.print("Blue");
    }
  }

void setup() {
    Serial.begin(9600);   
    Serial.println("Please type in R, G, or B.");
    dispColor();
}

void loop() {

}

2 个答案:

答案 0 :(得分:1)

正如setup(“ //将您的设置代码放在这里,运行一次:”中的注释所述,该代码将只执行一次,因此当您准备就绪时要“键入输入”,将没有任何代码正在运行以读取它。

因此,您肯定需要做的一件事就是将dispColor移至loop

还有更多错误:

  • 您正在将一个char与一个字符串进行比较
  • 您应该将参数传递给dispColor,而不是从其中读取
  • 如果有可用输入,您可能应该只打电话给dispColor

看看https://www.arduino.cc/reference/en/language/functions/communication/serial/read/开始吧!

答案 1 :(得分:0)

我知道了!

我的新代码

void setup() 
{
Serial.begin(9600);   
Serial.println("Please type in R, G, or B.");  
}

void dispColor(char a)
{
while(!Serial.available());
a = Serial.read();
 if(a == 'R')
    Serial.println("Red");
      else if(a == 'G')
    Serial.println("Green");
      else if(a == 'B')
    Serial.println("Blue");
    Serial.print('\n');
}

void loop() {
char a;
dispColor(a);

}