|
本帖最后由 Mr.sail 于 2015-4-13 09:09 编辑
用arduino执行电压、温度和转速检测,通过串口调试和观察指示灯变化,发现在运行判断指令(if)的时候会出现很明显的 延时现象,比如应该电压低于12.4v时 指示灯亮,现在情况是,指示灯会延时一到两秒钟才会被点亮。请问各位大神,这是什么原因啊?
还有温度检测部分,我用的是 DS18B20,通过串口通信,有的时候会显示真值和-127循环跳动,也没找到原因。求大神赐教
- //一机程序(测速,电压检测,温度检测,蓝牙串口通讯,液晶屏显示)
- //设定连接模拟电压引脚A1
- //定义温度2端口
- //温度报警10
- //电池报警11
- //霍尔元件引脚为3
- //温度程序定义
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #define ONE_WIRE_BUS 2 //定义单总线连接的端口
- OneWire oneWire(ONE_WIRE_BUS);
- DallasTemperature sensors(&oneWire);
- float vol; //温度输出值
- //电压程序定义
- float val ;//电压输出标志(小数)
- //测速定义
- unsigned long mcsj; //定义引脚高电平时间, 无符号长整数型变量
- unsigned long v;//定义无符号变量v,用来表示速度
- #define s 0.022//定义常数s,用来表示轮子周长(m)
- //联机程序
- int LJ = 4;//LIAN JI
- void setup()
- {
- Serial.begin(9600);
- sensors.begin(); //启动测温线路
- pinMode(4, OUTPUT); //连机信号
- pinMode(10,OUTPUT); //温度出错灯
- pinMode(11,OUTPUT); //电池出错灯
- Serial.begin(9600); //串口波特率为9600
- pinMode(3, INPUT); //设置引脚为输入模式
- }
- void loop()
- {
- //电压程序
- val = analogRead(A1); // 读取电压模拟值(0到1023之间)
- val = map(val, 0, 1023, 0, 22440); // 利用“map”函数缩放该值,val(mv)
- val = val/1000;
- //输出电压到串口
- Serial.print(val);
- Serial.println(" V ");
- //测速程序
- mcsj = pulseIn(3, LOW,1500000); //读取引脚上的高电平脉冲,最大脉冲时间间隔为1.5秒,并且把结果赋值给mcsj变量
- v = s*3600000 / mcsj;
- Serial.print(v); //通过串口输出速度V变量
- Serial.println(" km/h "); //输出km/h后换行
-
- //温度程序
- sensors.requestTemperatures(); //发送温度测量请求命令
- Serial.print(sensors.getTempCByIndex(0)); //获取0号传感器温度数据并发送
- Serial.println("℃");
- delay(10); //一秒刷新一次
-
- //电池温度检测环节
- if(vol>60)
- { //如果温度大于60℃ ,10号灯报警
- digitalWrite(10, HIGH);
- }
- if(vol<57) //如果温度小于57℃ ,10号灯报警解除
- {
- digitalWrite(10,LOW);
- }
- //电池电压检测环节
- if(val<12.4) //如果电压小于12.4v ,11号灯报警
- {
- digitalWrite(13, HIGH);
- }
- if(val>12.6) //如果电压大于12.6v ,11号灯报警解除
- {
- digitalWrite(13,LOW);
- }
- if (vol<=57 && val>12.6) //如果温度小于50且电压大于12.4v , 给电调启动信号,否则关闭电调信号,报警
- {
- digitalWrite(LJ,HIGH); //调动电调指令,与二机器通讯
- }
- if (vol>60 || val<12.4)
- {
- digitalWrite(LJ,LOW);
- }}
复制代码
|
|