Hallo,
ich glaube du hast da einiges noch nicht verstanden
winterwurst:
Ich verwende die Pins 2 und 3 im Code und habe auch die Jumper auf dem Shield entsprechend gesteckt.
Das sind doch die Pins mit denen die RS485 zwischen Sende- und Empfangsrichtung umschaltet. Nicht die über die gesendet wird. Da müsste man sowieso checken, ob die so zum Shield passen, bzw. dieses richtig einstellen.
Natürlich hat SoftwareSerial keine Funktionen wie "readHoldingRegisters". Dafür ist ja die Modbus Master Library da. Sie erweitert eine serielle Schnittstelle entsprechend.
Und da verwendest du Serial, also die Pins 0 und 1:
node.begin(1, Serial); // Da wird die Schnittstelle festgelegt !
Damit hängen dann das USB-Interface vom Uno, der Microcontroller und die RS485 zusammen. Das gibt diesen Unfug im seriellen Monitor. Ist elektrisch und softwaremäßig ziemlicher Käse, funktioniert aber wegen der Richtungsumschaltung an der RS485 "irgendwie".
Mit der Softwareserial sähe das eher so aus (ungetestet aus Beispielen zusammenkopiert):
#include <SoftwareSerial.h>
#include <ModbusMaster.h>
// Pins für Transceiver und Receiver Enable
#define MAX485_DE 3
#define MAX485_RE_NEG 2
ModbusMaster node;
SoftwareSerial mySerial(10, 11); // RX, TX Pins ggf. so ändern, dass sie zum Shield passen
void setup() {
Serial.begin(9600); // Für den seriellen Monitor
mySerial.begin(9600); // Für den Modbus
node.begin(1, mySerial); // Jetzt mit SoftwareSerial