首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino Mega和RS485 Modbus传感器

Arduino Mega和RS485 Modbus传感器
EN

Stack Overflow用户
提问于 2020-06-03 18:20:29
回答 1查看 1.1K关注 0票数 0

我正试图用RS485通讯将土壤传感器连接到arduino mega,但我无法让它工作。我使用的是SparkFun RS485突破:我已将TX连接到引脚18,RS连接到引脚19,RTS连接到引脚8。我尝试从这里调整代码:使用传感器制造商的默认设置的https://www.youtube.com/watch?v=tBw15SfmuwI

通信配置为9600,N,8,1(9600 bit,无校验位,8数据位,1停止bit)

  • Communication协议为Modbus-RTU,而我需要读取的地址为0x0000-0x0002 )。但是,当我打开串行监视器"?“时,我会得到随机字符作为输出,知道为什么吗?如果能帮我看一下传感器的输出,我会很感激的。这是我使用过的代码:

代码语言:javascript
复制
#include <ModbusMaster.h>

#define MAX485_DE 8
#define MAX485_RE_NEG 8
ModbusMaster node;

void preTransmission () {
  digitalWrite(MAX485_RE_NEG, 1);
  digitalWrite(MAX485_DE, 1);
}

void postTransmission () {
  digitalWrite(MAX485_RE_NEG, 0);
  digitalWrite(MAX485_DE, 0);
}

void setup() {
  pinMode(MAX485_RE_NEG, OUTPUT);
  pinMode(MAX485_DE, OUTPUT);
  digitalWrite(MAX485_RE_NEG, 0);
  digitalWrite(MAX485_DE, 0);
  Serial.begin(9600);
  node.begin(0,Serial);
  node.preTransmission(preTransmission);
  node.postTransmission(postTransmission);
}

void loop() {
  uint8_t resultMain;
  resultMain = node.readInputRegisters(0x0000, 3);
  if (resultMain == node.ku8MBSuccess) {
    Serial.println("-------");
    Serial.print("Temp: ");
    Serial.println(node.getResponseBuffer(0x00) /100);
    Serial.print("VWC: ");
    Serial.println(node.getResponseBuffer(0x01) /100);
    Serial.print("EC: ");
    Serial.println(node.getResponseBuffer(0x02) /100);
  }
}
EN

回答 1

Stack Overflow用户

发布于 2020-10-14 16:42:31

arduino mega有3个串口:

  • Serial
  • Serial1
  • Serial2

您可以把它看作是串行的Serial0 (零从来没有写过)。这个端口是硬连接到arduino mega上的USB端口。

您的RS485突破板连接到Serial1。TX1和RX1说,你可能会注意到大头针旁边第18和19针的屏幕打印。

因此,当在这一行初始化节点时:

代码语言:javascript
复制
node.begin(0,Serial);

你应该把它传递给Serial1而不是串行

例如

代码语言:javascript
复制
node.begin(0,Serial1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62179981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档