#include "RTClib.h"
#include <DHT.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
RTC_DS1307 rtc;
#define DHTPIN 5
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define LDR_PIN 2
#define LARG 128
#define ALT 64
#define OLED_RESET 4
Adafruit_SSD1306 display(LARG,ALT,&Wire,OLED_RESET);
char daysOfTheWeek[7][12] = {"Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"};
const float GAMMA = 0.7;
const float RL10 = 50;
int BORDO = 3;
const int LARG_SCH = 128;
const int ALT_SCH = 64;
int y, prev_y;
int x = BORDO;
void setup() {
Serial.begin(115200);
dht.begin();
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)){
Serial.println(F("SSD1306 Allocation Failed" ));
for(;;);
}
display.clearDisplay();
axis();
display.display();
}
void loop() {
DateTime now = rtc.now();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
float hif = dht.computeHeatIndex(h);
int analogValue = analogRead(A13);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.print("Umidità: ");
Serial.println(h);
Serial.print("Temperatura: ");
Serial.println(t);
//Serial.print("Coeff: ");
//Serial.println(hif);
Serial.print("Luminosità: ");
Serial.println(lux);
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(daysOfTheWeek[now.dayOfTheWeek()-1]);
Serial.print('/');
Serial.print(now.hour(), DEC);
Serial.print('/');
Serial.print(now.minute(), DEC);
Serial.print('/');
Serial.println(now.second(), DEC);
Serial.println("------------------------");
lux = constrain(lux,0,10000);
y=map(lux,0,10000,ALT_SCH-BORDO,BORDO);
int sec = now.second();
Serial.println(sec);
x = map(sec,0,59,BORDO,(LARG_SCH-BORDO));
Serial.println(x);
display.drawLine(x, prev_y, x+1, y,WHITE);
prev_y=y;
//x=x+1;
if (x >= (LARG_SCH-BORDO)){
x=BORDO;
display.clearDisplay();
axis();
display.display();
}
delay(1000);
display.display();
}
void axis(){
display.drawLine(BORDO, BORDO, BORDO,ALT_SCH-BORDO,WHITE);
display.drawLine(BORDO, ALT_SCH-BORDO, LARG_SCH-BORDO,ALT_SCH-BORDO,WHITE);
display.drawLine(BORDO, BORDO,BORDO-3,BORDO+4,WHITE);
display.drawLine( LARG_SCH-BORDO,ALT_SCH-BORDO, LARG_SCH-BORDO-4,ALT_SCH-BORDO+3,WHITE);
}