求助,串口传输的电压值如何循环
我写的程序 每次触摸后显示电压值,但是只能接收一次,箱问问这段代码应该如何写。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);
} 全代码
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表示用来截取字符串中间的某一位置,比如接收到的是
//需要得到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;
}
}
}
页:
[1]