Hello,
I have built two strip boards with ATMEGA328PU's from an Arduino UNO's.
Board A reads the state of 10 pins and sends the opposite to the pin state across a 9600 kbps RS232 serial link.
Board B recives the alarm data and sets pins to the data recived from board A.
In the event of the serial link failing all pins on Board B are to be set low.
The problem I have is on board B the IC reads the serial port out of sync with the transmit of board A and I'm not sure how to store serial reads on board B whilst keeping the failsafe active. (I'm new to all this programing malarky).
Here are my codes.
Board A
byte incomingByte;
byte alarm0byte;
byte alarm1byte;
byte alarm2byte;
byte alarm3byte;
byte alarm4byte;
byte alarm5byte;
byte alarm6byte;
byte alarm7byte;
byte alarm8byte;
byte alarm9byte;
byte data1;
byte data2;
byte data3;
byte data4;
byte data5;
byte data6;
byte data7;
byte data8;
byte data9;
byte data0;
int alarminput0 = A5;
int alarminput1 = A4;
int alarminput2 = 2;
int alarminput3 = 3;
int alarminput4 = 4;
int alarminput5 = 5;
int alarminput6 = 6;
int alarminput7 = 7;
int alarminput8 = 8;
int alarminput9 = 9;
void setup()
{
// start Serial port at 9600 bps
Serial.begin(9600);
pinMode(alarminput0, INPUT);// ALARM INPUT 0
pinMode(alarminput1, INPUT);// ALARM INPUT 1
pinMode(alarminput2, INPUT);// ALARM INPUT 2
pinMode(alarminput3, INPUT);// ALARM INPUT 3
pinMode(alarminput4, INPUT);// ALARM INPUT 4
pinMode(alarminput5, INPUT);// ALARM INPUT 5
pinMode(alarminput6, INPUT);// ALARM INPUT 6
pinMode(alarminput7, INPUT);// ALARM INPUT 7
pinMode(alarminput8, INPUT);// ALARM INPUT 8
pinMode(alarminput9, INPUT);// ALARM INPUT 9
}
void loop()
{
//READ ALL ALARM INPUTS
alarm0byte = digitalRead(alarminput0);
alarm1byte = digitalRead(alarminput1);
alarm2byte = digitalRead(alarminput2);
alarm3byte = digitalRead(alarminput3);
alarm4byte = digitalRead(alarminput4);
alarm5byte = digitalRead(alarminput5);
alarm6byte = digitalRead(alarminput6);
alarm7byte = digitalRead(alarminput7);
alarm8byte = digitalRead(alarminput8);
alarm9byte = digitalRead(alarminput9);
//IF ALARM CONDITION IS HIGH, TRANSFER A LOW TO FAR END TO SHUTDOWN RELAY
if(alarm0byte == HIGH)
{ data0 = LOW;}
else
{ data0 = HIGH;}
if(alarm1byte == HIGH)
{ data1 = LOW;}
else
{ data1 = HIGH;}
if(alarm2byte == HIGH)
{ data2 = LOW;}
else
{ data2 = HIGH;}
if(alarm3byte == HIGH)
{ data3 = LOW;}
else
{ data3 = HIGH;}
if(alarm4byte == HIGH)
{ data4 = LOW;}
else
{ data4 = HIGH;}
if(alarm5byte == HIGH)
{ data5 = LOW;}
else
{ data5 = HIGH;}
if(alarm6byte == HIGH)
{ data6 = LOW;}
else
{ data6 = HIGH;}
if(alarm7byte == HIGH)
{ data7 = LOW;}
else
{ data7 = HIGH;}
if(alarm8byte == HIGH)
{ data8 = LOW;}
else
{ data8 = HIGH;}
if(alarm9byte == HIGH)
{ data9 = LOW;}
else
{ data9 = HIGH;}
{
Serial.write(240); //SYNC char
Serial.write(data0);
}
delay(1);
Serial.write(241); //SYNC char
Serial.write(data1);
delay(1);
Serial.write(242); //SYNC char
Serial.write(data2);
delay(1);
Serial.write(243); //SYNC char
Serial.write(data3);
delay(1);
Serial.write(244); //SYNC char
Serial.write(data4);
delay(1);
Serial.write(245); //SYNC char
Serial.write(data5;
delay(1);
Serial.write(246); //SYNC char
Serial.write(data6);
delay(1);
Serial.write(247); //SYNC char
Serial.write(data7);
delay(1);
Serial.write(248); //SYNC char
Serial.write(data8);
delay(1);
Serial.write(249); //SYNC char
Serial.write(data9);
delay(50);
}
Board B
byte incomingByte;
byte alarm0byte;
byte alarm1byte;
byte alarm2byte;
byte alarm3byte;
byte alarm4byte;
byte alarm5byte;
byte alarm6byte;
byte alarm7byte;
byte alarm8byte;
byte alarm9byte;
int alarmoutput0 = A5;
int alarmoutput1 = A4;
int alarmoutput2 = 2;
int alarmoutput3 = 3;
int alarmoutput4 = 4;
int alarmoutput5 = 5;
int alarmoutput6 = 6;
int alarmoutput7 = 7;
int alarmoutput8 = 8;
int alarmoutput9 = 9;
void setup()
{
// start Serial port at 9600 bps
Serial.begin(9600);
pinMode(alarmoutput0, OUTPUT);// ALARM OUTPUT 0
pinMode(alarmoutput1, OUTPUT);// ALARM OUTPUT 1
pinMode(alarmoutput2, OUTPUT);// ALARM OUTPUT 2
pinMode(alarmoutput3, OUTPUT);// ALARM OUTPUT 3
pinMode(alarmoutput4, OUTPUT);// ALARM OUTPUT 4
pinMode(alarmoutput5, OUTPUT);// ALARM OUTPUT 5
pinMode(alarmoutput6, OUTPUT);// ALARM OUTPUT 6
pinMode(alarmoutput7, OUTPUT);// ALARM OUTPUT 7
pinMode(alarmoutput8, OUTPUT);// ALARM OUTPUT 8
pinMode(alarmoutput9, OUTPUT);// ALARM OUTPUT 9
}
void loop ()
{
if (Serial.available()) { // are there any bytes available on the serial port ???
// assign bytes to the var ‘incomingByte’
incomingByte = Serial.read();
if ((byte(incomingByte) == 240)) {
alarm0byte = Serial.read();
digitalWrite(alarmoutput0, alarm0byte);
delay(1);
}
if ((byte(incomingByte) == 241)) {
alarm1byte = Serial.read();
digitalWrite(alarmoutput1, alarm1byte);
delay(1);
}
if ((byte(incomingByte) == 242)) {
alarm2byte = Serial.read();
digitalWrite(alarmoutput2, alarm2byte);
delay(1);
}
if ((byte(incomingByte) == 243)) {
alarm3byte = Serial.read();
digitalWrite(alarmoutput3, alarm4byte);
delay(1);
}
if ((byte(incomingByte) == 244)) {
alarm4byte = Serial.read();
digitalWrite(alarmoutput4, alarm4byte);
delay(1);
}
if ((byte(incomingByte) == 245)) {
alarm5byte = Serial.read();
digitalWrite(alarmoutput5, alarm5byte);
delay(1);}
}
if ((byte(incomingByte) == 246)) {
alarm0byte = Serial.read();
digitalWrite(alarmoutput6, alarm6byte);
delay(1);
}
if ((byte(incomingByte) == 247)) {
alarm0byte = Serial.read();
digitalWrite(alarmoutput7, alarm7byte);
delay(1);
}
if ((byte(incomingByte) == 248)) {
alarm8byte = Serial.read();
digitalWrite(alarmoutput8, alarm8byte);
delay(1);
}
if ((byte(incomingByte) == 249)) {
alarm0byte = Serial.read();
digitalWrite(alarmoutput9, alarm9byte);
delay(1);
}
else // NO DATA SET PORTS LOW
{
digitalWrite(alarmoutput0, LOW);
delay(1);
digitalWrite(alarmoutput1, LOW);
delay(1);
digitalWrite(alarmoutput2, LOW);
delay(1);
digitalWrite(alarmoutput3, LOW);
delay(1);
digitalWrite(alarmoutput4, LOW);
delay(1);
digitalWrite(alarmoutput5, LOW);
delay(1);
digitalWrite(alarmoutput6, LOW);
delay(1);
digitalWrite(alarmoutput7, LOW);
delay(1);
digitalWrite(alarmoutput8, LOW);
delay(1);
digitalWrite(alarmoutput9, LOW);
delay(1);
}//NO DATA RECIVED ELSE END
}