Arduino Binary Clock (timmar, minuter och sekunder) (2 / 4 steg)
Steg 2: Koden (från http://www.multiwingspan.co.uk av M Atkinson)
orignal kod görs av M Atkinson, kolla hans hemsida http://www.multiwingspan.co.uknågra mindre ändringar gjorts av cronos_80
#include < Wire.h >
#include "RTClib.h"
RTC_DS1307 RTC;
int datapin = 2;
int clockpin = 3;
int latchpin = 4;
int datapin2 = 8;
int clockpin2 = 9;
int latchpin2 = 10;
void setup()
{
Serial.BEGIN(57600);
Wire.BEGIN();
RTC.begin();
IF (!. RTC.isrunning()) {
Serial.println ("RTC körs inte!");
följande rad anger RTC till datum & tid denna skiss sammanställdes
RTC.adjust (DateTime (__DATE__, __TIME__));
}
pinMode (datapin, produktionen);
pinMode (clockpin, produktionen);
pinMode (latchpin, produktionen);
pinMode (datapin2, produktionen);
pinMode (clockpin2, produktionen);
pinMode (latchpin2, produktionen);
}
void loop()
{
DateTime nu = RTC.now();
Alla används för att kontrollera tiden för klockan
Detta avsnitt kan tas bort när allt fungerar
Serial.Print(Now.Hour(), DEC);
Serial.Print(':');
Serial.Print(Now.Minute(), DEC);
Serial.Print(':');
Serial.Print(Now.Second(), DEC);
Serial.println();
Slutet av avsnitt som kan tas bort
int minuter = now.minute();
int SEK = now.second();
int hr = now.hour();
konvertera till 12 timmars tid
om (hr > 12)
{
HR = hr-12.
}
variabler för att beskriva mönster på ljus
byte data1 = 0;
byte data2 = 0;
koda tid
hr = 1. fyra bitar kontrolleras av det första SKIFT registret
för (int jag = 0; jag < 4; i ++)
{
om (bitRead(hr,i)==1)
{
bitWrite(data1,3-i,1);
}
}
minuter på den första skiftregister (sista 4 lysdioder)
för (int jag = 2; jag < 6; i ++)
{
om (bitRead(mins,i)==1)
{
bitWrite(data1,9-i,1);
}
}
minuter på den andra skiftregister (första 2 lysdioder)
för (int jag = 0; jag < 2; i ++)
{
om (bitRead(mins,i)==1)
{
bitWrite(data2,1-i,1);
}
}
sekunder, kontrolleras av andra skiftregister (alla 6 lysdioder)
för (int jag = 2; jag < 8; i ++)
{
om (bitRead(secs,i-2)==1)
{
bitWrite(data2,9-i,1);
}
}
ut informationen
writeByte(data1,1);
writeByte(data2,2);
en paus varje en sekund för seriell monitorutgången
Delay(1000);
}
void writeByte (byte data, byte set)
{
int d, c, l;
om (ange == 1)
{
d = 2.
c = 3;
l = 4;
}
annars om (ange == 2)
{
d = 8.
c = 9.
l = 10;
}
shiftOut d, c, MSBFIRST, data.
växla mellan spärr stiftet så att data visas som en utgång
digitalWrite (l, hög).
digitalWrite (l, låg).
}