lond131421 发表于 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);
    }

lond131421 发表于 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表示用来截取字符串中间的某一位置,比如接收到的是
    //需要得到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]
查看完整版本: 求助,串口传输的电压值如何循环