//-------------DISCLAIMER-------------
//iam not a good programator, nor is the english my language so sorry for some mistakes :D
#include <LiquidCrystal_I2C.h>
#include <SHT2x.h>
#include <Wire.h>
#define I2C_ADDR 0x27 //address of the
#define LCD_COLUMNS 16
#define LCD_LINES 2
//-------------CONSTANTS-------------
const int ledRead = 4; //GREEN LED signaling when the sensor is reading
const int ledError = 2; //RED LED signaling when error with sensor ocured
const int ledWaiting = 3; //YELLOW LED signaling when its waiting for input or interval run out (see interval for interval change)
const int ledRUN = 5; //GREEN LED signaling when the program runs (constant on)
const int buttonLight = 6; //Button for lightninh the screen with back light
const int buttonYellow = 7; //Button which is not implemented yet (probably for restart or instant read)
//-------------variables-------------
float temperature = 0; //variable for storing temperature
float humidity = 0; //variable for storing humidity
bool digitalSwitch = false; //boolean for storing ON OFF state of back light
unsigned long errorCode = 0; //variable for storing current error code
unsigned long errorCodeBefore = 0; //variable for storing previous error code
unsigned long previousMillis = 0; //variable that stores time at the start of the timer (waiting period)
const long interval = 2500; //<----- you can customize the interval of the waiting period
SHT2x sht; //sht is the sensor (currently not in simulation)
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES); //lcd is for the LCD I2C screen
void setup() {
pinMode(ledRUN, OUTPUT);
digitalWrite(ledRUN, HIGH);
Wire.begin();
sht.begin();
Serial.begin(115200);
lcd.init();
pinMode(ledRead, OUTPUT);
pinMode(ledError, OUTPUT);
pinMode(ledWaiting, OUTPUT);
pinMode(ledWaiting, OUTPUT);
pinMode(buttonLight, INPUT);
pinMode(buttonYellow, INPUT);
//lcd.backlight();
//lcd.setCursor(0, 0);
//lcd.print("Hello, world!");
//lcd.noBacklight();
}
void loop() {
digitalWrite(ledRead, HIGH);
delay(500);
sht.read();
digitalWrite(ledRead, LOW);
errorCode = sht.getError();
if (errorCode != errorCodeBefore) {
if (errorCode == 0) {
errorCodeBefore = errorCode;
digitalWrite(ledError, LOW);
temperature = sht.getTemperature();
humidity = sht.getHumidity();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp: " + String(temperature));
lcd.setCursor(0,1);
lcd.print("Humi: " + String(humidity));
} else if (errorCode == 130) {
errorCodeBefore = errorCode;
digitalWrite(ledError, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("----ERR:0x" + String(errorCode,HEX) + "----");
lcd.setCursor(0,1);
lcd.print("---READ ERROR---");
} else {
errorCodeBefore = errorCode;
digitalWrite(ledError, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("----ERR:0x" + String(errorCode,HEX) + "----");
lcd.setCursor(0,1);
lcd.print("----DIFFERENT----");
}
} else if (errorCode == 0) {
temperature = sht.getTemperature();
humidity = sht.getHumidity();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp: " + String(temperature));
lcd.setCursor(0,1);
lcd.print("Humi: " + String(humidity));
}
previousMillis = millis();
digitalWrite(ledWaiting, HIGH);
while (digitalRead(buttonLight) == LOW && digitalRead(buttonYellow) == LOW) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
break;
}
}
digitalWrite(ledWaiting, LOW);
if (digitalRead(buttonLight) == HIGH) {
digitalSwitch = !digitalSwitch;
}
if (digitalSwitch) {
lcd.backlight();
} else {
lcd.noBacklight();
}
}