As said iam using a Arduino MEGA 2560 connected via USB to My RSAP Pi 3.
Modbus Read Discrete Input Registers failed on MB device MEGA_XA: Connection timed out
#include <ModbusSerial.h>
ModbusSerial modbus;
// Digital input pins (excluding 0, 1)
const uint8_t inputPins[] = {
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50, 51, 52, 53
};
const uint8_t numInputs = sizeof(inputPins) / sizeof(inputPins[0]);
// Analog input pins (A0–A15)
const uint8_t analogPins[] = {
A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15
};
const uint8_t numAnalogs = sizeof(analogPins) / sizeof(analogPins[0]);
void setup() {
// Set digital pins as input
for (uint8_t i = 0; i < numInputs; i++) {
pinMode(inputPins[i], INPUT_PULLUP);
}
// Start Modbus slave on Serial, 9600 baud, slave ID 1
modbus.config(&Serial, 9600, SERIAL_8N2);
modbus.setSlaveId(1);
// Map digital inputs as discrete inputs (function code 0x02)
for (uint8_t i = 0; i < numInputs; i++) {
modbus.addIsts(i);
}
// Map analog inputs as input registers (function code 0x04)
for (uint8_t i = 0; i < numAnalogs; i++) {
modbus.addIreg(i);
}
}
void loop() {
// Update digital input discrete inputs
for (uint8_t i = 0; i < numInputs; i++) {
modbus.Ists(i, digitalRead(inputPins[i]));
}
// Update analog input registers
for (uint8_t i = 0; i < numAnalogs; i++) {
modbus.Ireg(i, analogRead(analogPins[i]));
}
modbus.task();
}