Enorma trä nixie klockan (13 / 26 steg)
Steg 13: Koden
Koden för denna klocka är samma för min andra nixie projektet. Koden kommer från den öppna källkod materialet tillgängligt på Arduinix hemsida, och jag ändrade den koden du vill använda endast en nixie istället för två, eftersom jag inte behöver köra mer än 6 siffror, och jag föredrar att spara drivrutiner. Jag laddade upp koden till Atmega8 IC med en Arduino ombord, det är det enklare sättet enligt min uppfattning, men märker att du förmodligen behöva bränna bootloader på nya IC för att kunna använda den i Arduino, jag använder en USBtinyISP programmerare.
Arduinix 6 lampa - också stöder timme och Min. tiden uppsättning.
//
Denna kod körs en sex lampa setup och visar en prototyp clock setup.
Obs: förseningen är setup för IN-17 nixie lökar.
//
ursprungliga koden av Jeremy Howa
www.robotpirate.com
www.arduinix.com
2008 - 2009
koden ändras av Andrea Biffi www.andreabiffi.com att arbeta med endast en SN74141
//
Senaste Redigera Nov 2013
//
SN74141: Sant tabell
D C B ETT #
L, L, L, L 0
L, L, L, H 1
LARSSON, LARSSON, H, L 2
LARSSON, LARSSON, 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 falskt
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, produktionen);
pinMode (ledPin_0_b, produktionen);
pinMode (ledPin_0_c, produktionen);
pinMode (ledPin_0_d, produktionen);
pinMode (ledPin_a_1, produktionen);
pinMode (ledPin_a_2, produktionen);
pinMode (ledPin_a_3, produktionen);
pinMode (ledPin_a_4, produktionen);
pinMode (ledPin_a_5, produktionen);
pinMode (ledPin_a_6, produktionen);
OBS:
Jordning på stift analog0 och analog ingång 1 kommer att ange timmar och minuter.
pinMode (A0, indata); Ange den virtuella pin analog0 (pin 0 på de analoga ingångarna)
digitalWrite (A0, hög); Ange pin analog ingång 0 som en dra upp motstånd.
pinMode (A1, indata); Ange PIN-koden virtuella analog ingång 1 (pin 1 på de analoga ingångarna)
digitalWrite (A1, hög); Ange pin analog ingång 1 som en dra upp motstånd.
om (DEBUG_ON)
{
Serial.BEGIN(9600);
}
}
////////////////////////////////////////////////////////////////////////
//
DisplayNumberSet
Användning: Passerar anod nummer och nummer för lampa, denna funktion
letar upp sanningen bordlägger och öppnar den korrekta outs från arduino
att tända de nummer som ges till denna funciton.
På en 6 nixie glödlampa inställning.
//
////////////////////////////////////////////////////////////////////////
void DisplayNumberSet (int anod, int num1)
{
int anodPin;
int a, b, c, d;
Ange standardvärden.
en = 0; b = 0, c = 0, d = 0; visar en nolla.
anodPin = ledPin_a_1; standard på första anod.
Välj vilken anod till brand.
Switch (anod)
{
fall 0: anodPin = ledPin_a_1; bryta;
fall 1: anodPin = ledPin_a_2; bryta;
fall 2: anodPin = ledPin_a_3; bryta;
fall 3: anodPin = ledPin_a_4; bryta;
fall 4: anodPin = ledPin_a_5; bryta;
fall 5: anodPin = ledPin_a_6; bryta;
}
Belastning på a, b, c, d att skicka till SN74141 IC (1)
växel (num1)
{
fall 0: en = 0; b = 0, c = 0, d = 0; semester.
mål 1: en = 1, b = 0, c = 0; d = 0; semester.
mål 2: en = 0; b = 1, c = 0, d = 0; semester.
fall 3: en = 1, b = 1, c = 0; d = 0; semester.
fall 4: en = 0; b = 0; c = 1; d = 0; semester.
fall 5: en = 1, b = 0; c = 1; d = 0; semester.
mål 6: en = 0; b = 1, c = 1; d = 0; semester.
fall 7: en = 1, b = 1, c = 1; d = 0; semester.
mål 8: en = 0; b = 0; c = 0, d = 1; semester.
mål 9: en = 1; b = 0; c = 0, d = 1; semester.
}
Skriva ut stiften.
digitalWrite (ledPin_0_d, d);
digitalWrite (ledPin_0_c, c);
digitalWrite (ledPin_0_b, b);
digitalWrite(ledPin_0_a, a);
Aktivera denna anod.
digitalWrite (anodPin, hög);
Dröjsmål
Obs: Med skillnaden i Nixie glödlampor kan du behöva ändra
denna försening att ställa in uppdateringen hastigheten på lökarna. Om du
vänta inte länge nog glödlampan blir dunkel eller inte tänds alls
du vill ställa in denna försening bara rätt så att du har
fina ljusa utgång men snabb nog så att du kan multiplex med
fler lampor (2ms är standard).
Delay(2);
Stäng av denna anod.
digitalWrite (anodPin, låg);
}
////////////////////////////////////////////////////////////////////////
//
DisplayNumberString
Användning: passerar en matris som är 6 element långa kommer visa tal
på en 6 nixie glödlampa inställning.
//
////////////////////////////////////////////////////////////////////////
void DisplayNumberString (int * array)
{
Bank 1 (glödlampa 1)
DisplayNumberSet(0,array[0]);
Bank 2 (lampa 2)
DisplayNumberSet(1,array[1]);
banken 3 (lampa 3)
DisplayNumberSet(2,array[2]);
banken 4 (bulb 4)
DisplayNumberSet(3,array[3]);
banken 5 (lampa 5)
DisplayNumberSet(4,array[4]);
banken 6 (lampa 6)
DisplayNumberSet(5,array[5]);
}
Definierar
långa minuter = 60. 60 sekunder i en Min.
långa timmar = 60 * minuter; 60 min i en timme.
långa dagar = 24 * timmar. 24 timmar i dygnet. > Obs: ändra 24 till en 12 icke militära tid.
långa runTime = 0; Tiden från när vi började.
standardtiden anger. klockan börjar klockan 12:59:00
Obs: Vi börjar sekunder på 0 så vi inte behöver en klocka som
De värden som du ser här skulle vara vad du ändra
Om du lagt till en ställa in klockan ingångar till styrelsen.
lång clockHourSet = 12;
lång clockMinSet = 59.
int HourButtonPressed = false;
int MinButtonPressed = false;
////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////
void loop()
{
Få millisekunder.
Längd = millis();
Få tid i sekunder.
lång tid = (runTime) / 1000; ändra det här värdet för att snabba upp eller sakta ner klockan, mindre värde som 10, 1 eller 100 för felsökning
int hourInput = digitalRead(14);
int minInput = digitalRead(15);
om (DEBUG_ON)
Serial.println (hourInput);
om (hourInput == 0)
HourButtonPressed = sant;
om (minInput == 0)
MinButtonPressed = sant;
om (HourButtonPressed == true & & hourInput == 1)
{
clockHourSet ++;
HourButtonPressed = false;
}
om (MinButtonPressed == true & & minInput == 1)
{
clockMinSet ++;
MinButtonPressed = false;
}
Inställd tid baserat på offset...
lång hbump = 60 * 60 * clockHourSet;
lång mbump = 60 * clockMinSet;
tid + = mbump + hbump;
Konvertera tid till dagar, timmar, minuter, sekunder
långa dagar = tid / dagar; tid-= dagar * dagar.
långa timmar = tid / timmar; -= timmar * timmar.
långa minuter = tid / min; tid-= minuter * minuter;
långa sekunder = tid;
Få de höga och låga värdena för timmar, minuter, sekunder.
int lowerHours = timmar % 10.
int upperHours = timmar - lowerHours;
int lowerMins = minuter % 10.
int upperMins = minuter - lowerMins;
int lowerSeconds = sekunder % 10.
int upperSeconds = sekunder - lowerSeconds;
om (upperSeconds > = 10) upperSeconds = upperSeconds / 10;
om (upperMins > = 10) upperMins = upperMins / 10;
om (upperHours > = 10) upperHours = upperHours / 10;
Fyll i antal matrisen används för att visa på rören.
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);
}