viernes, 3 de diciembre de 2010

Programa en arduino

El siguiente es el programa que creamos para nuestro Arduino y que permitira tocas la guitarra:
/*x es para las fotoresistencias*/
int x1=0;
int x2=1;
int x3=2;
int x4=3;
int x5=4;
/*y es para las cuerdas fisicas*/
int y1=5;
int y2=6;
int y3=7;
int y4=8;
int y5=9;
/*z es para encender y apagar lasers*/
int z=10;
/*s es para el sonar*/
int s=0;
int temp=0;
unsigned int retardo=0; 

void setup() {
  Serial.begin(115200);
  pinMode (x1,INPUT);
  pinMode (x2,INPUT);
  pinMode (x3,INPUT);
  pinMode (x4,INPUT);
  pinMode (x5,INPUT);
  pinMode (y1,INPUT);
  pinMode (y2,INPUT);
  pinMode (y3,INPUT);
  pinMode (y4,INPUT);
  pinMode (y5,INPUT);
  pinMode (z,OUTPUT);
}
void loop() {
  /*La variable temp va a llamar a la funcion sonar*/
  temp=sonar();

  /*Si el sonar da los datos que estan en el rango hace todo lo que esta adentro*/
  if (temp<24 && temp>10){ /*revisar cuerda y sonar*/
    /*Es para encender y apagar lasers*/
    digitalWrite(z, HIGH); retardo=0;
    //delay(500);
    //digitalWrite(z, LOW);
    //delay(500);
    /*leyendo fotoresistencia*/
    x1=digitalRead(0);
    x2=digitalRead(1);
    x3=digitalRead(2);
    x4=digitalRead(3);
    x5=digitalRead(4);
    /*leyendo cuerda fisica*/
    y1=digitalRead(5);
    y2=digitalRead(6);
    y3=digitalRead(7);
    y4=digitalRead(8);
    y5=digitalRead(9);

    /*Hacer un and de la fotoresistencia con la cuerda fisica para saber cual es la cuerda que estas tocando*/
    if (x1==1 && y1==1){ /*Notas de la cuerda 6 dependiendo del sonar*/
      if (temp==11){
        noteOn(0x90,41,63); /*Nota en el traste 1*/
        delay(250);
      }
      else if (temp==12){
        noteOn(0x90,42,63); /*Nota en el traste 2*/
        delay(250);
      }
      else if (temp==13){
        noteOn(0x90,43,63); /*Nota en el traste 3*/
        delay(250);
      }
      else if (temp==14){
        noteOn(0x90,44,63); /*Nota en el traste 4*/
        delay(250);
      }
      else if (temp==15){
        noteOn(0x90,45,63); /*Nota en el traste 5*/
        delay(250);
      }
      else if (temp==16){
        noteOn(0x90,46,63); /*Nota en el traste 6*/
        delay(250);
      }
      else if (temp==17){
        noteOn(0x90,47,63); /*Nota en el traste 7*/
        delay(250);
      }
      else if (temp==18){
        noteOn(0x90,48,63); /*Nota en el traste 8*/
        delay(250);
      }
      else if (temp==19){
        noteOn(0x90,49,63); /*Nota en el traste 9*/
        delay(250);
      }
      else if (temp==20){
        noteOn(0x90,50,63); /*Nota en el traste 10*/
        delay(250);
      }
      else if (temp==21){
        noteOn(0x90,51,63); /*Nota en el traste 11*/
        delay(250);
      }
      else if (temp==22){
        noteOn(0x90,52,63); /*Nota en el traste 2*/
        delay(250);
      }
    }
    else if (x2==1 && y2==1){ /*Notas de la cuerda 5 dependiendo del sonar*/
      if (temp==11){
        noteOn(0x90,46,63); /*Nota en el traste 1*/
        delay(250);
      }
      else if (temp==12){
        noteOn(0x90,47,63); /*Nota en el traste 2*/
        delay(250);
      }
      else if (temp==13){
        noteOn(0x90,48,63); /*Nota en el traste 3*/
        delay(250);
      }
      else if (temp==14){
        noteOn(0x90,49,63); /*Nota en el traste 4*/
        delay(250);
      }
      else if (temp==15){
        noteOn(0x90,50,63); /*Nota en el traste 5*/
        delay(250);
      }
      else if (temp==16){
        noteOn(0x90,51,63); /*Nota en el traste 6*/
        delay(250);
      }
      else if (temp==17){
        noteOn(0x90,52,63); /*Nota en el traste 7*/
        delay(250);
      }
      else if (temp==18){
        noteOn(0x90,53,63); /*Nota en el traste 8*/
        delay(250);
      }
      else if (temp==19){
        noteOn(0x90,54,63); /*Nota en el traste 9*/
        delay(250);
      }
      else if (temp==20){
        noteOn(0x90,55,63); /*Nota en el traste 10*/
        delay(250);
      }
      else if (temp==21){
        noteOn(0x90,56,63); /*Nota en el traste 11*/
        delay(250);
      }
      else if (temp==22){
        noteOn(0x90,57,63); /*Nota en el traste 12*/
        delay(250);
      }
    }
    else if (x3==1 && y3==1){ /*Notas de la cuerda 4 dependiendo del sonar*/
      if (temp==11){
        noteOn(0x90,51,63); /*Nota en el traste 1*/
        delay(250);
      }
      else if (temp==12){
        noteOn(0x90,52,63); /*Nota en el traste 2*/
        delay(250);
      }
      else if (temp==13){
        noteOn(0x90,53,63); /*Nota en el traste 3*/
        delay(250);
      }
      else if (temp==14){
        noteOn(0x90,54,63); /*Nota en el traste 4*/
        delay(250);
      }
      else if (temp==15){
        noteOn(0x90,55,63); /*Nota en el traste 5*/
        delay(250);
      }
      else if (temp==16){
        noteOn(0x90,56,63); /*Nota en el traste 6*/
        delay(250);
      }
      else if (temp==17){
        noteOn(0x90,57,63); /*Nota en el traste 7*/
        delay(250);
      }
      else if (temp==18){
        noteOn(0x90,58,63); /*Nota en el traste 8*/
        delay(250);
      }
      else if (temp==19){
        noteOn(0x90,59,63); /*Nota en el traste 9*/
        delay(250);
      }
      else if (temp==20){
        noteOn(0x90,60,63); /*Nota en el traste 10*/
        delay(250);
      }
      else if (temp==21){
        noteOn(0x90,61,63); /*Nota en el traste 11*/
        delay(250);
      }
      else if (temp==22){
        noteOn(0x90,62,63); /*Nota en el traste 12*/
        delay(250);
      }
    }
    else if (x4==1 && y4==1){ /*Notas de la cuerda 3 dependiendo del sonar*/

      if (temp==11){
        noteOn(0x90,56,63); /*Nota en el traste 1*/
        delay(250);
      }
      else if (temp==12){
        noteOn(0x90,57,63); /*Nota en el traste 2*/
        delay(250);
      }
      else if (temp==13){
        noteOn(0x90,58,63); /*Nota en el traste 3*/
        delay(250);
      }
      else if (temp==14){
        noteOn(0x90,59,63); /*Nota en el traste 4*/
        delay(250);
      }
      else if (temp==15){
        noteOn(0x90,60,63); /*Nota en el traste 5*/
        delay(250);
      }
      else if (temp==16){
        noteOn(0x90,61,63); /*Nota en el traste 6*/
        delay(250);
      }
      else if (temp==17){
        noteOn(0x90,62,63); /*Nota en el traste 7*/
        delay(250);
      }
      else if (temp==18){
        noteOn(0x90,63,63); /*Nota en el traste 8*/
        delay(250);
      }
      else if (temp==19){
        noteOn(0x90,64,63); /*Nota en el traste 9*/
        delay(250);
      }
      else if (temp==20){
        noteOn(0x90,65,63); /*Nota en el traste 10*/
        delay(250);
      }
      else if (temp==21){
        noteOn(0x90,66,63); /*Nota en el traste 11*/
        delay(250);
      }
      else if (temp==22){
        noteOn(0x90,67,63); /*Nota en el traste 12*/
        delay(250);
      }
    }
    else if (x5==1 && y5==1){ /*Notas de la cuerda 2 dependiendo del sonar*/
   
   
      if (temp==11){
        noteOn(0x90,60,63); /*Nota en el traste 1*/
        delay(250);
      }
      else if (temp==12){
        noteOn(0x90,61,63); /*Nota en el traste 2*/
        delay(250);
      }
      else if (temp==13){
        noteOn(0x90,62,63); /*Nota en el traste 3*/
        delay(250);
      }
      else if (temp==14){
        noteOn(0x90,63,63); /*Nota en el traste 4*/
        delay(250);
      }
      else if (temp==15){
        noteOn(0x90,64,63); /*Nota en el traste 5*/
        delay(250);
      }
      else if (temp==16){
        noteOn(0x90,65,63); /*Nota en el traste 6*/
        delay(250);
      }
      else if (temp==17){
        noteOn(0x90,66,63); /*Nota en el traste 7*/
        delay(250);
      }
      else if (temp==18){
        noteOn(0x90,67,63); /*Nota en el traste 8*/
        delay(250);
      }
      else if (temp==19){
        noteOn(0x90,68,63); /*Nota en el traste 9*/
        delay(250);
      }
      else if (temp==20){
        noteOn(0x90,69,63); /*Nota en el traste 10*/
        delay(250);
      }
      else if (temp==21){
        noteOn(0x90,70,63); /*Nota en el traste 11*/
        delay(250);
      }
      else if (temp==22){
        noteOn(0x90,71,63); /*Nota en el traste 12*/
        delay(250);
      }
    }
  }
  else
    delay (100);
  /*Si el rando es mayor al maximo que demos en el sonar entonces permitira entrar a la funcion de tocas la cuerda al aire*/
  if (temp>=24){ /*Te dara la nota de la cuerda cuando la tocas sin poner la mano en ningun traste*/
    retardo++;
    if(retardo>65000){
      digitalWrite(z, LOW);  /*  Apagar el laser*/
      retardo=0;
    }
 
 
    /*leyendo cuerda fisica*/
    y1=digitalRead(5);
    y2=digitalRead(6);
    y3=digitalRead(7);
    y4=digitalRead(8);
    y5=digitalRead(9);
    if (y1==1){ /*cuerda 6*/
      noteOn(0x90,40,63);
      delay(250);
    }
    else if (y2==1){ /*cuerda 5*/
      noteOn(0x90,45,63);
      delay(250);
    }
    else if (y3==1){
      noteOn(0x90,50,63); /*cuerda 4*/
      delay(250);
    }
    else if (y4==1){
      noteOn(0x90,55,63); /*cuerda 3*/
      delay(250);
    }
    else if (y5==1){
      noteOn(0x90,59,63); /*cuerda 2*/
      delay(250);
    }
    else
      delay (100);
  }

} /*final del void loop*/

/*Es el promediador del sonar*/
int sonar(void){ /*Promedio del sonar*/
  int s0=0;
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0/10;

 // Serial.println(s0, DEC);

  return s0;
}
/*Codigo para hacer sonar las notas que toquemos*/
void noteOn(char cmd, char data1, char data2)
{
  Serial.print(cmd,BYTE);
  Serial.print(data1,BYTE);
  Serial.print(data2,BYTE);
}

Ya que solo estamos usando 5 lasers nuestras variables de entrada son 5, pero para quien quiera poner 6 lasers solo tiene que aumentar una variable mas para la fotoresistencia y para la cuerda fisica. Otra parte importante de este programa es que decidimos no encender los lasers intermitentemente pues el relevador hacia mucho ruido y no era lo suficientemente rapido para que fuera imperceptible, por eso decidimos mejor programar que los laser se encendieran cuando el sonar detectara la mano en el brazo y si no detecta nada en 7 segundos los lasers se apagaran.

No hay comentarios:

Publicar un comentario