Pages: [1]   Go Down
Author Topic: Duda con programacion  (Read 768 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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(smiley-cool==0)){
    playing05=1;
    Serial.print(0x90, BYTE);
    Serial.print(55, BYTE);
    Serial.print(0x00, BYTE);
  }
    if (playing05 & (digitalRead(smiley-cool==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.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

alguien por ahí? por favor :S
Logged

Albacete
Offline Offline
Full Member
***
Karma: 0
Posts: 140
Arduino mola que te pasas
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Albacete
Offline Offline
Full Member
***
Karma: 0
Posts: 140
Arduino mola que te pasas
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Albacete
Offline Offline
Full Member
***
Karma: 0
Posts: 140
Arduino mola que te pasas
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Pages: [1]   Go Up
Jump to: