Nörd fickur (2 / 3 steg)
Steg 2: Programmet
Ladda ner detta program och lägga den på din ATtiny85.
Du kan ändra värdet i raden som säger
långa kalibrera = 313250; Fem minuter.
att göra din klocka springa snabbare eller långsammare. Det finns viss variation i ATtiny inre klocka. Det brukar vanligtvis köra lite snabbt. Kalibreringen är värdet för min särskilda chip.
/************************************************************
* Digital nörd klocka program
*
* Original program av othermachine på instructables.com
*
* Omprogrammeras av JRV31
*
************************************************************/
int greenLED = 1; PIN-koden för gröna LED.
int yellowLED = 4; PIN-koden för gula lampan.
int knappen = 0; PIN-koden för tryckknapp switch.
int blinkDelay = 350; Längd på blinkar i milleseconds.
långa kalibrera = 313250; Fem minuter.
lång starttid;
int timme = 0;
int minut = 0;
/************************************************************
* setup() funktion - krävs
************************************************************/
void setup()
{
pinMode (greenLED, produktionen); Ställ in LED stift till utgång.
pinMode (yellowLED, produktionen);
pinMode (knappen, INPUT_PULLUP); Ställa in knappen pin till ingång med pullup
digitalWrite (yellowLED, hög); Starttillståndet för lysdioder är avstängd.
digitalWrite (greenLED, hög);
setTime(); funktion för att ställa in tiden.
StartTime = millis(); Markera starttiden.
While((Millis()-StartTime) <(calibrate/2)) / / vänta 2 1/2 minuter innan
framåt för första gången.
{
IF(digitalRead(Button)==Low) / / visar tid verk
{/ / under första 2 1/2 minuter.
Displaytime(Hour);
Delay(blinkDelay*3);
Displaytime(Minute);
}
}
StartTime = millis(); 2 1/2 minuter har gå.
minut ++; Förväg tiden.
IF(Minute==12) timme ++;
IF(Minute>12)
{
minut = 1;
IF(Hour>12) timme = 1;
}
}
/************************************************************
* loop() funktion - krävs
************************************************************/
void loop()
{
IF((Millis()-StartTime) > kalibrera) / / Advance tid var 5 minuter.
{
StartTime = millis();
minut ++;
IF(Minute==12) timme ++;
IF(Minute>12)
{
minut = 1;
IF(Hour>12) timme = 1;
}
}
IF(digitalRead(Button)==Low) / / Visa tid om du trycker på knappen.
{
Displaytime(Hour);
Delay(blinkDelay*3);
Displaytime(Minute);
}
}
/*****************************************************************
* settime() funktion kallas av setup() att ställa in klockan på start.
*****************************************************************/
void settime()
{
int i;
Delay(3000); Vänta tre sekunder efter start.
Jag = 0;
While(i==0)
{
digitalWrite (greenLED, låg); Grön lysdiod blinkar,
StartTime = millis();
While((Millis()-StartTime) < 500) / / räkna blinkar och
{
IF(digitalRead(Button)==Low) i ++; Tryck på knappen när
}
digitalWrite (greenLED, hög); räkningen är lika med timvisaren.
StartTime = millis();
While((Millis()-StartTime) < 500)
{
IF(digitalRead(Button)==Low) i ++;
}
timme ++;
}
Delay(3000); Vänta 3 sekunder mellan timme och minut.
Jag = 0;
While(i==0)
{
digitalWrite (yellowLED, låg); Gul lysdiod blinkar,
StartTime = millis();
While((Millis()-StartTime) < 500) / / räkna blinkar
{
IF(digitalRead(Button)==Low) i ++; Tryck på knappen när
}
digitalWrite (yellowLED, hög); räkningen är lika med minutvisaren.
StartTime = millis();
While((Millis()-StartTime) < 500)
{
IF(digitalRead(Button)==Low) i ++;
}
minut ++;
}
IF(Hour>11) timme = 11; Ställ in timme till 11 och minut
IF(Minute>12) minut = 12.
IF(Hour==0) timme = 11; 12 om över eller noll.
IF(Minute==0) minut = 12.
While(digitalRead(Button)==High); Vänta tills du trycker på knappen starta.
While(digitalRead(Button)==Low); Debounce
}
/************************************************************
* displaytime() funktion visar tiden.
************************************************************/
void displaytime(int hhmm)
{
IF(hhmm>7) / / om att Visa är > 7
{
blinker(greenLED); blinkar grön LED och
hhmm-= 8. subtrahera åtta.
}
annat blinker(yellowLED); annars blinka gult LED.
IF(hhmm>3)
{
blinker(greenLED);
hhmm-= 4.
}
annat blinker(yellowLED);
IF(hhmm>1)
{
blinker(greenLED);
hhmm-= 2.
}
annat blinker(yellowLED);
IF(hhmm==1)
{
blinker(greenLED);
}
annat blinker(yellowLED);
}
/************************************************************
* blinker() blinkar en ledde en gång.
************************************************************/
void blinker (int LED)
{
digitalWrite (LED, låg); Aktivera LED.
Delay(blinkDelay);
digitalWrite (LED, hög); Inaktivera LED.
Delay(blinkDelay);
}