Devices & Components
Arduino Uno Rev3
SG90 Micro-servo motor
MicroSD Module (Generic)
Cable, USB to RS485
LED (generic)
Through Hole Resistor, 120 ohm
Pushbutton Switch, Push-Pull
Resistor 1k ohm
Jumper wires (generic)
Software & Tools
Arduino IDE
Project description
Code
MOD_BUS_RTU_Slave.ino
arduino
1//RS-485 Modbus Slave (Arduino UNO) 2//Circuit OZOX 3 4#include<ModbusRtu.h> //Library for using Modbus in Arduino 5#include <Servo.h> //Library for using Servo Motor 6#include <SD.h> //Library for using SD Card 7#include <SPI.h> //Library for using SPI IO 8 9#define led1 2 //Define as 2 led1 10#define led2 5 //Define as 5 led2 11#define led3 7 //Define as 7 led3 12#define led4 8 //Define as 8 led4 13#define but 3 //Define as 3 but as Button 14 15#define CS_PIN 9 //Define as 9 CS pin for SPI 16 17File myFile; 18 19Servo servo; //Initilize servo object for class Servo 20Modbus bus; //Define Object bus for class modbus 21uint16_t modbus_array[10]; //Array initilized 22const int chipSelect = 10; 23int btnSta = 0; 24int myFi[10]; 25String s = " "; 26String myf[10]; 27 28void setup() 29{ 30 pinMode(led1,OUTPUT); //Led1 set as OUTPUT 31 pinMode(led2,OUTPUT); //Led2 set as OUTPUT 32 pinMode(led3,OUTPUT); //Led2 set as OUTPUT 33 pinMode(led4,OUTPUT); //Led2 set as OUTPUT 34 pinMode(9, OUTPUT); 35 pinMode(3, INPUT); 36 37 SD.begin(CS_PIN); 38 Serial.begin(9600); 39 40 myFile = SD.open("test.txt", FILE_READ); 41 if(myFile) 42 { 43 for(int i=0;i<10;i++) 44 { 45 myFi[i]=myFile.parseInt(); 46 modbus_array[i] = myFi[i]; 47 } 48 myFile.close(); 49 } 50 else{ 51 for(int i=0;i<10;i++) 52 { 53 modbus_array[i] = 0x00; 54 } 55 Serial.print("File didnt open..."); 56 delay(20); 57 } 58 59 servo.attach(6); //Servo PWM pin 6 60 bus = Modbus(1,1,4); //Modbus slave ID as 1 and 1 connected via RS-485 and 4 connected to DE & RE pin of RS-485 Module 61 bus.begin(9600); //Modbus slave baudrate at 9600 62} 63 64void loop() 65{ 66 bus.poll(modbus_array,sizeof(modbus_array)/sizeof(modbus_array[0])); //Used to receive or write value from Master 67 68 if (modbus_array[0] == 0) 69 { 70 digitalWrite(led1,LOW); 71 } 72 else 73 { 74 digitalWrite(led1,HIGH); 75 } 76 77 if (modbus_array[1] == 0) 78 { 79 digitalWrite(led2,LOW); 80 } 81 else 82 { 83 digitalWrite(led2,HIGH); 84 } 85 if (modbus_array[2] == 0) 86 { 87 digitalWrite(led3,LOW); 88 } 89 else 90 { 91 digitalWrite(led3,HIGH); 92 } 93 if (modbus_array[3] == 0) 94 { 95 digitalWrite(led4,LOW); 96 } 97 else 98 { 99 digitalWrite(led4,HIGH); 100 } 101 int pwm = modbus_array[4]; 102 servo.write(pwm); 103 104 btnSta = digitalRead(but); 105 if(btnSta==LOW) 106 { 107 } 108 else 109 { 110 SD.remove("test.txt"); 111 delay(10); 112 write_(myFile); 113 //oku(myFile)); // Eer dosyay okumak isterseniz. 114 } 115 delay(250); 116 } 117 118 void write_(File ff) 119 { 120 String dd=""; 121 ff = SD.open("test.txt", FILE_WRITE); 122 if(ff) 123 { 124 for(int i=0;i<10;i++) 125 { 126 myFi[i] = (int)modbus_array[i]; 127 dd += myFi[i] + s; 128 } 129 ff.print(dd); 130 ff.close(); 131 Serial.print("Yazlan deerler: " + dd); 132 } 133 else 134 { 135 Serial.print("File didnt open.."); 136 delay(20); 137 } 138 } 139 140 void read_(File ff) 141 { 142 String gg=""; 143 ff = SD.open("test.txt", FILE_READ); 144 if(ff) 145 { 146 for(int i=0;i<10;i++) 147 { 148 myFi[i] = ff.parseInt(); 149 } 150 for(int i=0;i<10;i++) 151 { 152 gg += myFi[i] + s; 153 } 154 ff.close(); 155 Serial.print("Okunan deerler: " + gg); 156 } 157 else 158 { 159 Serial.print("File didnt open.."); 160 delay(20); 161 } 162 } 163
Downloadable files
Circuit SD Read Write with Modbus
Circuit SD Read Write with Modbus

Circuit SD Read Write with Modbus
Circuit SD Read Write with Modbus

Modbus Software
Download the zip file and run setup.exe.
file.None
Comments
Only logged in users can leave comments