Étape 4: le code
Le code que j’ai utilisé dans cette version de l’horloge est prélevé dans le matériau de l’open source disponible sur le site Web Arduinix , et j’ai vraiment vous suggère d’aller chercher Brad Lewis "Paresse four" projets impressionnants (il est un membre d’instructables trop).
J’ai modifié le 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. Il y a un paramètre que vous pouvez modifier si vous avez des problème avec vos écrans, c’est le retard, mais 2 ms fonctionne très bien pour moi. Vous pouvez essayer ms 3 ou 4 mais plus cligno-les chiffres, puisque le logiciel doit passer par tous les chiffres avant d’allumer un chiffre encore une fois.
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) ; }
Pour graver le code à l’EI Atmega, j’ai utilisé Arduino. Juste enlever la puce de l’Arduino, insérez votre Atmega8 (ou mieux), changer le Conseil d’administration et port série sous le menu « Outils », coller mon code et téléchargez-la. Sortez de l’IC et insérer dans la douille sur le plateau de l’horloge. Veuillez noter que votre IC Atmega pourriez avoir besoin pour être brûler avec bootloader avant de télécharger le code, vous pouvez trouver les instructions sur cette page. J’ai utilisé un programmeur de USBtinyISP, mais vous pouvez acheter IC déjà brûlé avec le bootloader.