Example Code for Arduino-Modify Module Address

Last revision 2025/12/20

This article provides a detailed guide on modifying module addresses using Arduino, including hardware preparation, software setup, and sample code implementation for effective use with RS485 shield.

Hardware Preparation

  • 1 x Arduino Leonardo (Since RS485 to TTL will occupy one serial port, it is recommended using a device with two or more serial ports like Arduino Leonardo. Arduino Modbus protocol takes up a lot of memory, so we recommend to use Arduino mega2560 board.)
  • 1 x RS485 Shield for Arduino
  • 1 x DC Power Supply (DC 24V)
  • 1 x USB Cable (Connect Arduino board and a PC)

Software Preparation

  • Arduino IDE
  • Open "Library Manager"(Ctrl+Shift+I) in IDE, find and install ArduinoModbus and ArduinoRS485 libraries.
    SEN0310-1

Wiring Diagram

SEN0310-Connection

Other Preparation Work

Install ArduinoModbus and ArduinoRS485 libraries via Arduino IDE's Library Manager.

Sample Code

/**************************************************************************************************************
*This code tests the address modification function of the URM12 ultrasonic sensor(1500cm&RS485)
*@ author : [email protected]
*@ data   : 30.09.2019
*@ version: 1.0
*RX(RS485 Shield) -> TX1/D1 (Arduino Leonardo)  TX(RS485 Shield)-> RX1/D0 (Arduino Leonardo)
**************************************************************************************************************/
#include <ArduinoModbus.h>
#include <ArduinoRS485.h>

#define addr_public   0x00

typedef enum
{
  PID,
  VID,
  SLAVE_ADDR,
  COM_BAUDRATE,
  COM_PARITY_STOP,
  DISTANCE,
  INTERNAL_TEMP,
  EXTERN_TEMP,
  CR
} regindex;

uint16_t cr_t = 0;

uint16_t read_data(uint16_t addr_t, uint16_t reg)
{
  uint16_t data_t;
  if (!ModbusRTUClient.requestFrom(addr_t, HOLDING_REGISTERS, reg, 1))
  {
    Serial.print("failed to read registers! ");
    Serial.println(ModbusRTUClient.lastError());
    data_t = 0xffff;
  }
  else
  {
    data_t =  ModbusRTUClient.read();
  }
  return data_t;
}


uint16_t write_data(uint16_t addr_t, uint16_t reg, uint16_t data)
{

  if (!ModbusRTUClient.holdingRegisterWrite(addr_t, reg, data))
  {
    //Serial.print("Failed to write coil! ");
    //Serial.println(ModbusRTUClient.lastError());
    return 0;
  }
  else
    return 1;
}



void setup() {
  Serial.begin(9600);
  ModbusRTUClient.begin(19200);
  delay(3000);
}
volatile uint16_t addr, res;
void loop() {
  addr = 0x11;
  res = write_data(addr_public, SLAVE_ADDR, addr);
  Serial.print("The device address has been modified as ");

  Serial.print(addr);
  Serial.println(".please power off and restart the device");
  while (1);
}

Result

SEN0310-Modify Address

Was this article helpful?

TOP