Arduino Internet tid klienten (8 / 10 steg)
Steg 8: Standard vs sommartid
Först, vi behöver läsa en switch för att bestämma format, så vi behöver byta några kod baserad på resultaten av att läsa.
Vi kommer att använda stift 6 för växeln, som Ethernet Shield själv använder stift 4, 10, 11, 12 och 13.
Anslut en växla mellan stift 6 och marken. Du behöver inte en pullup motstånd, som vi kommer att använda en inbyggd i arduino med kommandot INPUT_PULLUP.
För att göra detta arbete, måste du återställa eller power cykeln din Arduino mellan förändringar, eftersom växlingskoden inte ogiltig loop.
Här är drabbade koden som det ser ut nu:
/ * Anger detta till offset (i sekunder) till din lokala tid
Detta exempel är GMT - 4 * /
CONST long timeZoneOffset =-14400 L.
ändra till / * anger detta till offset (i sekunder) till din lokala tid
Detta exempel är GMT - 4 * /
lång timeZoneOffset;
Lägg till detta innan void installationen:
DST Switch
int dstPin = 6; switch ansluten till digital stift 5
int dstVal = 0; variabel för att lagra Läs värdet
och byta ut hela int getTimeAndDate() funktionen med koden nedan:
Ändrar inte denna funktion, det används av systemet
int getTimeAndDate() {
Tidszon switch
pinMode (dstPin, INPUT_PULLUP); Anger det digitala stiftet 6 som indata och aktiverar dra upp motstånd
dstVal = digitalRead(dstPin); Läs ingångsstiftet
om (dstVal == 1) {
timeZoneOffset =-14400 L.
} annat {
timeZoneOffset =-18000 L.
}
int flagga = 0;
UDP.BEGIN(localPort);
sendNTPpacket(timeServer);
Delay(1000);
om (Udp.parsePacket()) {
UDP.Read(packetBuffer,NTP_PACKET_SIZE); läsa in paket i bufferten
osignerade långa highWord, lowWord, epoken;
highWord = word (packetBuffer [40], packetBuffer[41]);
lowWord = word (packetBuffer [42], packetBuffer[43]);
epoken = highWord << 16 | lowWord;
epoken = epok - 2208988800 + timeZoneOffset;
Flagga = 1;
setTime(epoch);
ntpLastUpdate = now();
}
returnera flagg.
}