#define RS485_OE_1 22 //RS485 CH#1 Output Enable => pin 22 for CH#1 #define RS485_OE_2 23 //RS485 CH#2 Output Enable => pin 23 for CH#2 #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); Serial2.setTimeout(300); Serial2.begin(9600); pinMode(RS485_OE_2, OUTPUT); delay(10); digitalWrite(RS485_OE_2, Rcv_485); } void send_485(){ if(!Wait_485_1){ String message = read_buff(Buff_485_1_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_1 = true; Wait_485_1_cnt = 0; } } } int recieve_485(){ // Timeout code if(Wait_485_1){ Wait_485_1_cnt++; if(Wait_485_1_cnt > 25){ // Timeout = periodic(20ms) x 20 = 400 msec //Serial.println("485 not responced... (Timeout)"); timeoutMC9(); //if((latest_sent_msg == MC9_10_PV) ||(latest_sent_msg == MC9_10_SV)){ /* if((latest_sent_msg == msg_MC9_PV(10)) || (latest_sent_msg == msg_MC9_SV(10))){ timeoutMC9(); } */ latest_sent_msg = ""; Wait_485_1 = false; Wait_485_1_cnt = 0; numOf485--; return -1; } } // Receive pv data while(Wait_485_1 && (Serial1.available() > 0)) { char c = Serial1.read(); write_buff_c(Buff_485_1_Rd, c); } String message = read_buff(Buff_485_1_Rd); if(message != ""){ numOf485--; if(latest_sent_msg.indexOf("DRS") != -1){ saveMC9(message); } else{ Serial.print("----- 485 rcv : "); Serial.println(message); } Wait_485_1 = false; Wait_485_1_cnt = 0; } return 0; } /* For Test from PC */ void recieve_485_0(){ 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_1_Wr, IdeSerial); IdeSerial = ""; } }