Arduino电流变送器与485协议通信
- 1.接线
- 2.代码
- 3.说明
1.接线
使用的模块:Arduino,485转ttl模块,电流变送器(支持485),电源.
2.代码
#include <SoftwareSerial.h> unsigned char item[8] = {
0x01, 0x03, 0x00, 0x56, 0x00, 0x01, 0x64, 0x1A}; //16进制读取电流命令 String data = ""; // 接收到的16进制字符串 SoftwareSerial tempSerial(8, 11); //临时串口 RX8, TX11 int status=0; int beforeFlag = 2; int nowFlag = 2; void setup() {
tempSerial.begin(9600); Serial.begin(9600); } void loop() {
tempSerial.println("1111111"); delay(500); // 放慢输出频率 for (int i = 0 ; i < 8; i ) {
// 发送电流读取命令
tempSerial.write(item[i]); // write输出
}
delay(100); // 等待电流数据返回
data = "";
while (tempSerial.available()) {
//从串口中读取数据
unsigned char in = (unsigned char)tempSerial.read(); // read读取
if(status==4){
Serial.print("start ");
Serial.print(beforeFlag);
Serial.print(" ");
nowFlag = (int)in; //当前读取的电流值
Serial.println(in);
//1.获取下降沿的数据
if(nowFlag==0&&beforeFlag!=0){
Serial.print(0); //开始工作的标识
}
//2.获取上升沿的数据
if(nowFlag!=0&&beforeFlag==0){
Serial.print(1); //结束工作的标识
}
beforeFlag=nowFlag;
}
data += in;
data += ',';
status++;
// beforeFlag = (int)in; //保存此次读取的电流值,用于下次判断用
}
status=0;
if (data.length() > 0) {
//先输出一下接收到的数据
Serial.println();
Serial.println(data);
}
}
3.说明
这段代码适用于Arduino与电流变送器以及压力变送器等需要进行485通讯的设备进行通讯的案例. 其实还有一中写法,但是遇到这一类的命令的时候会报错,只能创建一个变量将0x赋值给变量才可以.上面的这种代码比较简洁,处于可用状态.第一次写关于Arduino的帖子,有什么不对的地方各位评论区斧正,感谢.