#include "DHT.h"
#include <TimerOne.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
const int TEMP_UP = 9;
const int TEMP_DW = 8;
const int FAN_UP = 13;
const int FAN_DW = 12;
int fan_lavel =1;
int suhu_level =11;
byte bar[] = {
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
};
byte wind1[] = {
B00001,
B00011,
B00011,
B00001,
B01111,
B00110,
B00000,
B00000
};
byte wind2[] = {
B00000,
B00000,
B01100,
B11110,
B10000,
B11000,
B11000,
B10000
};
byte tem[] = {
B01110,
B01010,
B01010,
B01010,
B01110,
B11111,
B11111,
B01110
};
void setup() {
pinMode(TEMP_UP, INPUT);
pinMode(TEMP_DW, INPUT);
pinMode(FAN_UP, INPUT);
pinMode(FAN_DW, INPUT);
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
lcd.createChar(1 , wind1);
lcd.createChar(2 , wind2);
lcd.createChar(3 , tem);
lcd.createChar(4 , bar);
icon();
print_fan_bar(fan_lavel);
print_suhu_bar(suhu_level);
}
void loop() {
delay(3000);
int humi = dht.readHumidity(); // read humidity
int suhu = dht.readTemperature(); // read temperature
// lcd.clear();
// icon();
// check if any reads failed
if (isnan(humi) || isnan(suhu)) {
lcd.setCursor(0, 0);
lcd.print("Failed");
} else {
print_suhu(12);
print_humi(45);
}
}
void print_fan_bar(int lv){
for(int i=1;i<=lv;i++){
lcd.setCursor(lv + 1,0);
lcd.print((char)255);
}
}
void print_humi(int h){
char str[3];
sprintf(str,"%d%%", h);
lcd.setCursor(13,0);
lcd.print(str);
}
void print_suhu(int t){
char str[3];
sprintf(str,"%dC", t);
lcd.setCursor(13,1);
lcd.print(str);
}
void print_suhu_bar(int lv){
int sisa = lv % 2;
int i = lv / 2;
lcd.setCursor(2,1);
for(int j=1;j<=i;j++){
lcd.print((char)255);
}
if(sisa > 0){
lcd.write(4);
}
}
void icon(){
lcd.setCursor(0,0);
lcd.write(1);
lcd.setCursor(1,0);
lcd.write(2);
lcd.setCursor(0,1);
lcd.write(3);
}