Como mostrar em tela a hora atual, temperatura, umidade e dia com arduino e lcd

Como poderia fazer para Arduino um programa que fizesse isso. Tenho esse código que mostra a temperatura e umidade mas falta a hora, day, l e on.

//Programa : Temperatura e umidade com o DHT11 e LCD 16x2
//Autor : allan

#include <LiquidCrystal.h> //Carrega a biblioteca LCD
#include <DHT.h> //Carrega a biblioteca DHT

//Define a ligação ao pino de dados do sensor
#define DHTPIN A5

//Define o tipo de sensor DHT utilizado
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

//Define os pinos que serão ligados ao LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//Array simbolo grau
byte grau[8] ={ B00001100,
B00010010,
B00010010,
B00001100,
B00000000,
B00000000,
B00000000,
B00000000,};

void setup()
{
Serial.begin(9600); //Inicializa a serial
lcd.begin(20,4); //Inicializa LCD
lcd.clear(); //Limpa o LCD
//Cria o caractere customizado com o simbolo do grau
lcd.createChar(0, grau);
}

void loop()
{

De uma olhada nos exemplos que tem na própria IDE, exemplo de Crystal Liquid, aqui você vai aprender a mostrar os dados na tela. Quanto a hora e dia, de onde você vai tirar essas informações? De uma Shield? De onde?

veja ser ter serve?

#include <LiquidCrystal.h>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

int temperature_pin = 0;
int relay_pin = 8;
int ledout_pin = 9;

void setup(){
pinMode(temperature_pin, INPUT);
pinMode(relay_pin, OUTPUT);
pinMode(ledout_pin, OUTPUT);

Serial.begin(9600);
lcd.begin(16,2);
lcd.print(“Temperature:”);
lcd.setCursor(0,1);
}

void loop(){
int rawvoltage = analogRead(temperature_pin);

float millivolts = (rawvoltage/1024.0) * 5000;
float celsius = millivolts/10;

lcd.setCursor(0,1);
lcd.print(celsius);

if(celsius >= 30.){
digitalWrite(ledout_pin, HIGH);
digitalWrite(relay_pin, HIGH);
}else{
digitalWrite(ledout_pin, LOW);
digitalWrite(relay_pin, LOW);
}

//Serial.print(celsius);
//Serial.println(" degrees Celsius");

//Serial.print((celsius * 9)/5 + 32);
//Serial.println(" degrees Fahrenheit");
delay(100);
}

Esse é um código pra mostrar hora/data e dia da semana sincronizado por NTP

#include <LiquidCrystal.h>
#include <Time.h>
#include <TimeLib.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SPI.h>

LiquidCrystal lcd(8, 9, 45, 5, 6, 7);

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress timeServer(132, 163, 4, 101);

const int timeZone = -3;

EthernetUDP Udp;
unsigned int localPort = 8888;

void setup()
{
  lcd.begin(16, 2);
  Serial.begin(9600);
  while (!Serial) ;
  delay(250);
  Serial.println("TimeNTP Example");
  if (Ethernet.begin(mac) == 0) {
    while (1) {
      Serial.println("Failed to configure Ethernet using DHCP");
      delay(10000);
    }
  }
  Serial.print("IP number assigned by DHCP is ");
  Serial.println(Ethernet.localIP());
  Udp.begin(localPort);
  Serial.println("waiting for sync");
  setSyncProvider(getNtpTime);
}

time_t prevDisplay = 0;

void loop() {
  if (timeStatus() != timeNotSet) {
    if (now() != prevDisplay) {
      prevDisplay = now();
      digitalClockDisplay();
    }
  }
}

void digitalClockDisplay() {
  lcd.setCursor(4, 0);
  printDigits(hour());
  lcd.print(":");
  printDigits(minute());
  lcd.print(":");
  printDigits(second());
  lcd.setCursor(0, 1);
  printDay();
  lcd.setCursor(6, 1);
  printDigits(day());
  lcd.print("/");
  printDigits(month());
  lcd.print("/");
  lcd.print(year());
}

void printDigits(int digits) {
  if (digits < 10)
    lcd.print('0');
  lcd.print(digits);
}

void printDay() {
  int day;
  day = weekday();
  if (day == 1) {
    lcd.print("Dom.");
  }
  if (day == 2) {
    lcd.print("Seg.");
  }
  if (day == 3) {
    lcd.print("Ter.");
  }
  if (day == 4) {
    lcd.print("Qua.");
  }
  if (day == 5) {
    lcd.print("Qui.");
  }
  if (day == 6) {
    lcd.print("Sex.");
  }
  if (day == 7) {
    lcd.print("Sab.");
  }
}

const int NTP_PACKET_SIZE = 48;
byte packetBuffer[NTP_PACKET_SIZE];

time_t getNtpTime()
{
  while (Udp.parsePacket() > 0) ;
  Serial.println("Transmit NTP Request");
  sendNTPpacket(timeServer);
  uint32_t beginWait = millis();
  while (millis() - beginWait < 1500) {
    int size = Udp.parsePacket();
    if (size >= NTP_PACKET_SIZE) {
      Serial.println("Receive NTP Response");
      Udp.read(packetBuffer, NTP_PACKET_SIZE);  // read packet into the buffer
      unsigned long secsSince1900;
      secsSince1900 =  (unsigned long)packetBuffer[40] << 24;
      secsSince1900 |= (unsigned long)packetBuffer[41] << 16;
      secsSince1900 |= (unsigned long)packetBuffer[42] << 8;
      secsSince1900 |= (unsigned long)packetBuffer[43];
      return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;
    }
  }
  Serial.println("No NTP Response :-(");
  return 0;
}

void sendNTPpacket(IPAddress & address)
{
  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(address, 123);
  Udp.write(packetBuffer, NTP_PACKET_SIZE);
  Udp.endPacket();
}