Stap 13: De code
De code van deze klok is hetzelfde van mijn tweede nixie-project. De code is afgeleid van het open bronmateriaal beschikbaar op de website van de Arduinix , en ik heb die code slechts één watergeest als stuurprogramma wilt gebruiken in plaats van twee, aangezien ik niet nodig om meer dan 6 cijfers, en ik geef de voorkeur te slaan van de stuurprogramma's hebt gewijzigd. Ik heb geüpload de code naar de IC van de Atmega8 met behulp van een Arduino board, is het eenvoudiger manier naar mijn mening, maar merk op dat u waarschijnlijk nood voor brandwond de bootloader op de nieuwe IC te kunnen gebruiken in de Arduino, ik gebruik een USBtinyISP programmeur.
Arduinix 6 Bulb - ondersteunt ook uur en Min. tijd instellen. / / Deze code wordt uitgevoerd een zes lamp setup en verschijnt een prototype klok setup. Opmerking: de vertraging is opstelling voor IN-17 watergeest bollen. / / oorspronkelijke code door Jeremy Howa / / www.robotpirate.com / / www.arduinix.com / / 2008-2009 / / code gewijzigd door Andrea Biffi www.andreabiffi.com om te werken met slechts één SN74141 / / / / laatst bewerkt Nov 2013 / / / / SN74141: True tabel //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 DEBUG_ON valse / / SN74141 int ledPin_0_a = 2; int ledPin_0_b = 3; int ledPin_0_c = 4; int ledPin_0_d = 5; anod pinnen 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, OUTPUT); pinMode (ledPin_0_b, OUTPUT); pinMode (ledPin_0_c, OUTPUT); pinMode (ledPin_0_d, OUTPUT); pinMode (ledPin_a_1, OUTPUT); pinMode (ledPin_a_2, OUTPUT); pinMode (ledPin_a_3, OUTPUT); pinMode (ledPin_a_4, OUTPUT); pinMode (ledPin_a_5, OUTPUT); pinMode (ledPin_a_6, OUTPUT); / / Opmerking: / / aarden op analog0 pinnen en analoge ingang 1 zal stellen de uur en min. pinMode (A0 INGANG); instellen van de analog0 van de virtuele pin (pin 0 op de analoge "inputs") digitalWrite (A0, hoge); pincode analoge ingang 0 als een pull up weerstand instellen. pinMode (A1, INPUT); set de virtuele pin analoge ingang 1 (pin 1 op de analoge "inputs") digitalWrite (A1, hoge); pincode analoge ingang 1 als een pull up weerstand instellen. Als (DEBUG_ON) {Serial.begin(9600);}} / / / / DisplayNumberSet / / gebruik: nummer van de anod van de passerende en nummer voor lamp, deze functie / / de waarheidstabel opgezocht en opent u de juiste outs via de arduino / / aan het licht van de cijfers gegeven aan dit funciton. Op een 6 watergeest lamp setup. / / / void DisplayNumberSet (int anod, int num1) {int anodPin; int a, b, c, d; / / set standaardwaarden. een = 0; b = 0, c = 0; d = 0; / / verschijnt een nul. anodPin = ledPin_a_1; / / standaard op eerste anod. / / selecteert u welke anod naar brand. switch (anod) {geval 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; breken; geval 4: anodPin = ledPin_a_5; breken; geval 5: anodPin = ledPin_a_6; breken; } / / Laden de a, b, c, d om te verzenden naar de switch SN74141 IC (1) (num1) {0 kast: een = 0; b = 0, c = 0; d = 0; break; case 1: een = 1; b = 0; c = 0; d = 0; break; case 2: een = 0; b = 1; c = 0; d = 0; break; case 3: een = 1; b = 1; c = 0; d = 0; break; case 4 : een = 0; b = 0, c = 1, d = 0; break; geval 5: een = 1, b = 0, c = 1; d = 0; break; kast 6: een = 0; b = 1; c = 1, d = 0; break; geval 7: een = 1, b = 1; c = 1; d = 0; break; geval 8: een = 0; b = 0, c = 0, d = 1; break; kast 9: een = 1, b = 0, c = 0; d = 1; break; } / / Schrijf aan output pinnen. digitalWrite (ledPin_0_d, d); digitalWrite (ledPin_0_c, c); digitalWrite (ledPin_0_b, b); digitalWrite(ledPin_0_a, a); Dit anod inschakelen. digitalWrite (anodPin, hoge); Vertraging / / Let op: met het verschil in Nixie bollen u wellicht wijzigen / / dit vertragen om de snelheid van de update van de bollen. Als u / / wacht niet lang genoeg de lamp zal worden lichter kleuren of licht niet helemaal / / u wilt instellen van deze vertraging precies goed zodat u / / nice helder output nog snel genoeg is zodat u kunt multiplex met / / meer bollen (2ms is standaard). delay(2); Deze anod afgesloten. digitalWrite (anodPin, laag); } / / / / / / / DisplayNumberString / / gebruik: het passeren van een matrix die is 6 elementen lang zal het weergeven van getallen / / op een 6 watergeest lamp setup. / / / void DisplayNumberString (int * array) {/ / bank 1 (bol 1) DisplayNumberSet(0,array[0]); / / bank 2 (bol 2) DisplayNumberSet(1,array[1]); / / bank 3 (lamp 3) DisplayNumberSet(2,array[2]); / / bank 4 (lamp 4) DisplayNumberSet(3,array[3]); / / 5 (bol 5) bank DisplayNumberSet(4,array[4]); / / 6 (bol 6) bank DisplayNumberSet(5,array[5]);} / / definieert lange minuten = 60; 60 seconden in een Min. lange uren = 60 * minuten; 60 minuten in een uur. lange dagen = 24 * uur; 24 uur in een dag. > Opmerking: de 24 tot en met een 12 voor niet millitary tijd wijzigen. lange runTime = 0; Tijd van toen we begonnen. Verstekwaarde inschakelvertraging wordt ingesteld. klok begint om 12:59:00 / / Opmerking: We beginnen seconden op 0, dus we niet een klok hoeven instellen / / de waarden die u hier ziet zou wat u veranderen / / als u een klok instellen-ingangen aan de Raad hebt toegevoegd. lange clockHourSet = 12; lange clockMinSet = 59; int HourButtonPressed = false; int MinButtonPressed = false; / / / / / / / void loop {/ / Get milliseconden. runTime = millis(); / / Get tijd in seconden. lange tijd = (runTime) / 1000; Deze waarde omzetten in snelheid omhoog of vertragen van de klok, ingesteld op een kleiner getal zoals 10, 1 of 100 voor foutopsporing int hourInput = digitalRead(14); int minInput = digitalRead(15); Als (DEBUG_ON) Serial.println (hourInput); Als (hourInput == 0) HourButtonPressed = true; Als (minInput == 0) MinButtonPressed = true; Als (HourButtonPressed == true & & hourInput == 1) {clockHourSet ++; HourButtonPressed = false; } Als (MinButtonPressed == true & & minInput == 1) {clockMinSet ++; MinButtonPressed = false; } / / Tijd gebaseerd op offset instellen... lange hbump = 60 * 60 * clockHourSet; lange mbump = 60 * clockMinSet; tijd += mbump + hbump; Convert tijd voor dagen, uren, minuten, seconden lange dagen = tijd / dagen; -= dagen tijd * dagen; lange uren = tijd / uren; -= uur tijd * uur; lange minuten = tijd / min; -= minuten tijd * minuten; seconden lang = tijd; De volgorde van hoge en lage waarden voor uren, minuten, seconden krijgen. int lowerHours = uur % 10; int upperHours = uren - lowerHours; int lowerMins = minuten % 10; int upperMins = minuten - lowerMins; int lowerSeconds = seconden % 10; int upperSeconds = seconden - lowerSeconds; Als (upperSeconds > = 10) upperSeconds = upperSeconds / 10; Als (upperMins > = 10) upperMins = upperMins / 10; Als (upperHours > = 10) upperHours = upperHours / 10; Vul het nummer array gebruikt om weer te geven op de buizen. 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; Display. DisplayNumberString (NumberArray); }