You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
2.3 KiB
C++

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

#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 = "";
}
}