Hello guys, some time ago, I tried to work with modbus in a way that I understood
Finally I found a simple code that turns the slave’s leds on / off … everything works fine
I would like to know how to send data from the slave to the master
example: when the slave receives something, send the master 550.
the goal is to treat the value in the master to light up leds or something like that …
thank you!
Master::: - github.com/4-20ma/ModbusMaster
Slave:: - github.com/smarmengol/Modbus-Master-Slave-for-Arduino
Master:
#include <ModbusMaster.h> //Library for using ModbusMaster
#define MAX485_DE 3
#define MAX485_RE_NEG 2
ModbusMaster node; //object node for class ModbusMaster
void preTransmission() //Function for setting stste of Pins DE & RE of RS-485
{
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(115200); //Baud Rate as 115200
Serial.setTimeout(50);
node.begin(1, Serial); //Slave ID as 1
node.preTransmission(preTransmission); //Callback for configuring RS-485 Transreceiver correctly
node.postTransmission(postTransmission);
}
void loop()
{
node.writeSingleRegister(0x40000,1); //Writes value to 0x40000 holding register
node.writeSingleRegister(0x40001,1);
node.writeSingleRegister(0x40000,0); //Writes value to 0x40000 holding register
node.writeSingleRegister(0x40001,0);
}
Slave:
#include<ModbusRtu.h> //Library for using Modbus in Arduino
#define led1 A0 //Define as led1
#define led2 A1 //Define as led2
Modbus bus; //Define Object bus for class modbus
uint16_t modbus_array[] = {0,0,0}; //Array initilized with three 0 values
void setup()
{
Serial.begin(9600);
pinMode(led1,OUTPUT); //Led1 set as OUTPUT
pinMode(led2,OUTPUT); //Led2 set as OUTPUT
bus = Modbus(1,1,2); //Modbus slave ID as 1 and 1 connected via RS-485 and 4 connected to DE & RE pin of RS-485 Module
bus.begin(115200); //Modbus slave baudrate at 115200
}
void loop()
{
bus.poll(modbus_array,sizeof(modbus_array)/sizeof(modbus_array[0])); //Used to receive or write value from Master
if (modbus_array[0] == 0) // Address 0
{
digitalWrite(led1,LOW); //LED OFF if 0
}
else
{
digitalWrite(led1,HIGH); //LED ON if value other than 0
}
if (modbus_array[1] == 0) // Address 1
{
digitalWrite(led2,LOW); //LED OFF if 0
}
else
{
digitalWrite(led2,HIGH); //LED ON if value other than 0
}
delay(200);
}