Go Down

Topic: Un mensaje por cada activación. (Read 179 times) previous topic - next topic

9acca9

Jul 23, 2019, 04:19 am Last Edit: Jul 23, 2019, 04:20 am by 9acca9
Hola a todos.
Tengo un proyecto donde se activa y queda encendido un motor una vez que determinado botón se presiona por más de un segundo. Además envía que el motor fue encendido. Y ahí está lo que quiero modificar.

En mi código el mensaje se envía cada vez. Es decir, si el motor está más de un segundo envía un mensaje, mientras el botón no se suelta la variable se incrementa, por lo que a los 2,3,4,5, etc. manda un mensaje, hasta que se libera el botón.

Lo que yo quiero es que el mensaje se envíe cuando se libera, enviando el tiempo que estuvo presionado. Es decir obtener un mensaje con su duración por cada activación del botón en vez de muchísimos mensajes por cada vez que el botón se mantiene presionado.


Esta es la parte relevante del código.
Un saludo a todos y gracias, espero puedan darme una mano.

Code: [Select]
pinMode(5, INPUT); //boton
  //digitalWrite(5, LOW);
  pinMode(4, OUTPUT); //relay
 // digitalWrite(4,LOW);
  delay(200);
}

//--------------------------LOOP--------------------------------
void loop() {
delay(200);
valboton = digitalRead(5);
Serial.println(valboton);

if (valboton==LOW) {
       Serial.println("Comenzando el if");
       if (!countingTime) {
       startBeing1orMore = millis();
       }
   countingTime = true;
   } else {
   countingTime = false;
   }
   if (countingTime && millis() - startBeing1orMore > 1000) {
    digitalWrite(4, HIGH);
    Serial.println("MOTOR ENCENDIDO");
    enviardatos("chipid=" + chipid + "&temperatura=" + solta);
    delay(100);
   }
  if (valboton==HIGH) {
    digitalWrite(4,LOW);
    Serial.println("MOTOR APAGADO");
    delay(100);
   }
}



Pd.:sorry i put in english, no spanish..... sorry.

surbyte

Por favor respeta el idioma del foro en el que posteas. Si estas en un foro en inglés no  puedes consultar en español.
Por esa razón tu hilo fue movido.

Kike_GL

Estudia este ejemplo:

Code: [Select]

unsigned long t;
bool actual,anterior;

void setup(){
   Serial.begin(9600);
   pinMode(5, INPUT);
}

void loop() {
   actual = digitalRead(5);
   if (actual && !anterior){
      t = millis();     
   }
   if (!actual && anterior){
      Serial.println(millis()-t);      //Tiempo en milisegundos
   }
   anterior = actual;
}


El primer if() detecta el flanco de subida (RISING = LOW --> HIGH) y guarda los milisegundos y el segundo if() detecta el flanco de bajada (FALLING ) HIGH --> LOW)
Saludos, Kike_GL

Go Up