Paso 13: El código
El código de este reloj es el mismo de mi segundo proyecto de nixie. El código se deriva el material de código abierto disponible en sitio Web Arduinix y he modificado ese código para utilizar solamente un conductor del nixie en vez de dos, ya que no necesito para ejecutar más de 6 dígitos, y prefiero guardar drivers. He subido el código a la IC de Atmega8 utilizando una placa Arduino , es la manera más simple en mi opinión, pero aviso que probablemente necesitará grabar el bootloader en el IC nuevo para poder usarlo en Arduino, yo uso un programador USBtinyISP.
Arduinix 6 bulbo - también es compatible con horas y minutos tiempo de juego. / / Este código ejecuta una configuración de seis bombilla y muestra una configuración de reloj prototipo. Nota: la demora es setup para bulbos de nixie IN-17. / / original código por Jeremy Howa / / www.robotpirate.com / / www.arduinix.com / / 2008-2009 / / código modificado por Andrea Biffi www.andreabiffi.com trabajar con solo SN74141 / / / / última edición Nov de 2013 / / / / SN74141: tabla verdadera //D C B A # //L,L,L,L 0 //L,L,L,H 1 //L,L,H,L 2 //L,L,H,H 3 //L,H,L,L 4 //L,H,L,H 5 //L , H, H, L 6 //L,H,H,H 7 //H,L,L,L 8 //H,L,L,H 9 #define falso DEBUG_ON / / SN74141 int ledPin_0_a = 2; int ledPin_0_b = 3; int ledPin_0_c = 4; int ledPin_0_d = 5; Anod pins int ledPin_a_1 = 8; int ledPin_a_2 = 9; int ledPin_a_3 = 10; int ledPin_a_4 = 11; int ledPin_a_5 = 12; int ledPin_a_6 = 13; void setup() {pinMode (ledPin_0_a, salida); pinMode (ledPin_0_b, salida); pinMode (ledPin_0_c, salida); pinMode (ledPin_0_d, salida); pinMode (ledPin_a_1, salida); pinMode (ledPin_a_2, salida); pinMode (ledPin_a_3, salida); pinMode (ledPin_a_4, salida); pinMode (ledPin_a_5, salida); pinMode (ledPin_a_6, salida); / / Nota: / / puesta a tierra en pernos analog0 y entrada analógica 1 romperá la hora y minutos pinMode (A0 ENTRADA); configurar el pin virtual analog0 digitalWrite (pin 0 en las entradas analógicas) (A0, alto); configurar pin 0 entrada analógica como un tirón para arriba del resistor. pinMode (A1, entrada); conjunto el virtual pin analógico de entrada 1 (pin 1 en las entradas analógicas) digitalWrite (A1, alto); configurar pin 1 entrada analógica como un tirón para arriba del resistor. Si (DEBUG_ON) {Serial.begin(9600);}} / / / / DisplayNumberSet / / uso: paso anod número y número para el bulbo, esta función / / busca la tabla de verdad y abre la configuración correcta de la arduino / / a la luz de los números dados para esta función. En una configuración de bombilla 6 nixie. / / void DisplayNumberSet (int anod, int num1) {int anodPin; int a, b, c, d el; / / set defaults. a = 0; b = 0; c = 0; d = 0; / / mostrará un cero. anodPin = ledPin_a_1; / por defecto en primer anod. / / seleccionar qué anod fuego. interruptor (anod) {caso 0: anodPin = ledPin_a_1; break; caso 1: anodPin = ledPin_a_2; break; caso 2: anodPin = ledPin_a_3; break; case 3 : anodPin = ledPin_a_4; rotura; caso 4: anodPin = ledPin_a_5; rotura; caso 5: anodPin = ledPin_a_6; rotura; } / / Cargar el a, b, c, d el para enviar al interruptor de SN74141 IC (1) (num1) {caso 0: un = 0; b = 0; c = 0; d = 0; break; caso 1: un = 1; b = 0; c = 0; d = 0; break; caso 2: un = 0; b = 1; c = 0; d = 0; break; case 3: un = 1; b = 1; c = 0; d = 0; break; caso 4 : un = 0; b = 0; c = 1; d = 0; break; caso 5: a = 1; b = 0; c = 1; d = 0; break; caso 6: a = 0; b = 1, c = 1; d = 0; break; caso 7: un = 1; b = 1, c = 1; d = 0; break; caso 8: a = 0; b = 0; c = 0, d = 1; break; caso 9: a = 1; b = 0; c = 0, d = 1; break; } / / Escribir en pines de salida. digitalWrite (ledPin_0_d, d); digitalWrite (ledPin_0_c, c); digitalWrite (ledPin_0_b, b); digitalWrite(ledPin_0_a, a); Encienda esta anod. digitalWrite (anodPin, HIGH); Retraso / / Nota: con la diferencia de lámparas Nixie tendrá que cambiar / este retardo para establecer la velocidad de actualización de los bulbos. Si usted / / no esperes mucho tiempo suficiente la bombilla será dim o no la luz en todo / / desea establecer este retraso apenas a la derecha para que tengas / / Niza brillante salida pero lo suficientemente rápido como para que usted puede conectar con / / más bulbos (2ms es estándar). Delay(2); Cierre este anod. digitalWrite (anodPin, bajo); } / / / / / / / DisplayNumberString / uso: pasar una matriz que está 6 elementos mostrará números / / en una configuración de bombilla 6 nixie. / / void DisplayNumberString (int * array) {/ / Banco 1 (foco 1) DisplayNumberSet(0,array[0]); / / Banco 2 (foco 2) DisplayNumberSet(1,array[1]); / Banco 3 (foco 3) DisplayNumberSet(2,array[2]); / Banco 4 (bombilla 4) DisplayNumberSet(3,array[3]); / Banco 5 (bombilla 5) DisplayNumberSet(4,array[4]); / / Banco 6 (bombilla 6) DisplayNumberSet(5,array[5]);} / / define largos minutos = 60; 60 segundos en un minuto largo horas = 60 * minutos; 60 minutos en una hora. largos días = 24 * horas; 24 horas en un día. > Nota: cambie el 24 a 12 por vez no militar. tiempo de pasada largo = 0; Tiempo de cuando empezamos. sistemas de tiempo predeterminado. reloj comenzará a las 12:59 / / Nota: empezamos segundos en el 0 por lo que no necesitamos un reloj set / / los valores que ves aquí lo que cambia / / si ha agregado un entradas de reloj a la Junta. clockHourSet largo = 12; clockMinSet largo = 59; int HourButtonPressed = false; int MinButtonPressed = false; / / / / / / / void loop() {/ / obtener milisegundos. tiempo de ejecución = millis(); / / tiempo en segundos. largo plazo = (tiempo de ejecución) / 1000; Cambie este valor a velocidad hacia arriba o retrasar el reloj, en menor número como 10, 1 o 100 para la depuración de int hourInput = digitalRead(14); int minInput = digitalRead(15); Si Serial.println (DEBUG_ON) (hourInput); Si (hourInput == 0) HourButtonPressed = true; Si (minInput == 0) MinButtonPressed = true; Si (HourButtonPressed == true & & hourInput == 1) {clockHourSet ++; HourButtonPressed = false; } Si (MinButtonPressed == true & & minInput == 1) {clockMinSet ++; MinButtonPressed = false; } / / Set basado en offset... hbump largo = 60 * 60 * clockHourSet; mbump largo = 60 * clockMinSet; tiempo += mbump + hbump; Tiempo de convertir a días, horas, minutos, segundos tiempo días = tiempo / días; días = * días; largas horas = tiempo / horas; hora = horas * horas; tiempo minutos = tiempo / minutos; tiempo = minutos * min; tiempo en segundos = tiempo; Obtener los valores de orden alto y bajo en horas, minutos, segundos. int lowerHours = horas % 10; int upperHours = horas - lowerHours; int lowerMins = minutos % 10; int upperMins = minutos - lowerMins; int lowerSeconds = segundos % 10; int upperSeconds = segundos - lowerSeconds; Si (upperSeconds > = 10) upperSeconds = upperSeconds / 10; Si (upperMins > = 10) upperMins = upperMins / 10; Si (upperHours > = 10) upperHours = upperHours / 10; Rellene la matriz número utilizada para mostrar en los tubos. int NumberArray [6] = {0,0,0,0,0,0}; NumberArray [0] = upperHours; NumberArray [1] = lowerHours; NumberArray [2] = upperMins; NumberArray [3] = lowerMins; NumberArray [4] = upperSeconds; NumberArray [5] = lowerSeconds; Pantalla. DisplayNumberString (NumberArray); }