Hilfe - Arduino will Modbus Temperatursensor nicht auslesen (RS485 Linksprite)

Hi ArduFE,

danke vielmals für deine ausführliche Erklärung, mir ist nun Einiges klar. SoftwareSerial stellt extra Pins zur seriellen Kommunikation zur Verfügung, damit die UART nicht gestört wird, welche ja auch mit dem PC kommuniziert.

Pins 0 und 1 sind also für den PC, zwei Pins kann man für die Modbus Kommunikation wählen (mit SoftwareSerial), wobei diese mit den Jumperkombinationen am Shield übereinstimmen muessen. Das habe ich gerade mit einer if-Schleife mit mySerial.available() probiert, das funktioniert auch. Habe jetzt mal Pin 4 und 5 für mySerial und auf dem Shield gewählt, weil bis hoch zu 10 und 11 geht der Steckbrückenplatz am Shield nicht.

RE und DE sind mir bei diesem Board aber noch nicht ganz klar. Ich füge mal den Schaltplan bei:

Da steht jetzt am Chip U2, dass RE und DE zusammen am Header 3 haengen. Je nach dem wie ich das jetzt jumper kann ich entweder TX (TX_CTRL) oder TX/RX (D9_CTRL) wählen. Muesste ich meinen Transceiver und Receiver im Code dann nicht darueber "enablen"? Mit DE auf Pin 3 und RE auf Pin 2 funktioniert die Modbus Abfrage nämlich noch nicht. :drooling_face: Da scheiterts wieder bei result == node.ku8MBSuccess.

#include <SoftwareSerial.h>
#include <ModbusMaster.h>

// Pins for transceiver and receiver enable
#define MAX485_DE      3
#define MAX485_RE_NEG  2

ModbusMaster node; 

SoftwareSerial mySerial(4, 5); // Pins 4 and 5 for serial communication



void setup() {
  // set pins to output
  pinMode(MAX485_RE_NEG, OUTPUT); 
  pinMode(MAX485_DE, OUTPUT);
  Serial.begin(9600); 
  mySerial.begin(9600); 
  node.begin(1, mySerial); 

  
}

void loop() {
   
    //set pins pre transmission to high
    digitalWrite(MAX485_RE_NEG, HIGH);
    digitalWrite(MAX485_DE, HIGH);
    
    uint8_t result;
    // modbus function 0x03    
    result = node.readHoldingRegisters(1, 1); 
    delay(1000);
  
    // set pins post transmission to low
    digitalWrite(MAX485_RE_NEG, LOW);
    digitalWrite(MAX485_DE, LOW); 
  
    if (mySerial.available() && (result == node.ku8MBSuccess))
    {
      Serial.print("TEMPERATURE: ");
      delay(1000);
      //Serial.println(node.getResponseBuffer(1)/100.0f);
    }

  delay(1000);
  
}