Go Down

Topic: Actualizar un programa en tiempo real (Read 121 times) previous topic - next topic

RastaBlue

Sep 21, 2019, 06:03 am Last Edit: Sep 21, 2019, 06:43 pm by surbyte Reason: Titulo Editado
Muy buenas, esto es algo un poco lioso de explicar y estare muy agradecido con quien se tome tiempo de ayudarme. Estoy haciendo un pequeño proyecto en el que tengo una pantalla lcd 16x2, 3 pulsadores y 5 leds.

Cuando enciendo el proyecto comienza a encender y apagar una secuencia de leds de uno en uno, cuando presiono pulsador1 la pantalla me muestra un numero en ascenso i++ y cuando presiono pulsador2 el mismo numero decrece i--, una vez que seleccione el numero deseado y presionando pulsador3 establezco el delay con el que quiero que se accionen los leds de la secuencia.

Mi problema es que debo esperar que el loop se reinicie para poder cambiar el valor del delay o de i, es decir que si en un momento pongo un delay de 5000 deberé esperar 5000*10 para poder hacer el siguiente cambio, yo quisiera poder cambiar el delay en cualquier momento independientemente de los leds, hay alguna manera de hacerlo? hay alguna manera en la que pueda acceder al codigo de la pantalla sin la necesidad de esperar que el loop ejecute los 10 segundos de cada led?

Perdon por el codigo feo, soy muy novato en todo esto

Code: [Select]

#include  <LiquidCrystal.h>

int i=500;
int l=500;
int p=1;
int k=13;
LiquidCrystal lcd(3, 2, 7, 6, 5, 4);

void setup() {
   pinMode(8,INPUT);
    pinMode(9,OUTPUT);
    pinMode(10,OUTPUT);
    pinMode(11,OUTPUT);
    pinMode(12,OUTPUT);
    pinMode(13,OUTPUT);
 Serial.begin(9600);
    lcd.begin(16, 2);
    lcd.home();
}

void pant(){
  
 if(digitalRead(A0)==0){
      l=l+500;
    }
   if(digitalRead(A1)==0){
      l=l-500;
    }
   if(digitalRead(A2)==0){
      i=l;
    }
  
 lcd.clear();
 lcd.print(" VELOCIDAD  ");
 lcd.setCursor(0, 1);
 lcd.print(l);
    lcd.setCursor(6, 1);
   lcd.print(" Ms ");
  
}

void loop(){
  
  do{
    
   pant();
 digitalWrite(k, 1);
    delay(i); // Wait for 1000 millisecond(s)
   pant();
    digitalWrite(k, 0);
    delay(i); // Wait for 1000 millisecond(s)
   pant();
    k--;
    
    if(k<=8)
      k=13;
    
  }while(p>100);
  
}



Kike_GL

Quote from: RastaBlue
Mi problema es que debo esperar que el loop se reinicie para poder cambiar el valor del delay o de i, es decir que si en un momento pongo un delay de 5000 deberé esperar 5000*10 para poder hacer el siguiente cambio, yo quisiera poder cambiar el delay en cualquier momento independientemente de los leds, hay alguna manera de hacerlo? hay alguna manera en la que pueda acceder al codigo de la pantalla sin la necesidad de esperar que el loop ejecute los 10 segundos de cada led?
Exacto y la solucion es usar millis() en lugar de delay().

Diferencia entre usar delay() y millis()
Saludos, Kike_GL

RastaBlue

Muchas gracias, me sirvió de mucho

Go Up