资讯详情

Arduino与485协议电流变送器进行通信

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的帖子,有什么不对的地方各位评论区斧正,感谢.

标签: 062电流变送器频率变送器带隔离

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台