Duda con programacion

Hola amigos.

Estoy construyendo a partir de ceros y unos logicos notacion midi (note on y noteoff)

y con la siguiente programacion me ha funcionado bien, cero problema.

boolean playing01=0;

void setup() {
Serial.begin(31250);
pinMode(4, INPUT);
}
void loop() {
if (!playing01 &(digitalRead(4)==0)){
playing01=1;
Serial.print(0x90, BYTE);
Serial.print(48, BYTE);
Serial.print(0x00, BYTE);
}
if (playing01 & (digitalRead(4)==1)){
playing01=0;
Serial.print(0x90, BYTE);
Serial.print(48, BYTE);
Serial.print(90, BYTE);
}
}

El problema esta cuando quiero agregar mas entradas, la anterior esta en el pin4, y lo que quiero ahora es que me funcionen las entradas desde la 4 a la 11 y hago lo siguiente:

boolean playing01=0;
boolean playing02=0;
boolean playing03=0;
boolean playing04=0;
boolean playing05=0;
boolean playing06=0;
boolean playing07=0;
boolean playing08=0;

void setup() {
Serial.begin(31250);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);
pinMode(10, INPUT);
pinMode(11, INPUT);
}
void loop() {
if (!playing01 &(digitalRead(4)==0)){
playing01=1;
Serial.print(0x90, BYTE);
Serial.print(48, BYTE);
Serial.print(0x00, BYTE);
}
if (playing01 & (digitalRead(4)==1)){
playing01=0;
Serial.print(0x90, BYTE);
Serial.print(48, BYTE);
Serial.print(90, BYTE);
}
if (!playing02 &(digitalRead(5)==0)){
playing02=1;
Serial.print(0x90, BYTE);
Serial.print(50, BYTE);
Serial.print(0x00, BYTE);
}
if (playing02 & (digitalRead(5)==1)){
playing02=0;
Serial.print(0x90, BYTE);
Serial.print(50, BYTE);
Serial.print(90, BYTE);
}
if (!playing03 &(digitalRead(6)==0)){
playing03=1;
Serial.print(0x90, BYTE);
Serial.print(52, BYTE);
Serial.print(0x00, BYTE);
}
if (playing03 & (digitalRead(6)==1)){
playing03=0;
Serial.print(0x90, BYTE);
Serial.print(52, BYTE);
Serial.print(90, BYTE);
}
if (!playing04 &(digitalRead(7)==0)){
playing04=1;
Serial.print(0x90, BYTE);
Serial.print(53, BYTE);
Serial.print(0x00, BYTE);
}
if (playing04 & (digitalRead(7)==1)){
playing04=0;
Serial.print(0x90, BYTE);
Serial.print(53, BYTE);
Serial.print(90, BYTE);
}
if (!playing05 &(digitalRead(8)==0)){
playing05=1;
Serial.print(0x90, BYTE);
Serial.print(55, BYTE);
Serial.print(0x00, BYTE);
}
if (playing05 & (digitalRead(8)==1)){
playing05=0;
Serial.print(0x90, BYTE);
Serial.print(55, BYTE);
Serial.print(90, BYTE);
}
if (!playing06 &(digitalRead(9)==0)){
playing06=1;
Serial.print(0x90, BYTE);
Serial.print(57, BYTE);
Serial.print(0x00, BYTE);
}
if (playing06 & (digitalRead(9)==1)){
playing06=0;
Serial.print(0x90, BYTE);
Serial.print(57, BYTE);
Serial.print(90, BYTE);
}
if (!playing07 &(digitalRead(10)==0)){
playing07=1;
Serial.print(0x90, BYTE);
Serial.print(59, BYTE);
Serial.print(0x00, BYTE);
}
if (playing07 & (digitalRead(10)==1)){
playing07=0;
Serial.print(0x90, BYTE);
Serial.print(59, BYTE);
Serial.print(90, BYTE);
}
if (!playing08 &(digitalRead(11)==0)){
playing08=1;
Serial.print(0x90, BYTE);
Serial.print(60, BYTE);
Serial.print(0x00, BYTE);
}
if (playing08 & (digitalRead(11)==1)){
playing08=0;
Serial.print(0x90, BYTE);
Serial.print(60, BYTE);
Serial.print(90, BYTE);
}
}

Me pregunto cual será el error que estoy cometiendo. porque no me funciona.
Estaré bastante agradecido, ya que esto me tiene realmente desesperado.

alguien por ahí? por favor :S

Cuando dices que no te funciona, ¿A que te refieres exactamente? Seria de ayuda si dijeras que es lo que haces, que es lo que esperas que haga, y que es lo que hace el programa.

Hola Pofenas, muchas gracias por responder.

Lo que ocurre es que s2midi es como si se volviera loco, porque me salen empieza a mostrar cientos de noteon y noteoff de las notas que he programado, una tras otra, como si le llegaran cientos de mensajes y cuando le pongo stop hace un crash y tengo que cerrarlo con el administrador de tareas.

hay veces que incluso me muestra notas y velocidades que no he programado.

Alguna idea? Muchas gracias.

No conozco S2midi, pero creo que te puede estar ocurriendo que escribes demasiado deprisa en el Serial. Prueba a poner un delay(100) detras de cada serie de Serial.print.

Profenas, agradezco tu ayuda, pero es un instrumento el que estoy creando por lo que debe ejecutarse el noteon y noteoff cuando ejecuto cada nota y ciertamente un delay de 100ms seria demasiado tiempo. muchas gracias.

prueba poniendo && (doble), cuando estas comparando hay que poner doble ==, || ó &&

Sugerirte delay(100) no es una solucion, sino una manera de saber si el problema viene de un desbordamiento del buffer serie. Si tu problema es ese, es decir, si con un delay(100) funcionara correctamente, entonces tendrias que calcular (o usar el metodo de ensayo-error) cual es el delay minimo que permite al sistema funcionar bien. Si ese delay sigue siendo excesivo para tus propositos, tendras que buscar otra solucion, como aumentar el tamaño del buffer, aumentar la velocidad de la transmision serie (que, por cierto, he visto que inicializas a un valor muy extraño). Si con el delay(100) sigue funcionando mal, habria que buscar otras cosas.
Ten en cuenta lo que dice Zacarino de usar &&( aunque puede que te funcione igual), porque lo que estas haciendo al usar & es un AND bit a bit en lugar de una comparación.