Paso 6: Programación de Arduino
Ahora que ya tienes todo conectado a un protoboard, listo armar su programa.
Lo que necesitaba: interfaz con una pantalla, lee la entrada de dos botones y ajustar valores basados en un codificador rotatorio.
Por suerte, comunicarse con la pantalla se hizo rápido y sencillo debido a las bibliotecas de Adafruit. (SSD1306 para conectarse con el chip de controlador de la pantalla y su biblioteca GFX para rápidamente y fácilmente añadir texto o formas a la pantalla.)
El codificador utiliza interrupciones externas, que son una característica muy útil que el ATMega328 tiene y cuenta con soporte para el IDE de Arduino. Permite que código se corrió sólo cuando cambia de un pin y de lo contrario no retrasará el programa principal loop() por votación con la función digitalRead(). Usted puede leer más acerca de esta característica útil aquí: http://playground.arduino.cc/Code/Interrupts
Empecé a sacar la pantalla OLED para trabajar. Por suerte adafruit dispone de una biblioteca (link) para fácil interfaz con el visualizador estaba usando (SSD1305) y adafruit tiene mucha información sobre él aquí: https://learn.adafruit.com/monochrome-oled-breakou...
Después de mi texto y números de roll y resultados donde quería, lo hice para que el usuario podría ser en los modos de selección diferente para cambiar el número de dados a rodar y el número de lados. Usé una semilla aleatoria del número de milisegundos desde el dispositivo fue en y genera un número aleatorio cada vez que pulsan el botón de rodillo. También tenía la pantalla actualizar sólo cuando un número fue cambiado, para reducir la sobrecarga de CPU innecesariamente.
No dude en buscar y utilizar mi codigo en mi repositorio github: https://github.com/tedmyers/Dice_Roller
Para este proyecto, no quería pasar mucho tiempo configurando una placa y enchufar un programador en el sistema. Tan sólo apareció el microcontrolador Atmega328p en mi Arduino Uno y lo colocó en mi circuito final. Si haces esto, no olvide incluir un oscilador de cristal de 16MHz con los condensadores de 22pF necesario en cada pin.