Stap 8: Standaard vs. Daylight Savings Time
Eerst moeten we lezen een schakelaar om te bepalen van de indeling, dan moeten we overstappen van sommige code op basis van de resultaten van die gelezen.
Wij zullen gebruiken pin 6 voor de switch, als de Ethernet-Shield zelf gebruik pinnen 4, 10, 11, 12 & 13.
Sluit een switch tussen pin 6 en grond. U hoeft niet een pullup weerstand, omdat we het een ingebouwd in de arduino met behulp van de opdracht INPUT_PULLUP zal gebruiken.
Te halen zulks werkzaamheden, u moet resetten of macht cyclus je Arduino tussen veranderingen, zoals de schakeloptie wetboek zit niet in ongeldig lus.
Hier is de waarin dit probleem optreedt code zoals het er nu uitziet:
/ * Zet dit op de offset (in seconden) op uw lokale tijd
In dit voorbeeld is GMT - 4 * /
Const lange timeZoneOffset = L-14400;
wijzigen / * zet dit op de offset (in seconden) op uw lokale tijd
In dit voorbeeld is GMT - 4 * /
lange timeZoneOffset;
Voeg dit voorafgaand aan void setup:
DST-Switch
int dstPin = 6; switch aangesloten op digital pin 5
int dstVal = 0; variabele de lees waarde op te slaan
en veranderen de hele int getTimeAndDate() functie met de onderstaande code:
Breng geen wijzigingen aan deze functie, het wordt gebruikt door het systeem
int getTimeAndDate() {}
Tijdzone schakelaar
pinMode (dstPin, INPUT_PULLUP); de digitale pin 6 ingesteld als input en activeert pull up weerstand
dstVal = digitalRead(dstPin); Lees de invoer pin
Als (dstVal == 1) {}
timeZoneOffset = L-14400;
} else {}
timeZoneOffset = L-18000;
}
int vlag = 0;
UDP.begin(localPort);
sendNTPpacket(timeServer);
delay(1000);
Als (Udp.parsePacket()) {}
UDP.Read(packetBuffer,NTP_PACKET_SIZE); Lees het pakket in de buffer
unsigned long highWord, lowWord, tijdperk;
highWord = woord (packetBuffer [40], packetBuffer[41]);
lowWord = woord (packetBuffer [42], packetBuffer[43]);
tijdperk = highWord << 16 | lowWord;
tijdperk = epoch - 2208988800 + timeZoneOffset;
vlag = 1;
setTime(epoch);
ntpLastUpdate = now();
}
retourneren van de vlag;
}