Go Down

Topic: codigo incorrecto o placa estropeada? (Read 885 times) previous topic - next topic

sagarra

os comento, empece con arduino hace poco,  se algo d C pero nada de electrónica..
se me ocurrió programar un secuencidor, es decir, un pianillo que memorizase la secuencia de notas tocadas y que las repita continuamente.
hace un par de dias conseguí hacerlo funcionar, pero ayer al volver a montar el circuito  la lie y conecte la salida de 5v directa a los pines INPUT.. y "casualidad", el programa que me habia funcionado el dia anterior dejo de funcionar.
así q no se si el problema esta en el codigo o es que queme la placa..

este es el codigo:
Code: [Select]


#define NOTE_C3  131
#define NOTE_D3  147
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_G3  196
#define NOTE_A3  220
#define NOTE_B3  247


int bot1=2; 
int bot2=3; 
int bot3=4;
int bot4=5;
int bot5=6;
int bot6=7;
int bot7=8;

int voz=13;
int red=12;
int green=11;


int cadena[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int memCadena[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

void setup()
{
  Serial.begin(9600);
 
 
  pinMode (bot1,INPUT);
  pinMode (bot2,INPUT);
  pinMode (bot3,INPUT);
  pinMode (bot4,INPUT);
  pinMode (bot5,INPUT);
  pinMode (bot6,INPUT);
  pinMode (bot7,INPUT);
 
  pinMode (voz,OUTPUT);
  pinMode (red,OUTPUT);
  pinMode (green,OUTPUT);
}

void loop()
{
  //IF botones
 
  for(int i=0;i<16;i++)
  {   
     
  if(digitalRead(bot1)==HIGH)
    {
     cadena[i]=1;
     memCadena[i]=cadena[i];
    }
   if(digitalRead(bot2)==HIGH)
    {
      cadena[i]=2;
      memCadena[i]=cadena[i];
    }
   if(digitalRead(bot3)==HIGH)
    {
      cadena[i]=3;
      memCadena[i]=cadena[i];
    }
   if(digitalRead(bot4)==HIGH)
    {
      cadena[i]=4;
      memCadena[i]=cadena[i];
    }
    if(digitalRead(bot5)==HIGH)
    {
      cadena[i]=5;
      memCadena[i]=cadena[i];
    }
       if(digitalRead(bot6)==HIGH)
    {
      cadena[i]=6;
      memCadena[i]=cadena[i];
    }
       if(digitalRead(bot7)==HIGH)
    {
      cadena[i]=7;
      memCadena[i]=cadena[i];
    }
    else
    {
      cadena[i]=memCadena[i];
    }
   
    Serial.print(cadena[i]);
   
    // IF notas
   
   
   if(cadena[i]==1)
    {
     tone(voz,NOTE_C3,50);
    }
     if(cadena[i]==2)
    {
     tone(voz,NOTE_D3,50);
    }
     if(cadena[i]==3)
    {
     tone(voz,NOTE_E3,50);
    }
     if(cadena[i]==4)
    {
     tone(voz,NOTE_F3,50);
    }
     if(cadena[i]==5)
    {
     tone(voz,NOTE_G3,50);
    }
     if(cadena[i]==6)
    {
     tone(voz,NOTE_A3,50);
    }
     if(cadena[i]==7)
    {
     tone(voz,NOTE_B3,50);
    }     
   
    //IF metronomo
   
    if(i%2==0)
    {
      digitalWrite(green,LOW);
      digitalWrite(red,HIGH);
    }
   if(i%2!=0)
  {
    digitalWrite(red,LOW);
    digitalWrite(green,HIGH);
  }
   
     delay(300);
   
  }

  Serial.println(".");
 
}
 


en princiopio el array cadena[ i ] deberia arrancar a cero, pero a mi me arranca con un valor de 3..

puede alguin probarlo y decirme si es problema de mi arduino o problema del codigo?

un saludo y gracias!

sagarra

solo necesito que alguien carge el codigo en su anduino y me diga si la comunicacion serial le da 000000000...  o 333333.. como me da a mi,
no hace falta conectar nada al arduino, solo cargar el codigo.

American2020

Prueba en tu arduino el código que ya viene de "Blink" para ver si el led en el pin 13 funciona correctamente.

Luego haz la prueba en los demás pines con un led y una resistencia acorde, para probar que todas las salidas estén funcionando de forma correcta.

Es la forma que se me ocurre que podrías probar en que estado está tu Arduino.
My 3x3x3 Led Cube

[url=http://arduino.cc/forum/index.php/topic,1642

sagarra

ya probé a jugar cin Blink,  y funciona correctamente..
pero al cargar el codigo de arriba hace cosas muy raras y bastante aleatorias, puede haberse jodido el "modo" INPUT?
o eso no tiene ni pies ni cabeza?

American2020

¿Las inputs, las tienes conectadas a botones cierto?

Estas mismas, recuerda que deberías conectarlas con un "PULL DOWN" creo que lo llaman así, una resistencia de unos 10K a tierra, para mantenerlas en LOW mientras no son pulsadas, y evitar esas "cosas raras" ya que quedarían flotando y dando lecturas erroneas.

¿Quizás sea eso lo que está pasando?
My 3x3x3 Led Cube

[url=http://arduino.cc/forum/index.php/topic,1642

sagarra

pues si, era eso, al probar el código sin los pulsadores conectados daba valores raros. Pensaba que al no estar el circuito cerrado arduino los tomaría como LOW, pero no, no es así

muchas gracias!

American2020

Si, yo también lo aprendí "a la fuerza" eso.

Lo que si existe y se puede hacer, es usar lo que se llama "PULL UP" sin tener que agregar resistencias uno en cada botón.

Si en el código, defines un pin como INPUT, pero a este lo haces HIGH, entonces se activará un PULL UP interno del microcontrolador, y los botones, en lugar de tu conectarlo a 5V, los conectas al tierra, entonces al presionarlos, esos INPUTS irán a LOW y al soltarlos volverán a HIGH

Con eso dicho, luego el código debería ser al reves, un input LOW sería igual a "Presionado" mientras que un input en HIGH sería que no lo estás presionando. Algo más confuso, pero evitas tener que lidiar con resistencias mientras haces las pruebas.
My 3x3x3 Led Cube

[url=http://arduino.cc/forum/index.php/topic,1642

Go Up