请问ESP32的例子为什么不能成功 串口不能接收数据 serialEvent()

2021-05-319099
AI 快速预览详细 收起
本文讨论了ESP32串口无法接收数据的问题,并提供了一个具体的代码示例。通过`serialEvent()`函数,可以处理串口数据的接收。文章详细解析了`serialEvent()`函数的实现,并提供了调试方法和解决步骤。通过`while(Serial.available() > 0)`循环等待数据接收完成,确保每次接收完整的数据块。此外,还建议检查`Serial.begin(115200);`是否正确配置,并确保`serialEvent()`函数中的逻辑正确处理接收到的数据。
请问ESP32的例子为什么不能成功 串口不能接收数据
int zhengshu;
String zifu="zjybest esp32 first prog";//全局变量

void setup()
{
  Serial.begin(115200);    //串口调试

}

void loop()
{
  Serial.println(zifu);
  Serial.print("shuzi:");
  Serial.println(zhengshu);
  delay(1000);
}

void serialEvent()
{
  String intchars="";//局部变量
  String chars="";
  int temp;
  while(Serial.available()>0)//一直等待数据接收完成 用if的话loop函数执行一次接受1个字符
  {
    char inchar=Serial.read();
    if(isDigit(inchar)) //是数字就执行
    {
      intchars+=inchar;//数字字符串
    }
    else chars+=inchar;//否则就是字符串
  }
  temp=intchars.toInt();//将数字字符串转换成整数
  Serial.print("jieshou -.-ok");//调试加入的好习惯 ?可以不要此句
  zhengshu=temp;//赋值给全局变量,每次发送都覆盖原来的数据
  zifu=chars;//赋值给全局变量,每次发送都覆盖原来的数据
}


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
zjybest
zjybest
作者

String inputString = ""; // a String to hold incoming data
boolean stringComplete = false; // whether the string is complete
void setup() {
// initialize serial:
Serial.begin(9600);
// reserve 200 bytes for the inputString:
inputString.reserve(200);
}
void loop() {
// print the string when a newline arrives:
if (stringComplete) {
Serial.println(inputString);
// clear the string:
inputString = "";
stringComplete = false;
}
}
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag so the main loop can
// do something about it:
if (inChar == '\n') {
stringComplete = true;
}
}
}
- 没有更多了 -