极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15045|回复: 1

求助,串口传输的电压值如何循环

[复制链接]
发表于 2018-7-24 08:33:53 | 显示全部楼层 |阅读模式
我写的程序 每次触摸后显示电压值,但是只能接收一次,箱问问这段代码应该如何写。


else if(read_num==5){ digitalWrite(13,LOW);     //刷新电压值
    Serial.print("CLS(0);");
    int sensorValue = analogRead(A0);
    float vol=sensorValue*2.5/1024;
    Serial.print("DS32(200,60,'");Serial.print(vol,1);Serial.print("',2);");
    delay(150);
    Serial.print("DS32(280,220,'ON ',2);");
    Serial.println("\r\n");
    Serial.flush();
    delay(200);
    }
回复

使用道具 举报

 楼主| 发表于 2018-7-24 08:34:25 | 显示全部楼层
全代码

boolean stringComplete = false;    //字符串是否已接收完全

String read_data="";    //定义一个read_data字符串变量,赋初值为空值,
                      //用于保存输入数据的字符串
u8 start_flag=0;    //=1 表示有命令处理
u16 read_time=0;    // 读取时间函数

u16 read_num=0;    //命令缓存区,存放C到]中传来的字符串

void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13,0);
  Serial.begin(115200);    //初始化串口
  
  read_data.reserve(1000);    //设置字符串read_data存储量为100个字节
  Serial.flush();        //清空串口缓存
}

void loop() {

  if (stringComplete) {
    //Serial.println(read_data);
    //Serial.println(read_data.length());
    read_num=(read_data.substring(2, read_data.length()-1)).toInt();
    //substring表示用来截取字符串中间的某一位置,比如接收到的是[BC:13]
    //需要得到13这个数字,就要从截取的字符串地2个字开始
    Serial.println(read_num);    //串口输出换行的read_num的数字(实际使用
                                    //中取消,会影响串口传输信息)
    if(read_num==13){ digitalWrite(13,HIGH);   //灯丝开
    Serial.print("DS32(120,214,'ON ',2);");
    Serial.print("\r\n");
    Serial.flush();
    delay(200);
    }
    else if(read_num==14){ digitalWrite(13,LOW);    //灯丝关
    Serial.print("DS32(120,214,'OFF',1);");
    Serial.print("\r\n");
    Serial.flush();
    delay(200);
    }
    else if(read_num==11){ digitalWrite(13,HIGH);    //高压开
    Serial.print("DS32(120,84,'ON ',2);");
    Serial.print("\r\n");
    Serial.flush();
    delay(200);
    }
    else if(read_num==12){ digitalWrite(13,LOW);     //高压关
    Serial.print("DS32(120,84,'OFF',1);");
    Serial.print("\r\n");
    Serial.flush();
    delay(200);
    }
    else if(read_num==5){ digitalWrite(13,LOW);     //刷新电压值
    Serial.print("CLS(0);");
    int sensorValue = analogRead(A0);
    float vol=sensorValue*2.5/1024;
    Serial.print("DS32(200,60,'");Serial.print(vol,1);Serial.print("',2);");
    delay(150);
    Serial.print("DS32(280,220,'ON ',2);");
    Serial.println("\r\n");
    Serial.flush();
    delay(200);
    }
    else if(read_num==15){ digitalWrite(13,HIGH);   //风扇开
    Serial.print("DS32(120,84,'ON ',2);");
    Serial.print("\r\n");
    Serial.flush();
    delay(200);
    }
    else if(read_num==16){ digitalWrite(13,LOW);    //风扇关
    Serial.print("DS32(120,84,'OFF',1);");
    Serial.print("\r\n");
    Serial.flush();
    delay(200);
    }
    else if(read_num==17){ digitalWrite(13,HIGH);    //24V开
    Serial.print("DS32(120,214,'ON ',2);");
    Serial.print("\r\n");
    Serial.flush();
    delay(200);
    }
    else if(read_num==18){ digitalWrite(13,LOW);     //24V关
    Serial.print("DS32(120,214,'OFF',1);");
    Serial.print("\r\n");
    Serial.flush();
    delay(200);
    }
    read_data="";       //清空read_data字符串
    stringComplete = false;
  }

}

void serialEvent()       //串口中断
{
  while (Serial.available())
  {
    char inChar = (char)Serial.read();     //获取从串口读取有效的字节数(字符)

    if(inChar=='C')     //截取字符串“C”后面字符串
    {
      start_flag=1;
      read_time=millis();
    }
    if(start_flag==1)
    {
       read_data += inChar;
       if(read_data.length()>20||(millis()-read_time>50))
//读取  C 以后读取的长度大于20或者从接受第一个  [  过了50ms 还没
//收到  ]  就强制重新收
       {
          start_flag=0;
          read_data="";
       }
    }
    if(start_flag==1&&inChar==']')  //截取到字符串“]”后不在截取
    {
      start_flag=0;
      stringComplete = true;
    }
  }
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-14 18:07 , Processed in 0.039195 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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