Hola chicos,
acabo de aterrizar en esto de arduino y estoy haciendo mis primeras pruebas de codigo. Ni idea tengo del tema pero leyendo articulos y buscando me tire a la piscina...
llevo atascado con la funcion millis para controlar un rele días, se que es una cosa muy basica pero no se donde fallo, a ver si me podeis echar una mano:
tengo un sensor Pir el cual cuando detecta movimiento da señal durante 3 segundos y quiero que el rele se mantenga encendido, por ejemplo 9 segundos y no hay manera. Siempre se apaga en cuanto la señal es LOW. Os paso el codigo:
unsigned long TIEMPO1 = 0;
unsigned long TIEMPO2 = 0;
unsigned long ESPERA_ACTIVA2 = 900000;
const int LED= 2;
const int PIR= 3;
int SENSOR= 0;
void setup()
{
pinMode(LED, OUTPUT);
pinMode(PIR, INPUT);
Serial.begin(9600);
TIEMPO1 = millis();
}
void loop()
{
TIEMPO2 = millis();
SENSOR= digitalRead(PIR);
if (SENSOR == HIGH)
{
digitalWrite (LED, HIGH);
}
if (TIEMPO2 >= (TIEMPO1 + 50000));
{
TIEMPO1 = millis();
digitalWrite(LED, LOW);
}
Serial.println (SENSOR);
}
tambien es mi primer post aqui a si que no se si me explique bien... gracias de antemano!!
unsigned long TIEMPO1 = 0;
unsigned long TIEMPO2 = 0;
unsigned long ESPERA_ACTIVA2 = 9000;
const int LED= 2;
const int PIR= 3;
int SENSOR= 0;
void setup()
{
pinMode(LED, OUTPUT);
pinMode(PIR, INPUT);
Serial.begin(9600);
TIEMPO1 = millis();
}
void loop()
{
TIEMPO2 = millis();
SENSOR= digitalRead(PIR);
if (SENSOR == HIGH)
{
digitalWrite (LED, HIGH);
TIEMPO1=millis();
Serial.println (SENSOR);
}
if (millis()-TIEMPO2> ESPERA_ACTIVA2 )
{
digitalWrite(LED, LOW);
Serial.println (SENSOR);
}
}
Prueba si te funciona este. No lo he probado.
Otras mejoras:
Variables en minúsculas
Otra versión
unsigned long tiempo1 = 0;
unsigned long Espera_activa = 900000;
const int Led = 2;
const int Pir = 3;
bool flag = false;
bool Sensor, SensorAnt = false;
void setup() {
pinMode(Led, OUTPUT);
pinMode(Pir, INPUT);
Serial.begin(9600);
}
void loop() {
Sensor = digitalRead(Pir);
Serial.println(Sensor?"PIR ON":"PIR OFF");
if (Sensor == HIGH && SensorAnt == LOW) {
digitalWrite (Led, HIGH);
flag = true;
tiempo1 = millis();
}
if (flag) {
if (millis() >= (tiempo1 + Espera_activa)){
digitalWrite(Led, LOW);
flag = false;
}
}
SensorAnt = Sensor;
}
surbyte tu version si que va
pero me puedes explicar por favor un par de cosas??
la variable= bool Sensor, SensorAnt = false; para que es?
y flag??
a ver si voy pillando algo del tema... muchas gracias por la ayuda