我正试图用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)
#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);
}
}发布于 2020-10-14 16:42:31
arduino mega有3个串口:
您可以把它看作是串行的Serial0 (零从来没有写过)。这个端口是硬连接到arduino mega上的USB端口。
您的RS485突破板连接到Serial1。TX1和RX1说,你可能会注意到大头针旁边第18和19针的屏幕打印。
因此,当在这一行初始化节点时:
node.begin(0,Serial);你应该把它传递给Serial1而不是串行
例如
node.begin(0,Serial1);https://stackoverflow.com/questions/62179981
复制相似问题