Go Down

Topic: problemas con codigo (ayuda) (Read 598 times) previous topic - next topic

irati

Aupa

Hace un tiempo pedi ayuda con una instalacion interactiva donde mediante unos piezo electricos, captabamos la vibración mediante la pisada, y la intensidad de prendido de los leds variaban,

La cosa es que creiamos tenerlo arreglado pero de nuevo nos vuelve el mismo promeblema, no conseguimos estabilizar el valor del voltaje recivido, y el primer problema nace de que no se nos mantienen apagados los leds cuando nadie interactua. Al principio si, pero despues de que alguien alla interactuado, se nos quedan encendidos.

Si alguien puediera revisar el codigo para ver que podria fallar, seria perfecto.

Muchas gracias
saludos

Code: [Select]
int salida=13;
int contador=0;
int EntradaAnaloga=1;
int Nivel, NivelAnt, Delta, DeltaCambio, Alarma;

void setup()
{
Serial.begin(9600);
pinMode(salida, OUTPUT);
DeltaCambio=100;//a 30 queda encendido mucho tiempo,a 100 es muy sensible
Alarma=950;
}

void loop()
{

Nivel = analogRead(EntradaAnaloga);
Delta = Nivel-NivelAnt;




/*
Serial.print("Nivel ");
Serial.println(Nivel);
Serial.print("Delta ");
Serial.println(Delta);
delay(1000);
*/

//Si no hay vibración por encima del Delta definido, Apagar Led
if (abs(Delta) < DeltaCambio)
{
NivelAnt=Nivel;
digitalWrite(salida, LOW);
//goto leer;
}
else
{
/* Serial.print("Nivel ");
Serial.println(Nivel); */
digitalWrite(salida, HIGH); //Encender Led
//delay(500); if (Nivel mayor-o-igual Alarma) { contador++; Serial.print("Alarma "); Serial.println(contador); Serial.print("Nivel "); Serial.println(Nivel); digitalWrite(salida, HIGH); delay(300); digitalWrite(salida, LOW); delay(300); digitalWrite(salida, HIGH); delay(300); digitalWrite(salida, LOW); delay(300); digitalWrite(salida, HIGH); //Encender Led }




//Serial.println(' a los '+millis()/1000);
}
NivelAnt=Nivel;
}

Luis_AM3C

Hola,

        En general el código parece estar bien, yo solo cambiaria el NivelAnt = Nivel; justo despues de calcular el Delta para no ponerlo de nuevo mas abajo.

         Cuando haces el debug por Serial ¿que valores estas obteniendo de Nivel y Delta? ¿Estan variando?

         Te dejo el código como yo lo pondria, pero funcionalmente haría lo mismo excepto que agregue un delay para notar mejor si se apaga (Si prende y apaga muy rapido te pareceria que nunca se apaga).

Code: [Select]

int salida=13;
int contador=0;
int EntradaAnaloga=1;
int Nivel, NivelAnt, Delta, DeltaCambio, Alarma;

void setup()
{
  Serial.begin(9600);
  pinMode(salida, OUTPUT);
  DeltaCambio=100;//a 30 queda encendido mucho tiempo,a 100 es muy sensible
  Alarma=950;
}

void loop()
{
  Nivel = analogRead(EntradaAnaloga);
  Delta = Nivel-NivelAnt;
  NivelAnt=Nivel;

  //Si no hay vibración por encima del Delta definido, Apagar Led
  if( abs(Delta) < DeltaCambio )
  {
    digitalWrite(salida, LOW); //Apagar Led
  }
  else
  {
    digitalWrite(salida, HIGH); //Encender Led
  }
 
  delay(1000);
}


Saludos.

irati

muchas gracias, perfecto. La semana que viene construimos la instalación, y a ver que tal...

Go Up