#include <SPI.h>
#include "SSD1306AsciiWire.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHTesp.h"
const int DHT_PIN = 5;
DHTesp dhtSensor;
#define SERIAL_OPTION 0
#include <RTClib.h>
RTC_DS1307 rtc;
char daysOfTheWeek[7] [12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
SSD1306AsciiWire oled;
const int buttonPin1 = A1;
int buttonState1 = 0;
#define redPin 11
#define greenPin 10
#define bluePin 9
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// กำหนดขาต่อ I2C กับจอ OLED
#define OLED_RESET -1
Adafruit_SSD1306 OLED(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//เป็นตัวเลข
//----------------------------
int Count = 0;
int ldrPin = A0;
int ldrVal = 0;
// LDR Characteristics
const float GAMMA = 0.7;
const float RL10 = 50;
void setup() {
Serial.begin(9600);
rtc.begin();
pinMode(redPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(buttonPin1, INPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
if (!OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 allocation failed");
} else {
Serial.println("ArdinoAll OLED Start Work !!!");
}
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
Serial.println("Setting the time...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop() {
DateTime now = rtc.now();
ldrVal = analogRead(ldrPin);
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 == 0) {
while (digitalRead(buttonPin1) == 0) {
}
//delay(100);
Count ++;
if(Count>3){
Count=1;
}
}
if(Count==1){
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
//delay(2000); // Wait for a new reading from the sensor (DHT22 has ~0.5Hz sample rate)
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 10);
OLED.setTextSize(2);
OLED.println("Humidity: " + String(data.humidity, 1) + "%");
OLED.display(); // สั่งให้จอแสดงผล
// กำหนด LED สีเหลือง
digitalWrite(redPin, 255);
digitalWrite(greenPin, 255);
digitalWrite(bluePin, 0);
// analogWrite(redPin, 0);
// analogWrite(greenPin, 255);
// analogWrite(bluePin, 0);
}
if(Count==2){
ldrVal = analogRead(ldrPin);
float voltage = ldrVal / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.println(lux);
Serial.println("---");
// delay(2000); // Wait for a new reading from the sensor (DHT22 has ~0.5Hz sample rate)
OLED.clearDisplay(); // ลบภาพในหน้าจอทั้งหมด
OLED.setTextColor(WHITE, BLACK); //กำหนดข้อความสีขาว ฉากหลังสีดำ
OLED.setCursor(0, 10); // กำหนดตำแหน่ง x,y ที่จะแสดงผล
OLED.setTextSize(3); // กำหนดขนาดตัวอักษร
OLED.println(lux);
OLED.display(); // สั่งให้จอแสดงผล
// delay(500);
// กำหนด LED สีม่วง
digitalWrite(redPin, 120);
digitalWrite(greenPin, 0);
digitalWrite(bluePin, 255);
}
///////////////------------------------------------------////////////////////
if(Count==3){
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("-");
OLED.clearDisplay(); // ลบภาพในหน้าจอทั้งหมด
OLED.setTextColor(WHITE, BLACK); //กำหนดข้อความสีขาว ฉากหลังสีดำ
OLED.setCursor(0, 10); // กำหนดตำแหน่ง x,y ที่จะแสดงผล
OLED.setTextSize(2); // กำหนดขนาดตัวอักษร
OLED.println("Temp:" + String(data.temperature, 2));
OLED.display(); // สั่งให้จอแสดงผล
//delay(500);
// กำหนด LED สีชมพู
digitalWrite(redPin, 255);
digitalWrite(greenPin, 0);
digitalWrite(bluePin, 120 );
}
if(Count==0){
DateTime now = rtc.now(); //การ set วันเวลา
int year = (now.year(),DEC); // ชื่อตัวแปรคือ year ส่วน now.year คือ ค่าตัวแปร
int month = (now.month(),DEC);
int day = (now.day(),DEC);
int dayofweek = now.dayOfTheWeek();
Serial.print("Current Time : ");
Serial.print(now.hour(),DEC);
Serial.print(":");
Serial.print(now.minute(),DEC);
Serial.print(":");
Serial.print(now.second(),DEC);
Serial.println();
Serial.println();
OLED.clearDisplay(); // ลบภาพในหน้าจอทั้งหมด
OLED.setTextColor(WHITE, BLACK); //กำหนดข้อความสีขาว ฉากหลังสีดำ
OLED.setCursor(43, 5); // กำหนดตำแหน่ง x,y ที่จะแสดงผล
OLED.setTextSize(1.5); // กำหนดขนาดตัวอักษร
OLED.println("LAB14");
OLED.setCursor(26, 20);
OLED.setTextSize(1.5);
OLED.println("APPLICATION");
OLED.setCursor(26, 40);
OLED.setTextSize(1.5);
OLED.println(now.hour(),DEC);
OLED.setCursor(41, 40);
OLED.setTextSize(1.5);
OLED.println(":");
OLED.setCursor(50, 40);
OLED.setTextSize(1.5);
OLED.println(now.minute(),DEC);
OLED.setCursor(66, 40);
OLED.setTextSize(1.5);
OLED.println(":");
OLED.setCursor(73, 40);
OLED.setTextSize(1.5);
OLED.println(now.second(),DEC);
// OLED.println(now.hour(),DEC + ":" + now.minute(),DEC + ":" + now.second(),DEC );
//OLED.println("Temp: " + String(data.temperature, 2) + "°C");
OLED.display(); // สั่งให้จอแสดงผล
}
Serial.println(Count);
}