problemas con codigo (ayuda)

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

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; 
}

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

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.

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