// Sample communication Code for RS 485 Shield with Arduino Mega 2560 #define RS485_OE_1 22 //RS485 CH#1 Output Enable => pin 22 for CH#1 #define Snd_485 HIGH #define Rcv_485 LOW void RS485_setup(){ Serial1.setTimeout(300); Serial1.begin(9600); pinMode(RS485_OE_1, OUTPUT); delay(10); digitalWrite(RS485_OE_1, Rcv_485); } void send_485(){ if(!Wait_485){ String message = read_buff(Buff_485_Wr); if(message != ""){ //save sent message info. for received data processing latest_sent_msg = message; message += CRLF; digitalWrite(RS485_OE_1, Snd_485); delay(5); Serial1.print(message); returnTime = millis(); Serial1.flush(); digitalWrite(RS485_OE_1, Rcv_485); delay(5); Wait_485 = true; Wait_485_cnt = 0; } else{ //Serial.println("Free"); } } } int recieve_485(){ // Timeout code if(Wait_485){ Wait_485_cnt++; if(Wait_485_cnt > 200){ // Timeout = periodic(100ms) x 200 = 2 sec Serial.println("485 not responced... (Timeout)"); latest_sent_msg = ""; Wait_485 = false; Wait_485_cnt = 0; numOf485--; return 0; } } // Receive pv data while(Wait_485 && (Serial1.available() > 0)) { char c = Serial1.read(); write_buff_c(Buff_485_Rd, c); } String message = read_buff(Buff_485_Rd); if(message != ""){ int addr; String mode; int data[8]; int crc; numOf485--; /* To be moved @MC0.ino */ if((latest_sent_msg == MC9_10_PV) ||(latest_sent_msg == MC9_10_SV)){ if (parseMC9(message, addr, mode, data, crc)) { if(latest_sent_msg == MC9_10_PV){ for(int i = 0 ; i < Size_PV ; i++){ Values_10_PV[i] = data[i]; } } if(latest_sent_msg == MC9_10_SV){ for(int i = 0 ; i < Size_SV ; i++){ Values_10_SV[i] = data[i]; } } } else { Serial.println("error 485 read"); } } else{ Serial.print("485 rcv : "); Serial.println(message); } Wait_485 = false; Wait_485_cnt = 0; } return 1; } /* For Test from PC */ void recieve_485_0(){ // Receive pv data while(Serial.available() > 0) { char c = Serial.read(); IdeSerial += c; } if(IdeSerial.endsWith("\n")){ IdeSerial.replace(CRLF,""); IdeSerial += sumMC9(IdeSerial); IdeSerial = "" + IdeSerial + CRLF; write_buff_first(Buff_485_Wr, IdeSerial); IdeSerial = ""; } }