Go Down

Topic: Establecer que una variable sea entre un valor determinado (Read 108 times) previous topic - next topic

lucidosart

Oct 10, 2018, 03:07 pm Last Edit: Oct 10, 2018, 04:45 pm by surbyte Reason: Agregado de etiquetas de código/error
Hola buen dia,
Necesito ayuda con esta parte del codigo. Lo que quiero hacer es que al recibir h1onmenos me reste una hora a la variable HORAON1, hasta ahi todo ok.
El problema me aparece cuando llego a las 0hs quiero que si resta una hora mas pase a 23hs.
Lo mismo me pasa cuando sumo una hora y llega a los 23 quiero que pase a 0hs. me ayudan a terminar esa parte del codigo? muchisimas gracias.

Code: [Select]
 if (leido.startsWith("h1onmenos")){
     lcd.clear();
     HORA1ON = (HORA1ON-1);
     lcd.setCursor(0, 0);
     lcd.print("HORA 1= ");
     lcd.print(HORA1ON);
     lcd.print(":");
     lcd.print(MINUTO1ON);
     delay(1500);
 }

_jose_

Usa un condicional if,si HORA1ON es menor que 0 ,entonces HORA1ON es igual a 23 ,piensa como seria para cuando sea mayor a 23.La variable no tendria que estar declarada como unsigned para que pueda tener valor negativo(menor que 0)

lucidosart

Muchísimas gracias por la pronta respuesta.

Soy nuevo y lo que me comentas lo hago pero lo puse al final de código y lo que me pasa es que funciona bien pero si estoy en 23 y agrego una hora en el LCD me muestra HORA1ON 24 y al final del código lo cambia a 0 entonces lo que pasa es que queda confuso porque la pantalla me muestra 24 pero luego queda en 0.

Code: [Select]
//INICIO CONDICION DE HORA1ON ENTRE 0 Y 23HS

            if (HORA1ON >= 24){ //si HORA1ON es mayor o igula a 24 HORA1ON = 0
            HORA1ON = 0;

 }

            if (HORA1ON < 0){  // si HORA1ON es menor a 0 HORA1ON = 23
              HORA1ON = 23;


Mi duda es como poner esto mismo dentro del If que suma o resta horas para que estando en 23 si sumo me lo cambie a 24 sino a 0 antes de imprimir en el lcd.

De que forma lo pongo pero dentro de este codigo?

Code: [Select]
if (leido.startsWith("h1onmenos")){
     lcd.clear();
     HORA1ON = (HORA1ON-1);
     lcd.setCursor(0, 0);
     lcd.print("HORA 1= ");
     lcd.print(HORA1ON);
     lcd.print(":");
     lcd.print(MINUTO1ON);
     delay(1500);
 }



Perdon mi ignorancia pero esto no lo entendi: "La variable no tendria que estar declarada como unsigned para que pueda tener valor negativo(menor que 0)"

gracias por la ayuda!!

surbyte

Usa módulo para todo lo que supere 24

ejemplo horaFinal = (23+2)%24

si solo hicieramos la suma daria 25 o sea ambos sabemos que es 1 pero como tengo módulo resulta que
todo lo que este dentro de 24 queda como esta y si lo supera nos quedamos con el resto.

(23+2)%24 = 1

La situación inversa creo que es mas facil. Siempre

supongamos que estas en 1:00 y le restas 3hs resultado matemático -2 pero si a ese resultado le sumas 24 cuanto te da? 22 que es tu respuesta.

Entonces toda respuesta <0 solo la corriges sumandole 24.


_jose_

Es cuestion de escribir el codigo en el orden que tu quieres que se ejecute,prueba esto:
Code: [Select]

if (leido.startsWith("h1onmenos")){
     lcd.clear();
     HORA1ON = HORA1ON-1;
     if(HORA1ON < 0){
       HORA1ON = 23;
     }
     lcd.setCursor(0, 0);
     lcd.print("HORA 1= ");
     lcd.print(HORA1ON);
     lcd.print(":");
     lcd.print(MINUTO1ON);
     delay(1500);
 }

Go Up