TomGeorge:
Hi,
Have you got code for just one array of 8 relays/solenoids and see if they are stable.
Did you develop this code all at once or in stages, get them working then combine.
Can you please post a copy of your sketch, using code tags?
They are made with the </> icon in the reply Menu.
See section 7 http://forum.arduino.cc/index.php/topic,148850.0.html
Tom.... 
Hi TomGeorge,
We already tried developing the code in stages. As requested, here's our code.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
const int CAPTURE_CMD = 1;
const int PREVIOUS_CMD = 2;
const int NEXT_CMD = 3;
const String ERROR_CODE = "#*0#*0#*";
const int captBtnPin = 9, prevBtnPin = 12, nxtBtnPin = 13;
const int buzzerPin = 8;
const int ledStripPin = 7;
const int ir1Pin = 2, ir2Pin = 3;
boolean isConvert = true;
String receivedString = "";
String stopReceiving = "|";
int index = 0;
int prevBtnRead, prevBtnPrev = LOW;
int nxtBtnRead, nxtBtnPrev = LOW;
int captBtnRead, captBtnPrev = LOW;
int ir1Read = LOW, ir2Read = LOW;
long time = 0, debounce = 200;
void setup() {
Serial.begin(9600);
Serial.println("Serial Ready");
mySerial.begin(9600);
pinMode(buzzerPin, OUTPUT);
pinMode(ledStripPin, OUTPUT);
pinMode(prevBtnPin, INPUT);
pinMode(nxtBtnPin, INPUT);
pinMode(captBtnPin, INPUT);
pinMode(ir1Pin, INPUT);
pinMode(ir2Pin, INPUT);
for(int i = 22; i <= 51; i++){
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
}
}
void loop() {
// ----------------------------- IR -----------------------------------------
ir1Read = digitalRead(ir1Pin);
ir2Read = digitalRead(ir2Pin);
if (ir1Read == LOW && ir2Read == LOW)
digitalWrite (ledStripPin, HIGH);
else
digitalWrite (ledStripPin, LOW);
// --------------------- NAVIGATION BUTTONS -------------------------------
prevBtnRead = digitalRead(prevBtnPin);
nxtBtnRead = digitalRead(nxtBtnPin);
captBtnRead = digitalRead(captBtnPin);
if (captBtnRead == HIGH && captBtnPrev == LOW && millis() - time > debounce) {
buttonPress(CAPTURE_CMD);
time = millis();
}
if (prevBtnRead == HIGH && prevBtnPrev == LOW && millis() - time > debounce) {
buttonPress(PREVIOUS_CMD);
time = millis();
}
if (nxtBtnRead == HIGH && nxtBtnPrev == LOW && millis() - time > debounce) {
buttonPress(NEXT_CMD);
time = millis();
}
captBtnPrev = captBtnRead;
prevBtnPrev = prevBtnRead;
nxtBtnPrev = nxtBtnRead;
// ------------ RECEIVED DATA FROM BT MODULE -------------------------
while (mySerial.available()) {
delay(100);
receivedString = mySerial.readString();
Serial.println(receivedString);
if(receivedString.charAt(0) != '|'){
Serial.println("extra character received");
}
else{
receivedString = receivedString.substring(1,receivedString.length()-1);
convertText();
}
}
// ----------- RECEIVE DATA FROM SERIAL MONITOR ---------------------
while (Serial.available()) {
delay(100);
String temp = Serial.readString();
Serial.println(temp);
if(temp.equals("n"))
buttonPress(NEXT_CMD);
else if(temp.equals("p"))
buttonPress(PREVIOUS_CMD);
}
}
void buttonPress(int button){
switch(button){
case CAPTURE_CMD:
Serial.println("Capture button pressed");
tone(buzzerPin, 1000, 200);
delay(200);
tone(buzzerPin, 1000, 200);
mySerial.write("CAPTURE");
break;
case PREVIOUS_CMD:
Serial.println("Previous button pressed");
tone(buzzerPin, 1000, 200);
mySerial.write("PREVIOUS");
break;
case NEXT_CMD:
Serial.println("Next button pressed");
tone(buzzerPin, 1000, 200);
mySerial.write("NEXT");
break;
}
}
void convertText(){
String completeBinary = "";
Serial.println();
for(int i = 0; i < 5 && i < receivedString.length(); i++){
completeBinary += charToBin(receivedString.charAt(i));
}
Serial.println();
Serial.println(completeBinary);
int a = completeBinary.length();
while(a < 30){
completeBinary += "0";
a++;
}
int x = 0;
for(int i = 0; i < 30; i++){
int y = completeBinary.charAt(i) - '0'; // convert character to int
if(y > 0)
digitalWrite(i+22, HIGH);
else if(y == 0)
digitalWrite(i+22, LOW);
}
}
String charToBin(char charToConvert){
switch(charToConvert){
case 'a':
case 'A':
case '1':
return "100000";
break;
case 'b':
case 'B':
case '2':
return "110000";
break;
case 'c':
case 'C':
case '3':
return "100100";
break;
case 'd':
case 'D':
case '4':
return "100110";
break;
case 'e':
case 'E':
case '5':
return "100010";
break;
case 'f':
case 'F':
case '6':
return "110100";
break;
case 'g':
case 'G':
case '7':
return "110110";
break;
case 'h':
case 'H':
case '8':
return "110010";
break;
case 'i':
case 'I':
case '9':
return "010100";
break;
case 'j':
case 'J':
case '0':
return "010110";
break;
case 'k':
case 'K':
return "101000";
break;
case 'l':
case 'L':
return "111000";
break;
case 'm':
case 'M':
return "101100";
break;
case 'n':
case 'N':
return "101110";
break;
case 'o':
case 'O':
return "101010";
break;
case 'p':
case 'P':
return "111100";
break;
case 'q':
case 'Q':
return "111110";
break;
case 'r':
case 'R':
return "111010";
break;
case 's':
case 'S':
return "011100";
break;
case 't':
case 'T':
return "011110";
break;
case 'u':
case 'U':
return "101001";
break;
case 'v':
case 'V':
return "111001";
break;
case 'w':
case 'W':
return "010111";
break;
case 'x':
case 'X':
return "101101";
break;
case 'y':
case 'Y':
return "101111";
break;
case 'z':
case 'Z':
return "101011";
break;
case '?':
return "011001";
break;
case '!':
return "011010";
break;
case '\'':
return "001000";
break;
case ',':
return "010000";
break;
case '.':
return "010011";
break;
case '-':
return "100001";
break;
case '#':
return "001111";
break;
case '*':
return "001010";
break;
case ':':
return "010010";
break;
case ';':
return "011000";
break;
case '/':
return "001100";
break;
default:
return "000000";
break;
}
}
Thank you!