Etape 13 : Le code
Le code de cette horloge est la même chose de mon deuxième projet nixie. Le code dérive le matériel open source disponible sur le site Web Arduinix , et j’ai modifié ce code pour n'utiliser qu’un seul pilote de nixie au lieu de deux, étant donné que je n’avez pas besoin d’exécuter plus de 6 chiffres, et je préfère sauver les pilotes. J’ai téléchargé le code à l’Atmega8 EI à l’aide d’une carte Arduino , c’est la façon la plus simple à mon avis, mais notez que vous devrez probablement brûler le bootloader sur le nouveau IC pour pouvoir l’utiliser dans l’Arduino, j’utilise un USBtinyISP programmeur.
Ampoule Arduinix 6 - prend également en charge heure et min. de temps ensemble. / / Ce code exécute une installation six ampoule et affiche une configuration d’horloge de prototype. NOTE : le retard est configuré pour les ampoules de nixie IN-17. / / original code par Jeremy Howa / / www.robotpirate.com / / www.arduinix.com / / 2008 / 2009 / / code modifié par Andrea Biffi www.andreabiffi.com de travailler avec un seul SN74141 / / / / dernière modification: Nov 2013 / / / / SN74141 : vrai tableau //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 faux 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, sortie); pinMode (ledPin_0_b, sortie); pinMode (ledPin_0_c, sortie); pinMode (ledPin_0_d, sortie); pinMode (ledPin_a_1, sortie); pinMode (ledPin_a_2, sortie); pinMode (ledPin_a_3, sortie); pinMode (ledPin_a_4, sortie); pinMode (ledPin_a_5, sortie); pinMode (ledPin_a_6, sortie); / / NOTE: / / mise à la terre sur tiges d’analog0 et d’entrée analogique 1 volonté régler l’heure et mn pinMode (A0 ENTRÉE) ; définir l’analog0 virtuel pin (pin 0 sur les entrées analogiques) digitalWrite (A0, élevé) ; définir broche analogique entrée 0 comme une traction vers le haut de résistance. pinMode (entrée, A1) ; ensemble l’axe virtuel analogique d’entrée 1 (broche 1 sur les entrées analogiques) digitalWrite (A1, élevé) ; broche 1 entrée analogique fixé une traction vers le haut de résistance. Si (DEBUG_ON) {Serial.begin(9600);}} / / / / DisplayNumberSet / / usage : croisement anod nombre et nombre d’ampoule, cette fonction / / recherche la table de vérité et ouvre les aboutissants correctes de l’arduino / / pour éclairer les nombres donnés à cette fonction. Sur une configuration d’ampoule 6 nixie. / / / void DisplayNumberSet (int anod, int num1) {int anodPin ; int a, b, c et d; / / set defaults. un = 0; b = 0; c = 0; d = 0; / / affiche un zéro. anodPin = ledPin_a_1; / / par défaut sur le premier anod. / / sélectionner quel anod au feu. commutateur (anod) {case 0: anodPin = ledPin_a_1 ; break ; case 1: anodPin = ledPin_a_2 ; break ; case 2: anodPin = ledPin_a_3 ; break ; case 3 : anodPin = ledPin_a_4 ; rupture ; case 4: anodPin = ledPin_a_5 ; rupture ; cas 5: anodPin = ledPin_a_6 ; rupture ; } / / Charge l’a, b, c et d d’envoyer au commutateur SN74141 IC (1) (num1) {case 0: un = 0; b = 0; c = 0; d = 0; break ; case 1: a = 1; b = 0; c = 0; d = 0; break ; case 2: un = 0; b = 1; c = 0; d = 0; break ; case 3: un = 1; b = 1; c = 0; d = 0; break ; case 4 : un = 0; b = 0; c = 1; d = 0; break ; cas 5: a = 1; b = 0; c = 1; d = 0; break ; case 6: a = 0; b = 1; c = 1; d = 0; break ; cas 7: a = 1; b = 1; c = 1; d = 0; break ; cas 8: a = 0; b = 0; c = 0; d = 1; break ; 9-affaire: a = 1; b = 0; c = 0; d = 1; break ; } / / Ecrire à broches de sortie. digitalWrite (ledPin_0_d, d) ; digitalWrite (ledPin_0_c, c) ; digitalWrite (ledPin_0_b, b) ; digitalWrite(ledPin_0_a, a) ; Allumez cette anod. digitalWrite (anodPin, HIGH) ; Retard / / NOTE: À la différence de bulbes Nixie, vous devrez peut-être modifier / / ce délai pour régler la vitesse de mise à jour des bulbes. Si vous / / n’attendez pas longtemps assez l’ampoule sera dim ou s’allume pas du tout / / vouloir définir ce retard juste pour que vous ayez / / nice lumineux sortie encore assez rapide pour que vous pouvez multiplexer avec / / plus ampoules (2ms est standard). Delay(2) ; Coupez cette anod. digitalWrite (anodPin, basse) ; } / / / / / / / DisplayNumberString / / usage : en passant un tableau qui est de 6 éléments long affichera les numéros / / sur une configuration d’ampoule 6 nixie. / / / void DisplayNumberString (int * tableau) {/ / 1 (1 ampoule) de la Banque DisplayNumberSet(0,array[0]); / / 2 (ampoule 2) de la Banque DisplayNumberSet(1,array[1]); / / 3 (ampoule 3) de la Banque DisplayNumberSet(2,array[2]); / / 4 (ampoule 4) de la Banque DisplayNumberSet(3,array[3]); / / 5 (ampoule 5) de la Banque DisplayNumberSet(4,array[4]); / / 6 (ampoule 6) de la Banque DisplayNumberSet(5,array[5]);} / / Defines MINS long = 60 ; 60 secondes en un minimum de longue heures = 60 * mn ; 60 minutes dans une heure. longues journées = 24 * heures ; 24 heures par jour. > Note : changer le 24 à 12 pour le moment non militaire. longue duree = 0 ; Temps de quand nous avons commencé. ensembles de temps par défaut. horloge commencera à 12:59 / / NOTE : nous commençons secondes à 0 nous n’avez pas besoin d’une horloge set / / les valeurs que vous voyez ici serait que vous modifiez / / si vous avez ajouté une entrées de réglage de l’horloge au Conseil d’administration. long clockHourSet = 12 ; clockMinSet long = 59 ; int HourButtonPressed = false ; int MinButtonPressed = false ; / / / / / / / void loop() {/ / Get millisecondes. DUREE = millis(); / / Get temps en secondes. longtemps = (runTime) / 1000 ; Remplacez cette valeur par vitesse haut ou ralentir l’horloge, valeur égale au nombre de plus petit tels que 10, 1 ou 100 pour le débogage 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 time basé sur décalage... hbump long = 60 * 60 * clockHourSet ; mbump long = 60 * clockMinSet ; temps + = mbump + hbump ; Convertir : jours, heures, minutes, secondes longues journées = temps / jours ; temps = jours * jours ; longues heures = temps / heures ; temps = heures * heures ; longues minutes = temps / mn ; temps = minutes * mn ; secondes de temps = temps ; Obtenir les valeurs de l’ordre de haute et basse des heures, minutes, secondes. int lowerHours = h % 10 ; int upperHours = heu - lowerHours ; int lowerMins = minutes % 10 ; int upperMins = minutes - lowerMins ; int lowerSeconds = secondes % 10 ; int upperSeconds = s - lowerSeconds ; Si (upperSeconds > = 10) upperSeconds = upperSeconds / 10 ; Si (upperMins > = 10) upperMins = upperMins / 10 ; Si (upperHours > = 10) upperHours = upperHours / 10 ; Remplissez le tableau numéro permettant d’afficher sur les tubes. 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 ; Affichage. DisplayNumberString (NumberArray) ; }
Nixie_clock_code.zip