arduino

hola

quiro hacer algo y no se como:

tengo un sensor de distancia, cuando marque menos de una distancia quiero que ponga HIGH un pin durante 5 segundos. Utilizando el delay el problema es que me para todo el programa durante 5 segundos y lo que quiero es que encienda el pin durante 5 segundos pero que el programa siga corriendo.

Gracias a quien lo sepa.... :)

Utiliza un contador y juega con el delay … el código sería parecido a este:

 int LED=8;
 int sensor = 0;
 int val=0;                                  
 long contador = 0;   
 long tiempoEncendido = 100000;  // Calculo del tiempo aproximado:
                                                  //    20 segundos de delay (ver abajo) --> se repite 50 veces por segundo
                                                  //    100000 / 50  = 2000 milisegundos --> 2 segundos


 void setup (){
  pinMode(LED, OUTPUT);
 }

 void loop (){
   val=analogRead(sensor);        // Lee el sensor
   if (val<512){                         // Si está activo reinicia el contador de tiempo 
     contador=tiempoEncendido; //    al tiempo de encendido total.
   }
   if (contador > 0) {                 // Si el contador de tiempo es positivo mantiene
     contador = contador - 20;    //    encendido el interruptor y decrementa el 
     digitalWrite(LED,HIGH);       //    tiempo de encendido, sino lo apaga.
   } else {                  
     digitalWrite(LED,LOW);
   }
   delay (20);
 }

Salu2,

Igor

Gracias Igor pero no lo entiendo muy bien?¿ :’(

ESTE ES MI CODIGO:

int value = 0;
int sensor = 1;
int luz = 3;
int iman = 6;

void setup() {
beginSerial(9600);
pinMode(luz, OUTPUT);
pinMode(iman, OUTPUT);
}

void loop() {

value = analogRead(sensor);

if(value > 300)
digitalWrite(luz, HIGH);
if(value < 300)
digitalWrite(luz, LOW);

if(value > 300)
digitalWrite(iman, HIGH);
if(value < 300)
digitalWrite(iman, LOW);

Serial.print(analogRead(sensor));
Serial.println();

delay(100);
}

lO QUE NECESITO ES QUE “luz” SE QUE DE ENCENDIDA DURANTE 5 SEGUNDOS despues de que el “value” sea menor que 300 es decir : cuando te acercas al sensor que se encienda y cuando te alejes permanezca 5 segundos encendido y si te vuelves a acercar que ocurra lo mismo(hayan pasado lo 5 segundos o no. el problema es que el sensor midiendo da muchos datos y algunos no corresponden con la diatancia real y se apaga la luz durante un instante y no quiero que sa apague hasta que no estes totalmwente fuera de su alcance. y que “iman” siga siempre funcionando.

gracias

Hola,

El código que te pasé hace exactamente eso. Lee constantemente el valor del sensor y cada vez que detecta que el PIN se ha activado incrementa al máximo el contador de encendido.

En cada repetición del bucle se van restando del contador varios milisegundos. Si el contador llega a cero sin detectar nada más, se apaga.

Yo lo tengo montado para una instalación y me funciona. Revisa el código y trata de entender lo que hace.

Salu2,

Igor