Accionamiento servo mas retardo

De nada sirve

  if(millis()-t>=3000){
    digitalWrite(Rele, LOW);

  }

con los delay() que tienes cuando presionas el pulsador

Esto código tiene una máquina de estados. No esta probado de modo que si tiene errres o falta definir alguna variable verifícalo y haz las correcciones necesarias.

#include <VarSpeedServo.h>

VarSpeedServo Myservo;

unsigned long t;
byte Pulsador = 2;
byte Rele     = 4;
int pos       = 0;
bool accion   = false;
int estado;

enum _modos = {NOSEMUEVE, CINCOSEG, CIERRO_RELE};
_modos modo = NOSEMUEVE;

void setup() {
  pinMode(Pulsador, INPUT_PULLUP);
  pinMode(Rele, OUTPUT);
  Myservo.attach(3);
  Myservo.write(98, 100, true);
}

void loop() {
  estado = digitalRead(Pulsador);
  if (estado == LOW) {
      accion = true;
  }

  if (accion)
      switch(modo) {
        case NOSEMUEVE: digitalWrite(Rele, HIGH);
                        t = millis();
                        modo = CINCOSEG;
                        break;
        case CINCOSEG : if (millis() - t > 5000UL) {
                            Myservo.write(0, 255, true);
                            t = millis();
                            modo = CIERRO_RELE;
                        }
                        break;
        case CIERRO_RELE: if (millis() - t > 15000UL) {
                              digitalWrite(Rele, LOW);
                              modo = NOSEMUEVE;
                              accion = false;
                          }
                          break;
      }
}
1 Like