Hello Experts,
I am new on Arduino platform, I want to read two holding register starting address 40033.
I have Arduino Uno and RS485 TTL converter. but data cant read.
Below is sketch i am using:
#include <ModbusMaster.h>
#include <SoftwareSerial.h>
//#include <AltSoftSerial.h>
// Construct software serial object for Modbus/PC
#if defined(ARDUINO_AVR_UNO)
const int SSRxPin = 10; // Recieve pin for software serial
const int SSTxPin = 11; // Send pin for software serial
SoftwareSerial SoftSerial(SSRxPin, SSTxPin);
#else
// This is just a assigning another name to the same port, for convienence
// Unless it is unavailable, always prefer hardware serial.
HardwareSerial* SoftSerial = &Serial1;
#endif
#define MAX485_DE 3
#define MAX485_RE_NEG 2
// instantiate ModbusMaster object
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);
// Init in receive mode
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
// Turn On Main/Hardware Serial Port
Serial.begin(9600);
// Turn on Soft serial port
#if defined (ARDUINO_AVR_UNO)
SoftSerial.begin(9600);
// NOTE: Software serial only supports 8N1
#else
Serial1.begin(9600, SERIAL_8E1);
#endif
// Start the Modbus instance with Modbus slave ID 10 and Hardware Serial port
node.begin(10, SoftSerial);
// Callbacks allow us to configure the RS485 transceiver correctly
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
}
void loop()
{
uint8_t result;
uint16_t data[6];
// Read 02 registers starting at 40033)
result = node.readHoldingRegisters(0x33,2);
if (result == node.ku8MBSuccess)
{
Serial.println("Success");
Serial.println(node.getResponseBuffer(0x00));
Serial.println(node.getResponseBuffer(0x01));
}
else
{
Serial.println(" Failed ");
}
delay(1000);
}
Please help me .