#define HWSERIAL Serial1
const int LED_U5 = 20; // I/O pin numbers
const int LED_U9 = 21;
// Switch input location designation
const int SwitchAA = 12;
const int SwitchAB = 11;
const int SwitchAC = 10;
const int SwitchAD = 9;
const int SwitchAE = 8;
const int SwitchAF = 7;
const int SwitchAG = 6;
const int SwitchAH = 5;
byte ALowOutput;
byte AHighOutput;
const int SwitchBA = 30;
const int SwitchBB = 29;
const int SwitchBC = 28;
const int SwitchBD = 27;
const int SwitchBE = 26;
const int SwitchBF = 25;
const int SwitchBG = 24;
const int SwitchBH = 23;
byte BLowOutput;
byte BHighOutput;
const int SwitchCA = 39;
const int SwitchCB = 40;
const int SwitchCC = 41;
const int SwitchCD = 42;
const int SwitchCE = 43;
const int SwitchCF = 44;
const int SwitchCG = 45;
const int SwitchCH = 46;
byte CLowOutput;
byte CHighOutput;
const int SwitchDA = 31;
const int SwitchDB = 32;
const int SwitchDC = 33;
const int SwitchDD = 34;
const int SwitchDE = 35;
const int SwitchDF = 36;
const int SwitchDG = 37;
const int SwitchDH = 38;
byte DLowOutput;
byte DHighOutput;
const int SwitchEA = 13;
const int SwitchEB = 14;
const int SwitchEC = 15;
const int SwitchED = 16;
const int SwitchEE = 17;
const int SwitchEF = 18;
const int SwitchEG = 19;
const int SwitchEH = 20;
byte ELowOutput;
byte EHighOutput;
bool speedTestToggle = false;
//Byte address location loaded into top half of byte
const byte MessageHeader[10] = {0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0xA0};
void setup()
{
//Serial.begin(57600);
HWSERIAL.begin(57600);
HWSERIAL.transmitterEnable(2);
delay(50);
pinMode(LED_U5, OUTPUT);
digitalWrite(LED_U5, 0);
delay(50);
pinMode(SwitchAA, INPUT_PULLUP);
pinMode(SwitchAB, INPUT_PULLUP);
pinMode(SwitchAC, INPUT_PULLUP);
pinMode(SwitchAD, INPUT_PULLUP);
pinMode(SwitchAE, INPUT_PULLUP);
pinMode(SwitchAF, INPUT_PULLUP);
pinMode(SwitchAG, INPUT_PULLUP);
pinMode(SwitchAH, INPUT_PULLUP);
delay(50);
pinMode(SwitchBA, INPUT_PULLUP);
pinMode(SwitchBB, INPUT_PULLUP);
pinMode(SwitchBC, INPUT_PULLUP);
pinMode(SwitchBD, INPUT_PULLUP);
pinMode(SwitchBE, INPUT_PULLUP);
pinMode(SwitchBF, INPUT_PULLUP);
pinMode(SwitchBG, INPUT_PULLUP);
pinMode(SwitchBH, INPUT_PULLUP);
delay(50);
pinMode(SwitchCA, INPUT_PULLUP);
pinMode(SwitchCB, INPUT_PULLUP);
pinMode(SwitchCC, INPUT_PULLUP);
pinMode(SwitchCD, INPUT_PULLUP);
pinMode(SwitchCE, INPUT_PULLUP);
pinMode(SwitchCF, INPUT_PULLUP);
pinMode(SwitchCG, INPUT_PULLUP);
pinMode(SwitchCH, INPUT_PULLUP);
delay(50);
pinMode(SwitchDA, INPUT_PULLUP);
pinMode(SwitchDB, INPUT_PULLUP);
pinMode(SwitchDC, INPUT_PULLUP);
pinMode(SwitchDD, INPUT_PULLUP);
pinMode(SwitchDE, INPUT_PULLUP);
pinMode(SwitchDF, INPUT_PULLUP);
pinMode(SwitchDG, INPUT_PULLUP);
pinMode(SwitchDH, INPUT_PULLUP);
delay(50);
pinMode(SwitchEA, INPUT_PULLUP);
pinMode(SwitchEB, INPUT_PULLUP);
pinMode(SwitchEC, INPUT_PULLUP);
pinMode(SwitchED, INPUT_PULLUP);
pinMode(SwitchEE, INPUT_PULLUP);
pinMode(SwitchEF, INPUT_PULLUP);
pinMode(SwitchEG, INPUT_PULLUP);
pinMode(SwitchEH, INPUT_PULLUP);
delay(50);
int temploop;
pinMode(LED_U9, OUTPUT);
digitalWrite(LED_U9, 1);
for (temploop = 0 ; temploop < 95 ; temploop ++)
{
delay(300);
digitalWrite(LED_U9, temploop % 2);
}
delay(300);
digitalWrite(LED_U9, 1);
}
// The status of the toggle switches is loaded into the bottom half out the communication bytes. The bytes are sent over serial right away.
void loop()
{
ALowOutput = !digitalRead(SwitchAA) | (!digitalRead(SwitchAB) << 1) | (!digitalRead(SwitchAC) << 2) | (!digitalRead(SwitchAD) << 3) | MessageHeader[0];
AHighOutput = !digitalRead(SwitchAE) | (!digitalRead(SwitchAF) << 1) | (!digitalRead(SwitchAG) << 2) | (!digitalRead(SwitchAH) << 3) | MessageHeader[1];
BLowOutput = !digitalRead(SwitchBA) | (!digitalRead(SwitchBB) << 1) | (!digitalRead(SwitchBC) << 2) | (!digitalRead(SwitchBD) << 3) | MessageHeader[2];
BHighOutput = !digitalRead(SwitchBE) | (!digitalRead(SwitchBF) << 1) | (!digitalRead(SwitchBG) << 2) | (!digitalRead(SwitchBH) << 3) | MessageHeader[3];
HWSERIAL.write(ALowOutput);
HWSERIAL.write(AHighOutput);
HWSERIAL.write(BLowOutput);
HWSERIAL.write(BHighOutput);
delay(18);
CLowOutput = !digitalRead(SwitchCA) | (!digitalRead(SwitchCB) << 1) | (!digitalRead(SwitchCC) << 2) | (!digitalRead(SwitchCD) << 3) | MessageHeader[4];
CHighOutput = !digitalRead(SwitchCE) | (!digitalRead(SwitchCF) << 1) | (!digitalRead(SwitchCG) << 2) | (!digitalRead(SwitchCH) << 3) | MessageHeader[5];
HWSERIAL.write(0x00);
HWSERIAL.write(0x00);
HWSERIAL.write(CLowOutput);
HWSERIAL.write(CHighOutput);
delay(18);
DLowOutput = !digitalRead(SwitchDA) | (!digitalRead(SwitchDB) << 1) | (!digitalRead(SwitchDC) << 2) | (!digitalRead(SwitchDD) << 3) | MessageHeader[6];
DHighOutput = !digitalRead(SwitchDE) | (!digitalRead(SwitchDF) << 1) | (!digitalRead(SwitchDG) << 2) | (!digitalRead(SwitchDH) << 3) | MessageHeader[7];
ELowOutput = !digitalRead(SwitchEA) | (!digitalRead(SwitchEB) << 1) | (!digitalRead(SwitchEC) << 2) | (!digitalRead(SwitchED) << 3) | MessageHeader[8];
EHighOutput = !digitalRead(SwitchEE) | (!digitalRead(SwitchEF) << 1) | (!digitalRead(SwitchEG) << 2) | (!digitalRead(SwitchEH) << 3) | MessageHeader[9];
HWSERIAL.write(DLowOutput);
HWSERIAL.write(DHighOutput);
HWSERIAL.write(ELowOutput);
HWSERIAL.write(EHighOutput);
delay(18);
}