Que tal chicos, yo sé que no es correcto hacer las programaciones por los demas pero realmente necesito ayuda, tengo esta programación de un solo ciclo en el cual uno a traves de un potenciometro varia el tiempo que esta encendido el led, lo que necesito es que ese bucle sea cerrado y que el mismo tiempo que la led se mantiene encendida este apagada y lo haga indefinidamente hasta que uno le de stop y pueda reconfigurar el tiempo
C++:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd (0x3f,16,2);
#define ST_TIME A1
#define START A2
#define STOP A3
#define LED_PRO 5
#define BUZZER 6
//////////////////////////////////////////////////////////////////
unsigned int tiempo, cont = 0;
unsigned int display_time = 0;
unsigned long PREV_MILLIS = 0;
const int FALSE = 0;
const int TRUE = 1;
short FLAG_STOP = 0;
char buffer[16];
//////////////////////////////////////////////////////////////////
void setup()
{
pinMode(START,INPUT_PULLUP); // Habilita Pullup Interna
pinMode(STOP,INPUT_PULLUP); // Habilita Pullup Interna
pinMode(BUZZER, OUTPUT);
pinMode(LED_PRO, OUTPUT);
lcd.init();
lcd.backlight();
//Serial.begin(9600);
mensaje_bienvenida();
lcd.clear();
while(digitalRead(START) || tiempo == 0)
{
tiempo = analogRead(ST_TIME) * 0.176;
display_tiempo();
delay(200);
}
lcd.clear();
digitalWrite(LED_PRO, HIGH); // INDICADOR
}
//////////////////////////////////////////////////////////////////
void loop()
{
while (FLAG_STOP == FALSE)
{
unsigned long CURRENT_MILLIS = millis();
display_tiempo();
delay(200);
if (CURRENT_MILLIS - PREV_MILLIS >= 1000)
{
tiempo--;
PREV_MILLIS = CURRENT_MILLIS;
}
if (!digitalRead(STOP)||(tiempo==0))
{
FLAG_STOP = TRUE;
mensaje_bienvenida() ;
}
}
while(FLAG_STOP)
{
digitalWrite(LED_PRO, LOW); // APAGA INDICADOR MODO PROCESO
final_proceso();
lcd.clear();
while(digitalRead(START) || tiempo == 0)
{
tiempo = analogRead(ST_TIME) * 0.176;
display_tiempo();
delay(200);
}
lcd.clear();
digitalWrite(LED_PRO, HIGH); // ACTIVA INDICADOR MODO PROCESO
FLAG_STOP = FALSE;
delay(100);
}
}
//////////////////////////////////////////////////////////////////
void mensaje_bienvenida()
{
lcd.clear();
lcd.println(" TEMPORIZADOR");
lcd.setCursor(0, 1);
lcd.println(" AUTOMATICO");
delay(3000);
lcd.clear();
lcd.println("INICIALIZANDO");
delay(200);
lcd.println(".");
delay(200);
lcd.println(".");
delay(200);
lcd.println(".");
delay(100);
}
//////////////////////////////////////////////////////////////////
void display_tiempo()
{
unsigned int minuto, segundo;
lcd.setCursor(0, 0);
minuto = tiempo / 60;
segundo = tiempo % 60;
sprintf(buffer, " TIEMPO : %u:%0.2u ", minuto, segundo);
lcd.println(buffer);
}
void final_proceso()
{
lcd.clear();
lcd.println(" PROCESO ");
lcd.setCursor(0, 1);
lcd.println(" FINALIZADO ");
digitalWrite(LED_PRO, LOW);
digitalWrite(BUZZER, HIGH);
delay(1000);
digitalWrite(BUZZER, LOW);
delay(1000);
digitalWrite(BUZZER, HIGH);
delay(1000);
digitalWrite(BUZZER, LOW);
delay(1000);
digitalWrite(BUZZER, HIGH);
delay(1000);
digitalWrite(BUZZER, LOW);
delay(1000);
digitalWrite(BUZZER, HIGH);
delay(1000);
digitalWrite(BUZZER, LOW);
delay(1000);
digitalWrite(BUZZER, HIGH);
delay(1000);
digitalWrite(BUZZER, LOW);
delay(1000);
digitalWrite(BUZZER, HIGH);
delay(1000);
digitalWrite(BUZZER, LOW);
}