Hola, quiero controlar el encendido de un motor durante 10s y después se apague desde un comando de Alexa, como tal el motor si lo enciende el tema es que no lo detiene al transcurrir los 10s.
He usado delay() pero esto hace que el esp8266 se bloquee y se reinicie, la otra opción fue usar millis(), el tema es que a la hora de mandar el comando este se enciende en el serial.print pero no activa el motor fisico como tal (espero me haya dado a entender), no se si haya una opción para poder apagar el motor a los 10s.
(espero no incumplir ninguna norma del grupo). Muchas gracias por sus respuestas.
Este es el código que estoy usando:
#include <Arduino.h>
#ifdef ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include "fauxmoESP.h"
#define WIFI_SSID "xxxxxxxxxx"
#define WIFI_PASS "xxxxxxxxx"
//const int motorPin = D1; // Pin del motor
fauxmoESP fauxmo;
#define motorPin D6
#define motorPin2 D5
#define DEVICE_NAME "Motor1"
#define DEVICE_NAME2 "Motor2"
unsigned long tiempoInicio = 0;
const unsigned long duracionEncendido = 10000;
void wifiSetup() {
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando a WiFi...");
}
Serial.printf("Conectado a %s", WIFI_SSID);
}
void setup() {
Serial.begin(115200);
pinMode(motorPin, OUTPUT);
pinMode(motorPin2, OUTPUT);
digitalWrite(motorPin, LOW);
digitalWrite(motorPin2, LOW);
wifiSetup();
fauxmo.createServer(true); // not needed, this is the default value
fauxmo.setPort(80); // This is required for gen3 devices
fauxmo.enable(true);
fauxmo.addDevice(DEVICE_NAME);
fauxmo.addDevice(DEVICE_NAME2);
fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) {
Serial.printf("Dispositivo #%d (%s) - Estado: %s\n", device_id, device_name, state ? "ENCENDIDO" : "APAGADO");
if (strcmp(device_name, DEVICE_NAME) == 0) {
unsigned long tiempoActual= millis();
if (tiempoActual - tiempoInicio > = duracionEncendido) {
digitalWrite(motorpin, LOW);
}else{
digitalWrite(motorpin, HIGH);
}
if (strcmp(device_name, DEVICE_NAME2) == 0) {
unsigned long tiempoActual= millis();
if (tiempoActual - tiempoInicio > = duracionEncendido) {
digitalWrite(motorpin2, LOW);
}else{
digitalWrite(motorpin2, HIGH);
}
});
}
void loop() {
fauxmo.handle();
}