Tras de realizar varios proyectos con Display OLED SSD1306 de 128x64 pixeles y Encoder Rotativo con Push Button integrado, hubo que diseñar un Timer que encendiera un ventilador por 10 minutos y lo mantuviera apagado por 10 horas. El proyecto ideal para usar Arduino haciendo uso de millis().
He elegido el Arduino NANO por su bajo costo y su capacidad sobrada para este proyecto, desarrollando el código con el IDE de Arduino, cuya parte medular es el siguiente listado:
Es decir, apagar y encender el ventilador, depende del estado anterior, lo que se maneja con las variables flagtc y flagtl del tipo booleano.
El resto del código es para controlar el display OLED y detectar giros en el Encoder Rotativo, haciendo uso de los pines de INTerrupción externa (Pin 2 y Pin 3) del NANO.
Al encender o resetear el Arduino NANO, se hace sonar un buzzer con dos pitidos, mientras que el display muestra “TIMER 0/1” en cuanto no se manipule el Encoder, pero el Timer ya está en funcionamiento. Si se requiere cambiar los tiempos de encendido y/o apagado, se presiona el push button integrado al encoder, lo que lleva al programa a colocar una línea en el display, debajo de T_ENC o de T_APA, permitiendo subir o bajar el valor de milisegundos girando el encoder en sentido horario o antihorario. El display mostrará el tiempo en milisegundos y también en minutos con parte entera y fraccionaria.
Si el push button del encoder es presionado por más de 5 segundos, se entra en una sección para grabar ambos valores; T_ECN y T_APA en la memoria EEPROM propia del Arduino NANO. Así que al resetear el dispositivo, y durante el setup() se lee el contenido de la memoria EEPROM, recuperando ambos valores.
El diagrama del circuito es el siguiente:
La tarjeta PCB realizada en Traxmaker se muestra a continuación:
El circuito en protoboard funcionando, se muestra en la siguiente fotografía: