Bueno ya estamos de nuevo pidiendo consejo.... de por donde pueden ir los tiros. No se si sera problema del arduino en si (es un nano de 5€) o que pero me falla esta parte de código cuando quiere:
if (conf == true){
Serial.println(contador);
tiempoencendido1 = analogRead(potencendido);
tiempoencendido1= map(tiempoencendido1,0,1024,100,2000);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
delay(1);
contador++;
--------Añadí esto y es mas estable pero aun así salta cuando quiere-------
if (contador>tiempoencendido1){
contador==tiempoencendido1;}
------------------------------------------------------------------------------------
if(contador == tiempoencendido1){
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
contador = 0;
delay(2000);
}
}
El resto de código que falta no interviene en nada pues se rige por conf == false, por lo que pasa del codigo.....
El problema es que se supone que mapea un valor y ese valor se queda fijo durante x veces y al repetir el proceso durante 15 (por ejemplo o pueden ser 12 o 20......)veces el mapeo cambia y se hace infinito y se cuelga esa parte de código porque el programa sigue funcionando pero pasa de la condicional if (contador>tiempoencendido1).... También lo he probado solo sin nada mas (configuración básica para un programa) y pasa lo mismo cuando quiere el mapeo pasa al infinito y mas allá.
Recuerda usar tags para postear códigos aunque sean de 1 línea.
En tu código escribes esto
digitalWrite(0,HIGH);
digitalWrite(1,LOW);
Estas escribiendo sobre RX y TX o sea sobre el Serial generando interferencias.
Hola surbyte eso ha sido fallo mio al poner el código en el post... realmente puede ser cualquier pin el 7 y 8 o 4 y 12..... ahora lo corrijo, mientras tanto estoy haciendo pruebas con la función millis por si lo puedo hacer de otra forma y ver si hace lo mismo.....
Tu programa tiene partes que ne lo personal no son aconsejables y te explico porque
porque no promedias las lecturas asi se estabiliza en serio en lugar de poner delays que no hacen mucho.
Y menos el de 2 segundos al final
Tomas 10 o 20 lecturas, las sumas y al final las promedias, ese valor es el que lo pasas por el map
Y con ese valor comparas y tomas acciones.
Creo que el error pasa por tiempoencendido1, al ser una lectura analógica tiene ruido y la condición if(contador == tiempoencendido1) es posible que no se cumpla en la mayoría de los ciclos del loop, deberías reemplazar por la condición if(contador >= tiempoencendido1)
saludos.
Hola.... bueno tras un rato mirando las cosas... ya lo tengo o por lo menos eso creo lo he tenido un rato funcionando y parece que chuta bien. Antes no duraba tanto sin colgarse.
interval = analogRead(potencendido);
interval= map(intervalo,0,1024,100,1000);
interva2 = analogRead(potapagado);
interva2= map(intervalo2,0,1024,100,1000);
unsigned long millisactual = millis();
if (y == 1){
if(millisactual - millisanterior > intervalo) {
millisanterior = millisactual;
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
y = 0;
x=1;
}
}
if (x == 1){
if(millisactual - millisanterior > intervalo2) {
millisanterior = millisactual;
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
x=0;
y=1;
}
}
No se si esta forma sera mas limpia pero gano el no utilizar el delay por lo que aun influye menos en el programa principal no?