Paso 6: Añadir la pantalla LCD
LCD Arduino UNO
A5 SCL
SDA A4
VCC + 5v
GND Gnd
El código NTP anterior con las incorporaciones de LCD están a continuación:
ejemplo de código se originó en el http://www.openreefs.com/ntpServer
modificado por 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 >
Configuración de LCD
#define I2C_ADDR 0x3F / / <<---añadir tu dirección aquí. Búsqueda de analizador de I2C
#define BACKLIGHT_PIN 3
#define En_pin 2
#define y 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
Lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin) de LiquidCrystal_I2C;
/ * *** Ethernet Tarjeta configuración *** * /
Seleccione su dirección de Mac de la tarjeta de Ethernet
mac de bytes [] = {0x90, 0xA2, 0xDA, 0 x 00, 0x23, 0x36};
/ * *** Configuración del servidor NTP *** * /
/ * servidor NTP us.pool.ntp.org
(Configurado en el servidor de tiempo de la opción) * /
Dirección IP timeServer (216, 23, 247, 62);
/ * Seleccione el desplazamiento (en segundos) a su hora local
Este ejemplo es GMT - 4 * /
const timeZoneOffset largo =-14400 L;
/ * Se sincroniza al servidor NTP cada 15 segundos para la prueba,
a 1 hora o más razonable * /
unsigned int ntpSyncTime = 3600;
/ * MODIFICAR ESTAS VARIABLES BAJO SU PROPIO RIESGO * /
local puerto para paquetes UDP
unsigned int PuertoLocal = 8888;
Marca de tiempo NTP es en los primeros 48 bytes del mensaje
const int NTP_PACKET_SIZE = 48;
Buffer para paquetes entrantes y salientes
byte packetBuffer [NTP_PACKET_SIZE];
Una instancia de la UDP nos permite enviar y recibir paquetes sobre UDP
EthernetUDP Udp;
Realiza un seguimiento de cómo hace mucho tiempo actualizamos el servidor NTP
ntpLastUpdate largo sin signo = 0;
Revise el último reloj (no en producción)
time_t prevDisplay = 0;
void setup() {}
LCD.Begin (16.2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
Serial.Begin(9600);
Escudo de Ethernet y configuración NTP
int i = 0;
int DHCP = 0;
DHCP = Ethernet.begin(mac);
Intentar obtener la configuración de dhcp 30 veces antes de abandonar
mientras que (DHCP == 0 & & i < 30) {}
Delay(1000);
DHCP = Ethernet.begin(mac);
i ++;
}
if (!. DHCP) {}
Serial.println ("DHCP error");
for(;;); //Infinite lazo porque DHCP no
}
Serial.println ("DHCP el éxito");
Tratar de conseguir la fecha y hora
trys int = 0;
while(!getTimeAndDate() & & trys < 10) {}
trys ++;
}
}
No altera esta función, es utilizado por el sistema
int getTimeAndDate() {}
int bandera = 0;
UDP.Begin(localPort);
sendNTPpacket(timeServer);
Delay(1000);
Si (Udp.parsePacket()) {}
UDP.Read(packetBuffer,NTP_PACKET_SIZE); Lea el paquete en el buffer
highWord largo sin firmar, lowWord, época;
highWord = palabra (packetBuffer [40], packetBuffer[41]);
lowWord = palabra (packetBuffer [42], packetBuffer[43]);
época = highWord << 16 | lowWord;
época = época - 2208988800 + timeZoneOffset;
bandera = 1;
setTime(epoch);
ntpLastUpdate = now();
}
regresar de bandera;
}
No altera esta función, es utilizado por el sistema
sendNTPpacket largo sin signo (dirección IP y dirección)
{
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 (dirección, 123);
UDP.Write(packetBuffer,NTP_PACKET_SIZE);
Udp.endPacket();
}
Reloj de la hora y fecha (básico)
void 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);
Si (hour() < 10) {}
LCD.Print("0"); }
Si {} (hour() > 12)
LCD.Print("0");
LCD.Print(hour()-12); } else {}
LCD.Print(hour()); }
LCD.Print(":");
Si (minute() < 10) {}
LCD.Print("0"); }
LCD.Print(minute());
LCD.Print(":");
Si (second() < 10) {}
LCD.Print("0"); }
LCD.Print(Second());
Si {} (hour() > 12)
LCD.Print ("PM"); }
Else {}
LCD.Print ("AM"); }
lcd.setCursor (0,1);
Si (localtime < 10) {}
LCD.Print("0"); }
LCD.Print(month());
LCD.Print("/");
Si (day() < 10) {}
LCD.Print("0"); }
LCD.Print(Day());
LCD.Print("/");
LCD.Print(Year());
}
Función de utilidad para la visualización del reloj: impresiones anteriores a colon y lleva 0
void printDigits (int dígitos) {}
Serial.Print(":");
if(digits < 10)
Serial.Print('0');
Serial.Print(digits);
}
Esto es donde sucede toda la magia...
void loop() {}
Actualizar tan a menudo como la hora de que ajustar en la parte superior el tiempo via servidor NTP
Si (ahora ()-ntpLastUpdate > ntpSyncTime) {}
trys int = 0;
while(!getTimeAndDate() & & trys < 10) {}
trys ++;
}
if(trys<10) {}
Serial.println ("ntp server update success");
}
Else {}
Serial.println ("ntp server update error");
}
}
Mostrar la hora si ha cambiado por más de un segundo.
Si (now()! = prevDisplay) {}
prevDisplay = now();
clockDisplay();
}
}