Stap 4: de code
De code die ik in deze versie van de klok gebruikt is ontleend aan het open bronmateriaal beschikbaar op de website van de Arduinix , en ik echt je aanraden om op zoek gaan Brad Lewis indrukwekkende projecten "Luiaard oven" (hij is een lid van de instructables ook).
Ik wijzigde de 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 stuurprogramma's. Er is een parameter die u wijzigen kunt als u probleem met uw beeldschermen hebt, het is de vertraging, maar 2 ms werkt prima voor mij. U kunt proberen 3 of 4 ms maar meer zal het flikkeren van de cijfers, omdat de software heeft te gaan door alle cijfers voordat opnieuw een cijfer verlichting.
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); }
Ik gebruikte om te branden van de code naar de Atmega IC Arduino. Verwijder gewoon de Arduino-chip, plaats uw Atmega8 (of beter), Raad en seriële poort onder menu 'extra' wijzigen, plak mijn code en uploaden. Neem de IC en invoegen in de socket op het bord van de klok. Let op dat uw Atmega IC-kon hoeven te worden met bootloader branden voordat u de code uploaden, kunt u instructies op Deze pagina. Ik gebruikte een USBtinyISP programmeur, maar je kunt IC al gebrand met de bootloader.