// --- Pulsación Corta ON-OF/Pulsación Larga ---
#define buttonPin 12
#define LED 13
#define LED2 11
const int intervalSw = 50; // Intervalo de tiempo (mseg) entre dos lecturas del pulsador
bool flag_sw = false; // Bandera ON/OF
bool swStatePrevious = HIGH; // Estado previo de pulsador
bool swStateLongPress = false; // True si es una pulsación larga
unsigned long swLongPressDuration = 2000; // Tiempo (seg) de espera pulsacion larga
unsigned long swLongPressMillis; // Tiempo (mseg) cuando se presionó el pulsador
unsigned long previousSwMillis; // Tiempo de la última lectura del pulsador
unsigned long swPressDuration; // Tiempo (mseg) que se mantiene presionado el pulsador
unsigned long currentMillis; // Milisegundos desde que se inició el código
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
pinMode(LED, OUTPUT);
pinMode(LED2, OUTPUT);
Serial.println("Pulsacion Corta ON-OF/Larga");
}
void loop() {
currentMillis = millis(); // almacenar el tiempo actual
readButtonState(); // Leer estado del pulsador
}
// Leer estado del pusador
void readButtonState() {
// Si la diferencia de tiempo entre la lectura anterior es mayor que "intervalButton"
if(currentMillis - previousSwMillis > intervalSw) {
// Leer el valor digital del pulsador (LOW/HIGH)
bool buttonState3 = digitalRead(buttonPin);
// Pulsador presionado
if (buttonState3 == LOW && swStatePrevious == HIGH && !swStateLongPress) {
swLongPressMillis = currentMillis;
swStatePrevious = LOW;
//Serial.println("Pulsador Presionado");
}
// Calcular cuanto tiempo se ha presionado el pulsador
swPressDuration = currentMillis - swLongPressMillis;
// Pulsación Larga
if (buttonState3 == LOW && !swStateLongPress && swPressDuration >= swLongPressDuration) {
swStateLongPress = true;
Serial.println("Pulsacion Larga");
digitalWrite(LED2, HIGH);
//digitalWrite(LED, LOW);
}
// Pulsador liberado - Pulsación Corta
if (buttonState3 == HIGH && swStatePrevious == LOW) {
swStatePrevious = HIGH;
swStateLongPress = false;
//Serial.println("Pulsador Liberado");
if (swPressDuration < swLongPressDuration) {
Serial.println("Pulsacion Corta");
if (flag_sw == false){
digitalWrite(LED, HIGH);
digitalWrite(LED2, LOW);
Serial.println("ON");
flag_sw = true;
}else {
digitalWrite(LED, LOW);
digitalWrite(LED2, LOW);
Serial.println("OF");
flag_sw = false;
}
}
}
previousSwMillis = currentMillis; // Marca de tiempo actual
}
}