#include <TinyWireM.h>
#include <Tiny4kOLED.h>
#include <Adafruit_SoftServo.h> // Librería para controlar el servo
Adafruit_SoftServo myServo; // Crear un objeto servo
const unsigned long TIEMPO_ESPERA = 5000; // 5 segundos en milisegundos
unsigned long tiempoInicio; // Variable para almacenar el tiempo de inicio
bool cicloCompletado = false; // Variable para indicar si el ciclo ha sido completado
const int LED1_PIN = 4; // Definir el pin del primer LED
const int LED2_PIN = 3; // Definir el pin del segundo LED
const int LED3_PIN = 5; // Definir el pin del tercer LED
void setup() {
// Inicializar la pantalla OLED
oled.begin();
oled.clear();
oled.on();
oled.setFont(FONT8X16);
// Inicializar el servo
myServo.attach(1); // Conectar el servo al pin 1 (PB1) del ATtiny85
// Configuración inicial de los LEDs
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(LED3_PIN, OUTPUT);
// Configuración inicial de la pantalla
oled.setCursor(0, 0);
oled.print(F(""));
// Registrar el tiempo de inicio
tiempoInicio = millis();
}
void loop() {
unsigned long tiempoActual = millis(); // Obtener el tiempo actual
if (!cicloCompletado) {
// Mostrar el tiempo transcurrido en la pantalla OLED
mostrarTiempoTranscurrido(tiempoActual - tiempoInicio);
// Verificar si han pasado 5 segundos
if (tiempoActual - tiempoInicio >= TIEMPO_ESPERA) {
// Marcar el ciclo como completado
cicloCompletado = true;
// Mover el servo a 90 grados
//moverServo(90);
//delay(1000); // Espera 1 segundo
// Mover el servo a 0 grados
moverServo(0);
delay(1000); // Espera 1 segundo
// Detener el programa después de completar el ciclo
while (true) {
// Bucle infinito para detener el proceso
}
} else {
// Hacer parpadear los LEDs sucesivamente durante el tiempo de espera
parpadearLEDs();
}
}
}
void moverServo(int angulo) {
myServo.write(angulo);
// Refrescar el servo solo si es necesario
for (int i = 0; i < 20; i++) {
myServo.refresh();
delay(5); // Intervalo más corto para mayor precisión
}
}
void mostrarTiempoTranscurrido(unsigned long tiempo) {
// Mostrar el tiempo transcurrido a la derecha de los dos puntos
oled.setCursor(50, 0); // Posicionar el cursor en la primera línea, a la derecha de "Tiempo:"
oled.print(tiempo / 1000); // Convertir milisegundos a segundos
oled.print(F(" seg"));
}
void parpadearLEDs() {
const int RETRADO = 250; // Retardo para el parpadeo en milisegundos
// Encender y apagar LEDs sucesivamente
digitalWrite(LED1_PIN, HIGH);
delay(RETRADO);
digitalWrite(LED1_PIN, LOW);
delay(RETRADO);
digitalWrite(LED2_PIN, HIGH);
delay(RETRADO);
digitalWrite(LED2_PIN, LOW);
delay(RETRADO);
digitalWrite(LED3_PIN, HIGH);
delay(RETRADO);
digitalWrite(LED3_PIN, LOW);
delay(RETRADO);
}