estimados todos, espero esta consulta no sea ultra repetida, probablemente si, pero no como la quiero plantear,
pasa que estoy haciendo un código, que, cuando x pin cambie su estado, haga automáticamente una función, bueno, lo que hice, lo hace la primera vez que yo subo el código al arduino, pero ya a la segunda vez on me funciona pq millis sigue subiendo, y por ende después de la segunda vez ya está mas allá del valor inicial, y no encuentro como soluconarlo, les dejo lo que hace, a ver si me ayudan
currentMillis lo estoy tomando en el loop
currentMillis = millis();
// Pines de entrada
const int botonAbrirPin = 6;
const int botonCerrarPin = 7;
const int pinPuerta = 8;
const int ledPin = 10;
// Pines de salida
const int ledAbrirPin = 11;
const int ledCerrarPin = 12;
// Variables
bool buttonAbrirPulsado = false;
bool buttonCerrarPulsado = false;
bool estadoSeguro;
unsigned long previousMillis = 0;
unsigned long currentMillis,
tiempo;
long interval = 13000;
int ledState = LOW;
String msje, msje2, msje3;
bool mensajeEnviado = false;
bool mensajeEnviado2 = false;
bool mensajeEnviado3 = false;
void setup() {
// Configuramos los pines de entrada
pinMode(botonAbrirPin, INPUT_PULLUP);
pinMode(botonCerrarPin, INPUT_PULLUP);
pinMode(pinPuerta, INPUT_PULLUP);
// Configuramos los pines de salida
pinMode(ledAbrirPin, OUTPUT);
digitalWrite(ledAbrirPin, LOW);
pinMode(ledCerrarPin, OUTPUT);
digitalWrite(ledCerrarPin, LOW);
Serial.begin(9600);
}
void loop() {
currentMillis = millis();
if (digitalRead(botonAbrirPin) == LOW) {
if ( estadoSeguro == true ){
msje = "seguro estaba abierto";
sndmesaje();
mensajeEnviado = true;
}else{
abrir();
estadoSeguro = true;
}
}
if (digitalRead(botonCerrarPin) == LOW) {
if ( estadoSeguro == false ){
msje = "seguro estaba cerrado";
sndmesaje();
mensajeEnviado = false;
}else{
cerrar();
estadoSeguro = false;
}
}
if (estadoSeguro == true){
if (digitalRead(pinPuerta) == LOW){
msje = "puerta abierta";
sndmesaje();
mensajeEnviado = false;
}else{
msje = "puerta cerrada";
sndmesaje();
mensajeEnviado = false;
cerrarxtiempo();
}
}
}
}
void cerrar(){
msje = "seguro cerrado";
sndmesaje();
mensajeEnviado = false;
digitalWrite(ledCerrarPin, HIGH);
delay(500);
digitalWrite(ledCerrarPin, LOW);
estadoSeguro = true;
}
void cerrarxtiempo(){
//millis();
if ( currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
cerrar();
estadoSeguro = false;
}
}
entonces lo que quiero es que cada vez que lo vaya a usar comience desde 0, o alguna función que lo haga, saludos y feliz navidad desde chile!