//project dhimas r XI TAV
//untuk suhu
#include "DHT.h"
#define DHT_PIN 2
#define DHT_TYPE DHT22
//display olednya
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
DHT HT(DHT_PIN,DHT_TYPE);
float suhu = HT.readTemperature();
float kelembaban = HT.readHumidity();
int posY = 32;
bool naik = true;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(9600);
HT.begin();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(20,20);
display.println("PROJECT DHIMAS");
display.setCursor(45, 30);
display.println("XI TAV");
display.display();
delay(1000);
}
void loop() {
delay(1000);
suhu = HT.readTemperature();
kelembaban = HT.readHumidity();
display.clearDisplay();
oledDisplayHeader();
sensorsuhu();
sensorkelembaban();
display.display();
delay(1000);
display.clearDisplay();
if (suhu < 10) {
snowflake();
} else if (suhu >= 10 && suhu <= 35){
normal();
} else if (suhu > 35){
api();
}
delay(1000);
display.display();
}
void oledDisplayHeader(){
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(55, 0);
display.print("SUHU");
display.setCursor(40, 30);
display.print("KELEMBABAN");
}
void sensorsuhu(){
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(20, 10);
display.println(suhu, 1);
display.setCursor(90, 10);
display.print((char)247);
display.print("C");
}
void sensorkelembaban(){
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(30, 40);
display.println(kelembaban, 1);
display.setCursor(95, 40);
display.print("%");
}
void snowflake(){
display.drawCircle(64, posY, 5, WHITE);
for(int i = 0; i < 360; i += 60) {
float rad = i * PI / 180;
display.drawLine(64 + cos(rad) * 5, posY + sin(rad) * 5,
64 + cos(rad) * 10, posY + sin(rad) * 10, WHITE);
}
display.setTextSize(1);
display.setCursor(0, 0);
display.print("Dingin!");
}
void normal(){
display.drawRect(60, 10, 8, 44, WHITE);
display.fillCircle(64, 54, 6, WHITE);
display.fillRect(61, 34, 6, 20, WHITE);
}
void api(){
int api_x = 64;
display.fillTriangle(api_x, posY-10,
api_x-10, posY+10,
api_x+10, posY+10, WHITE);
display.fillCircle(api_x, posY, 5, BLACK);
display.setTextSize(1);
display.setCursor(0, 0);
display.print("PANAS!");
display.display();
if(naik) {
posY--;
if(posY < 20) naik = false;
} else{
posY++;
if(posY > 44) naik = true;
}
suhu+= 0.1;
if (suhu > 35) suhu = 15;
delay(50);
}