发串口的数据只执行了一次,啥问题!!-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 359|回复: 3

发串口的数据只执行了一次,啥问题!!

[复制链接]
发表于 2022-9-21 16:08 | 显示全部楼层 |阅读模式
最近在学习arduino串口通讯,写了个实验程序,发现第一次执行是正确的,再发送指令结果依然是第一次的数值,各位大虾给看看,指点一下,谢谢了!


/*
* 串口通讯实验
* 板子:stm32f103c8t6
* OLED SDA PB7,SAL PB6
* arduino IE 2.0

*/
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* clock=*/ PB6, /* data=*/ PB7, /* reset=*/ U8X8_PIN_NONE);
//#define UID_base  0x1FFFF7E8U //读取芯片ID
String comdata="";//字符串

void setup() {

  Serial.begin(9600);//设置串口速率
  while(Serial.read()>=0){} //清空串口缓存  
  u8g2.begin();//OLED屏初始化
  u8g2.enableUTF8Print();
  u8g2.setFont(u8g2_font_6x13_tf);//设置字体
  u8g2.setFontDirection(0);//设置字号
  u8g2.clearBuffer();//清屏
  u8g2.drawFrame(0, 0, 128, 16);//画矩形框
  u8g2.setCursor(25, 12);//指定显示位置
  u8g2.print("STM32 Arduino!");//显示字符
  u8g2.sendBuffer();//发送显示缓冲
  delay(100);
    }
void loop() {
  
if(Serial.available()>0){//检查串口是否有数据
   comdata+=char(Serial.read());//将单个字符连接成字符串
   delay(50);
   int i=(comdata).toInt();//转化为数值
       Serial.println(i);//向串口回传
   switch(i){
     case 1:
      u8g2.setCursor(25, 32);//指定显示位置
      u8g2.print("No:0001");//显示字符
       break;
     case 2:
      u8g2.setCursor(25, 32);//指定显示位置
      u8g2.print("No:0002");//显示字符
       break;
     case 3:
u8g2.setCursor(25, 12);//指定显示位置
      u8g2.print("No:0003");//显示字符
        break;}
}else{
  u8g2.sendBuffer();
  }
}


发表于 2022-9-21 16:32 | 显示全部楼层
你没有清空字符串comdata
执行完一次后,加一个comdata="";
 楼主| 发表于 2022-9-21 21:45 | 显示全部楼层
果然如此,谢谢int_i,我看了半天没发现问题,真是当局者迷!
发表于 2022-9-22 00:22 | 显示全部楼层
读出整个字符串用 Serial.readString()  比较简洁,也不需要手动清空这个字符串, 因为该语句每次运行自动清空字符串变量。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 05:53 , Processed in 0.068093 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表