Stap 6: Het toevoegen van het LCD-scherm
LCD-Arduino UNO
SCL-A5
SDA A4
VCC + 5v
GND Gnd
De voorgaande NTP-code met de LCD-toevoegingen zijn hieronder:
code van de steekproef is ontstaan op http://www.openreefs.com/ntpServer
bewerkt door Steve Spence, http://arduinotronics.blogspot.com
#include < SPI.h >
#include < Ethernet.h >
#include < EthernetUdp.h >
#include < Time.h >
#include < Wire.h >
#include < LCD.h >
#include < LiquidCrystal_I2C.h >
LCD-instellingen
#define I2C_ADDR 0x3F / / <<---uw adres hier toevoegen. Vinden van I2C Scanner
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
/ * *** Ethernet-Card-instellingen *** * /
Zet dit op uw Mac-adres van Ethernet-kaart
byte mac [] = {0x90, 0xA2, 0xDA, 0x00, 0x23, 0x36};
/ * *** NTP Server-instellingen *** * /
/ * us.pool.ntp.org NTP-server
(Ingesteld op uw tijdserver van keuze) * /
IPAdres tijdserver (216 23, 247, 62);
/ * Zet dit op de offset (in seconden) op uw lokale tijd
In dit voorbeeld is GMT - 4 * /
Const lange timeZoneOffset = L-14400;
/ * Syncs met NTP server elke 15 seconden voor het testen,
ingesteld op 1 uur of meer redelijk * /
unsigned int ntpSyncTime = 3600;
/ * HET WIJZIGEN VAN DEZE VARIABELEN OP UW EIGEN RISICO * /
lokale poort te luisteren naar UDP-pakketten
unsigned int localPort = 8888;
NTP-tijdstempel is in de eerste 48 bytes van het bericht
Const int NTP_PACKET_SIZE = 48;
Buffer te houden van binnenkomende en uitgaande pakketten
byte packetBuffer [NTP_PACKET_SIZE];
Een UDP-instantie te laten verzenden en ontvangen van pakketten via UDP
EthernetUDP Udp;
Houdt spoor van hoe lang geleden we de NTP-server bijgewerkt
unsigned long ntpLastUpdate = 0;
Controleren van de laatste tijd klok weergegeven (niet in productie)
time_t prevDisplay = 0;
VOID Setup {}
LCD.begin (16,2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
Serial.begin(9600);
Ethernet-shield en NTP setup
int i = 0;
int DHCP = 0;
DHCP = Ethernet.begin(mac);
Proberen om DHCP-instellingen 30 keer voordat hij
terwijl (DHCP == 0 & & ik < 30) {}
delay(1000);
DHCP = Ethernet.begin(mac);
i ++;
}
if (!. DHCP) {}
Serial.println ("DHCP is mislukt");
for(;;); //Infinite lus omdat DHCP is mislukt
}
Serial.println ("DHCP-Success");
Proberen om de datum en tijd
int trys = 0;
while(!getTimeAndDate() & & trys < 10) {}
trys ++;
}
}
Breng geen wijzigingen aan deze functie, het wordt gebruikt door het systeem
int getTimeAndDate() {}
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;
}
Breng geen wijzigingen aan deze functie, het wordt gebruikt door het systeem
unsigned long sendNTPpacket (IP-adres & adres)
{
memset (packetBuffer, 0, NTP_PACKET_SIZE);
packetBuffer [0] = 0b11100011;
packetBuffer [1] = 0;
packetBuffer [2] = 6;
packetBuffer [3] = 0xEC;
packetBuffer [12] = 49;
packetBuffer [13] = 0x4E;
packetBuffer [14] = 49;
packetBuffer [15] = 52;
Udp.beginPacket (adres, 123);
UDP.write(packetBuffer,NTP_PACKET_SIZE);
Udp.endPacket();
}
Weergave van de klok van de tijd en datum (Basic)
ongeldig clockDisplay() {}
Serial.Print(Hour());
printDigits(minute());
printDigits(second());
Serial.Print("");
Serial.Print(Day());
Serial.Print("");
Serial.Print(month());
Serial.Print("");
Serial.Print(Year());
Serial.println();
lcd.setCursor (0,0);
Als (uur() < 10) {}
LCD.Print("0"); }
Als (uur() > 12) {}
LCD.Print("0");
LCD.Print(Hour()-12); } else {}
LCD.Print(Hour()); }
LCD.Print(":");
Als (minute() < 10) {}
LCD.Print("0"); }
LCD.Print(Minute());
LCD.Print(":");
Als (second() < 10) {}
LCD.Print("0"); }
LCD.Print(Second());
Als (uur() > 12) {}
LCD.Print ("PM"); }
else {}
LCD.Print ("AM"); }
lcd.setCursor (0,1);
Als (month() < 10) {}
LCD.Print("0"); }
LCD.Print(month());
LCD.Print("/");
Als (day() < 10) {}
LCD.Print("0"); }
LCD.Print(Day());
LCD.Print("/");
LCD.Print(Year());
}
Utility functie voor weergave van de klok: prenten voorafgaand aan de dikke darm en 0 voorsprong
VOID printDigits (int cijfers) {}
Serial.Print(":");
if(digits < 10)
Serial.Print('0');
Serial.Print(digits);
}
Dit is waar alle magie gebeurt...
void loop {}
De tijd zo vaak als de tijd die u ingesteld boven via NTP-server bijwerken
Als (nu ()-ntpLastUpdate > ntpSyncTime) {}
int trys = 0;
while(!getTimeAndDate() & & trys < 10) {}
trys ++;
}
if(trys<10) {}
Serial.println ("ntp server update success");
}
else {}
Serial.println ("ntp server update failed");
}
}
Tijd weergeven als het is gewijzigd door meer dan een seconde.
Als (nu()! = prevDisplay) {}
prevDisplay = now();
clockDisplay();
}
}