#include <TinyWireM.h>
#include <Tiny4kOLED.h>
#include <Adafruit_SoftServo.h> // Incluye la librería para el servo
const int buttonPin = 1; // Pin del pulsador (PB1)
const int servoPin = 0; // Pin del servo (PB0)
Adafruit_SoftServo myServo; // Crea un objeto para el servo
bool buttonPressed = false; // Estado del pulsador
bool servoPosition = false; // Posición actual del servo (false = 0 grados, true = 180 grados)
void setup() {
// Configurar el pin del pulsador
pinMode(buttonPin, INPUT_PULLUP); // Configuración con resistencia interna de pull-up
// Inicializar el servo
myServo.attach(servoPin); // Conecta el servo al pin especificado
myServo.write(0); // Inicia el servo en 0 grados
// Inicializar la pantalla OLED
oled.begin();
oled.clear();
oled.on();
oled.setFont(FONT8X16);
// Mostrar un mensaje inicial en la pantalla
oled.setCursor(0, 0);
oled.print(F("Presione el boton"));
}
void loop() {
// Actualizar la posición del servo cada ciclo
myServo.refresh();
// Leer el estado del pulsador
bool currentButtonState = digitalRead(buttonPin) == LOW; // LOW indica que el botón está presionado
if (currentButtonState && !buttonPressed) { // Detectar transición de botón presionado
buttonPressed = true; // Actualizar el estado del botón
// Alternar la posición del servo
if (servoPosition) {
myServo.write(0); // Mover el servo a 0 grados
oled.clear();
oled.setCursor(0, 0);
oled.print(F("Servo a 0 grados"));
} else {
myServo.write(180); // Mover el servo a 180 grados
oled.clear();
oled.setCursor(0, 0);
oled.print(F("Servo a 180 grados"));
}
servoPosition = !servoPosition; // Alternar la variable de posición
}
if (!currentButtonState && buttonPressed) { // Detectar cuando el botón se suelta
buttonPressed = false;
}
delay(50); // Anti-rebote
}