#include <VirtualWire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
const int receive_pin = 12;
const int receive_led = 13;
struct package
{
  float temperature = 0.0;
  float humidity = 0.0;
  float pressure = 0.0;
  float altitude = 0.0;
  int rain;
};


typedef struct package Package;
Package data;



void setup(void) 
{
  delay(1000);  
  Serial.begin(9600);
  pinMode(receive_led,OUTPUT);
  //Initializing the Reciever Module
  vw_set_rx_pin(receive_pin);
  vw_setup(500);   // Bits per sec
  vw_rx_start();       // Start the receiver PLL running
  
  //Initializing the LCd display parameters
  display.begin();
  display.setContrast(55);
  display.display(); // show splashscreen
  delay(2000);
  display.clearDisplay();   // clears the screen and buffer
}
 
void loop(void) 
{
    uint8_t buf[sizeof(data)];
    uint8_t buflen = sizeof(data);
    digitalWrite(receive_led,HIGH);
    if (vw_have_message())  // Is there a packet for us? 
    vw_get_message(buf, &buflen);
    memcpy(&data,&buf,buflen);
    //Output for serial monitor
    Serial.print("\nTemperature: ");
    Serial.print(data.temperature);
    Serial.print(" C");

    Serial.print("\nHumidity: ");
    Serial.print(data.humidity);
    Serial.print(" %");
    
    Serial.print("\nPressure: ");
    Serial.print(data.pressure);
    Serial.println(" mBar");

    Serial.print("Altitude: ");
    Serial.print(data.altitude);
    Serial.println(" m");
    Serial.println("");
    digitalWrite(receive_led,LOW);

    Serial.print("Rain: ");
    Serial.print(data.rain);
    Serial.println(" %");
    Serial.println("");
    digitalWrite(receive_led,LOW);
    
   delay(100);
   nokiaDisplay();

}

void nokiaDisplay()
{
    // Displaying the recieved data
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(BLACK);
    display.setCursor(0,0);
    display.print("Pr:");
    display.print(data.pressure);
    display.println(" hPa");
    display.setTextColor(WHITE, BLACK);
    display.print("Temp: ");
    display.print(data.temperature);
    display.println(" C");
    display.setTextColor(BLACK);
    display.print("Hmdty:");
    display.print(data.humidity);
    display.println(" %");
    display.setTextColor(WHITE, BLACK);
    display.print("Alt: ");
    display.print(data.altitude);
    display.println(" m");
    display.setTextColor(BLACK);
    display.print("Rain:");

    if(data.rain==1)
    {
    display.print("Heavy");
    }
    else if(data.rain==2)
    {
    display.print("Moderate");
    }
    else if(data.rain==3)
    {
    display.print("Light");
    }
    else if(data.rain==4)
    {
    display.print("No rain");
    }
    display.println(".");
    display.display(); // show splashscreen
    delay(2000);
}
