关于Arduino Mega 2560串口的一些蛋疼问题

关于Arduino Mega 2560串口的一些蛋疼问题


1 等待串口连接的代码段必须使用官方串口监视器才能激活

如下面的代码段,如果使用普通串口助手在程序刚上传后、板子复位或USB线重新插拔后都会接收不到 ”Hello World!” ,也就是说程序运行不正常,而使用官方的串口监视器则没有这个问题。现在的解决办法是先使用官方的串口监视器先打开板子串口一下,紧接着在使用普通串口助手就可以打开了。本人纠结这个事情是因为自己在MFC中使用CSerial类编写的上位机软件和普通串口助手的情况一致。

void setup() {
    Serial.begin(9600,SERIAL_8N1);
    while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
    }
    //////////////////////////////向上位机传输下位机的初始化信息
    Serial.println("Hello World!!");
}

2 检测上位机命令的代码段的莫名其妙的问题

其代码段为:

String chString;//字符型字符串,用于储存上位机的命令
String valString;//用于储存上位机传来的数字信息
void checkState(double &vel_aim)
{
    char ch;
    while (Serial.available() > 0)
    {
        ch = Serial.read();
        chString += ch;
        if (isDigit(ch) || '.'==ch)
        {
            valString += ch;
        }
/************************************************************************/
/* 下面的三行代码,在官方的串口监视器上可以注销的,但是在普通的串口助手和
/* 咱们自己的软件也是有问题,这个问题,我们先不去解决吧,先赶进度
/************************************************************************/  
       Serial.print("+++");
       Serial.print(ch);
       Serial.println("+++");
/***********************************************************************/

       delay(1);//这个delay必须有,不然会出错,就会跳出while循环
    }
//   delay(5);//这个是以前delay的,应该是有用的吧,这个地方需要测试
    if (chString.startsWith("S"))
    {
        isStart = true;
        isFirstLoop = true;
        isEnd = false;
//      Serial.println("+++"+chString+"+++");
    }
    else if (chString.startsWith("E"))
    {
        isStart = false;
        isFirstLoop = false;
        isEnd = true;
//      Serial.println("+++"+chString+"+++");
    }
    else if (chString.startsWith("$"))
    {
        //todo here is the programm to set targetSpeed and pwm
        //123.123就会变成123.12
        vel_aim = valString.toFloat();
//      Serial.print("+++"+valString+"+++");
    }
    chString = "";
    valString = "";
}
void loop() {
    checkState(vel_aim);
}

在上面的代码段中,下面的几行代码是必须的,器原因如注释所示:

/************************************************************************/
/* 下面的三行代码,在官方的串口监视器上可以注销的,但是在普通的串口助手和
/* 咱们自己的软件也是有问题,这个问题,我们先不去解决吧,先赶进度
/************************************************************************/  
       Serial.print("+++");
       Serial.print(ch);
       Serial.println("+++");
/***********************************************************************/

       delay(1);//这个delay必须有,不然会出错,就会跳出while循环

其中那个delay(1),如果没有的话它会直接跳出while循环,不管有几个字符,剩下的那三行代码是在我试验的时候加的,如果不加这三行代码,程序就运行不正常,这个以后再试验得出结果吧。
PLUS: 这是我第一次使用MarkDown进行编辑,感觉还不错吧,以后再尝试使用

你可能感兴趣的:(arduino)