Thank you for your reply.
I don't know what you mean about using a bool and the hexData variable. I am using an integer for the index and it is a char datatype.
Thank you for your second suggestion, I forgot that chars can be manipulated like integers in C using their ASCII codes. I thought there may be a better way to do it but I couldn't remember what it was.
Here is the full program with a the modification you suggested.
void writeEEPROM(bool A15A, bool A14A, bool A13A, bool A12A, bool A11A, bool A10A, bool A9A, bool A8A, bool A7A, bool A6A, bool A5A, bool A4A, bool A3A, bool A2A, bool A1A, bool A0A, bool Q7A, bool Q6A, bool Q5A, bool Q4A, bool Q3A, bool Q2A, bool Q1A, bool Q0A) {
digitalWrite(41, true);
delay(150);
bool Q0S;
bool Q1S;
bool Q2S;
bool Q3S;
bool Q4S;
bool Q5S;
bool Q6S;
bool Q7S;
digitalWrite(22, A0A);
digitalWrite(24, A1A);
digitalWrite(26, A2A);
digitalWrite(28, A3A);
digitalWrite(30, A4A);
digitalWrite(32, A5A);
digitalWrite(34, A6A);
digitalWrite(36, A7A);
digitalWrite(23, A8A);
digitalWrite(25, A9A);
digitalWrite(27, A10A);
digitalWrite(29, A11A);
digitalWrite(31, A12A);
digitalWrite(33, A13A);
digitalWrite(35, A14A);
digitalWrite(37, A15A);
digitalWrite(38, Q0A);
digitalWrite(40, Q1A);
digitalWrite(42, Q2A);
digitalWrite(44, Q3A);
digitalWrite(46, Q4A);
digitalWrite(48, Q5A);
digitalWrite(50, Q6A);
digitalWrite(52, Q7A);
digitalWrite(41, true);
delay(150);
digitalWrite(41, false);
delay(150);
digitalWrite(41, true);
delay(150);
}
void setup() {
//Initialise all variables
bool binaryData[8];
bool binaryAddress[16];
char hexData[2];
int byteCount=0;
int letterCount=0;
int programSize=0;
int loopOut=0;
//Intitialise the IO pins
pinMode(13, OUTPUT);
pinMode(22, OUTPUT);
pinMode(23, OUTPUT);
pinMode(24, OUTPUT);
pinMode(25, OUTPUT);
pinMode(26, OUTPUT);
pinMode(27, OUTPUT);
pinMode(28, OUTPUT);
pinMode(29, OUTPUT);
pinMode(30, OUTPUT);
pinMode(31, OUTPUT);
pinMode(32, OUTPUT);
pinMode(33, OUTPUT);
pinMode(34, OUTPUT);
pinMode(35, OUTPUT);
pinMode(36, OUTPUT);
pinMode(37, OUTPUT);
pinMode(38, OUTPUT);
pinMode(39, OUTPUT);
pinMode(40, OUTPUT);
pinMode(41, OUTPUT);
pinMode(42, OUTPUT);
pinMode(44, OUTPUT);
pinMode(46, OUTPUT);
pinMode(48, OUTPUT);
pinMode(50, OUTPUT);
pinMode(52, OUTPUT);
Serial.begin(9600);
while(!Serial){}
Serial.setTimeout(100000);
Serial.println("Enter number of bytes input:");
programSize = Serial.parseInt();
Serial.println("Enter data to be written to the EEPROM");
for (byteCount = 0;byteCount<programSize;byteCount++){
Serial.println("Flashing");
hexData[0] = 'v';
hexData[1] = 'v';
while ((hexData[0] < '0' || hexData[0] > '9') && (hexData[0] < 'A' || hexData[0] > 'F')){
if (Serial.available() >= 1){
hexData[0] = char(Serial.read());
Serial.print(hexData[0]);
}
}
while ((hexData[1] < '0' || hexData[1] > '9') && (hexData[1] < 'A' || hexData[1] > 'F')){
if (Serial.available() >= 1){
hexData[1] = char(Serial.read());
Serial.print(hexData[1]);
}
}
Serial.println(" Data entered");
Serial.print(hexData[0]);
Serial.println(hexData[1]);
//Converts from hex to binary
for(letterCount=0; letterCount<2; letterCount++){
switch (hexData[letterCount]){
case '0':
binaryData[0+(4*letterCount)] = 0;
binaryData[1+(4*letterCount)] = 0;
binaryData[2+(4*letterCount)] = 0;
binaryData[3+(4*letterCount)] = 0;
break;
case '1':
binaryData[0+(4*letterCount)] = 0;
binaryData[1+(4*letterCount)] = 0;
binaryData[2+(4*letterCount)] = 0;
binaryData[3+(4*letterCount)] = 1;
break;
case '2':
binaryData[0+(4*letterCount)] = 0;
binaryData[1+(4*letterCount)] = 0;
binaryData[2+(4*letterCount)] = 1;
binaryData[3+(4*letterCount)] = 0;
break;
case '3':
binaryData[0+(4*letterCount)] = 0;
binaryData[1+(4*letterCount)] = 0;
binaryData[2+(4*letterCount)] = 1;
binaryData[3+(4*letterCount)] = 1;
break;
case '4':
binaryData[0+(4*letterCount)] = 0;
binaryData[1+(4*letterCount)] = 1;
binaryData[2+(4*letterCount)] = 0;
binaryData[3+(4*letterCount)] = 0;
break;
case '5':
binaryData[0+(4*letterCount)] = 0;
binaryData[1+(4*letterCount)] = 1;
binaryData[2+(4*letterCount)] = 0;
binaryData[3+(4*letterCount)] = 1;
break;
case '6':
binaryData[0+(4*letterCount)] = 0;
binaryData[1+(4*letterCount)] = 1;
binaryData[2+(4*letterCount)] = 1;
binaryData[3+(4*letterCount)] = 0;
break;
case '7':
binaryData[0+(4*letterCount)] = 0;
binaryData[1+(4*letterCount)] = 1;
binaryData[2+(4*letterCount)] = 1;
binaryData[3+(4*letterCount)] = 1;
break;
case '8':
binaryData[0+(4*letterCount)] = 1;
binaryData[1+(4*letterCount)] = 0;
binaryData[2+(4*letterCount)] = 0;
binaryData[3+(4*letterCount)] = 0;
break;
case '9':
binaryData[0+(4*letterCount)] = 1;
binaryData[1+(4*letterCount)] = 0;
binaryData[2+(4*letterCount)] = 0;
binaryData[3+(4*letterCount)] = 1;
break;
case 'A':
binaryData[0+(4*letterCount)] = 1;
binaryData[1+(4*letterCount)] = 0;
binaryData[2+(4*letterCount)] = 1;
binaryData[3+(4*letterCount)] = 0;
break;
case 'B':
binaryData[0+(4*letterCount)] = 1;
binaryData[1+(4*letterCount)] = 0;
binaryData[2+(4*letterCount)] = 1;
binaryData[3+(4*letterCount)] = 1;
break;
case 'C':
binaryData[0+(4*letterCount)] = 1;
binaryData[1+(4*letterCount)] = 1;
binaryData[2+(4*letterCount)] = 0;
binaryData[3+(4*letterCount)] = 0;
break;
case 'D':
binaryData[0+(4*letterCount)] = 1;
binaryData[1+(4*letterCount)] = 1;
binaryData[2+(4*letterCount)] = 0;
binaryData[3+(4*letterCount)] = 1;
break;
case 'E':
binaryData[0+(4*letterCount)] = 1;
binaryData[1+(4*letterCount)] = 1;
binaryData[2+(4*letterCount)] = 1;
binaryData[3+(4*letterCount)] = 0;
break;
case 'F':
binaryData[0+(4*letterCount)] = 1;
binaryData[1+(4*letterCount)] = 1;
binaryData[2+(4*letterCount)] = 1;
binaryData[3+(4*letterCount)] = 1;
break;
default:
Serial.println("Invalid data.");
}
}
for(byteCount=0;byteCount<=programSize;byteCount++){
binaryAddress[0]=bitRead(byteCount,15);
binaryAddress[1]=bitRead(byteCount,14);
binaryAddress[2]=bitRead(byteCount,13);
binaryAddress[3]=bitRead(byteCount,12);
binaryAddress[4]=bitRead(byteCount,11);
binaryAddress[5]=bitRead(byteCount,10);
binaryAddress[6]=bitRead(byteCount,9);
binaryAddress[7]=bitRead(byteCount,8);
binaryAddress[8]=bitRead(byteCount,7);
binaryAddress[9]=bitRead(byteCount,6);
binaryAddress[10]=bitRead(byteCount,5);
binaryAddress[11]=bitRead(byteCount,4);
binaryAddress[12]=bitRead(byteCount,3);
binaryAddress[13]=bitRead(byteCount,2);
binaryAddress[14]=bitRead(byteCount,1);
binaryAddress[15]=bitRead(byteCount,0);
writeEEPROM(binaryAddress[0], binaryAddress[1], binaryAddress[2],binaryAddress[3],binaryAddress[4],binaryAddress[5],binaryAddress[6],binaryAddress[7],binaryAddress[8],binaryAddress[9],binaryAddress[10],binaryAddress[11],binaryAddress[12],binaryAddress[13],binaryAddress[14],binaryAddress[15],binaryData[0],binaryData[1],binaryData[2],binaryData[3],binaryData[4],binaryData[5],binaryData[6],binaryData[7]);
}
}
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println("End Of Program");
delay(5000);
}