//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 ukuranMatahari = 0;
int putaranSalju = 0;
bool perubahan = 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 < 35) {
salju();
} else if (suhu > 35){
matahari();
}
display.display();
delay(1000);
}
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 matahari(){
int centerX = SCREEN_WIDTH / 2;
int centerY = SCREEN_HEIGHT / 2;
if (perubahan){
ukuranMatahari++;
if (ukuranMatahari >= 20) perubahan = false;
} else {
ukuranMatahari--;
if (ukuranMatahari <= 10) perubahan = true;
}
display.drawCircle(centerX,centerY,ukuranMatahari,SSD1306_WHITE);
display.fillCircle(centerX,centerY,ukuranMatahari-2,SSD1306_WHITE);
for (int i = 0; i < 8; i++){
float putaran = i = PI / 4;
int panjangCahaya = ukuranMatahari + 5;
int x1 = centerX + cos(putaran) * ukuranMatahari;
int y1 = centerY + sin(putaran) * ukuranMatahari;
int x2 = centerX + cos(putaran) * (panjangCahaya + ukuranMatahari/2);
int y2 = centerY + sin(putaran) * (panjangCahaya + ukuranMatahari/2);
display.drawLine (x1,y1,x2,y2,SSD1306_WHITE);
}
}
void salju(){
int centerX = SCREEN_WIDTH / 2;
int centerY = SCREEN_HEIGHT / 2;
int ukuran = 20;
float putaran = putaranSalju * PI / 180.0;
putaranSalju = (putaranSalju + 5) % 360;
for (int i = 0; i < 6; i++){
float sudutPutaran = putaran + (i * PI / 3);
int x1 = centerX + cos(sudutPutaran) * (ukuran/2);
int y1 = centerY + sin(sudutPutaran) * (ukuran/2);
display.drawLine (centerX, centerY, x1, y1, SSD1306_WHITE);
float subPutaran1 = sudutPutaran + PI / 4;
float subPutaran2 = sudutPutaran - PI / 4;
int subUkuran = ukuran / 2;
int midX = centerX + cos(sudutPutaran) * (ukuran/2);
int midY = centerY + sin(sudutPutaran) * (ukuran/2);
int subX1 = midX + cos(subPutaran1) * (subUkuran);
int subY1 = midY + sin(subPutaran1) * (subUkuran);
int subX2 = midX + cos(subPutaran2) * (subUkuran);
int subY2 = midY + sin(subPutaran2) * (subUkuran);
display.drawLine(midX, midY, subX1, subY1, SSD1306_WHITE);
display.drawLine(midX, midY, subX2, subY2, SSD1306_WHITE);
}
display.fillCircle(centerX, centerY, 2, SSD1306_WHITE);
}