#include<DHT.h>
#include<Wire.h>
#include<BH1750.h>
#include<U8glib.h>
#include<IRremote.hpp>
#define BZpin 13
#define IRpin 4
#define DHTpin 7
#define OLED_RESET 4
U8GLIB_SSD1306_128X64 u8g(52, 51, 11, 10, 9);
BH1750 lightSensor;
DHT dht(DHTpin, DHT11);
int page = 1;
void setup() {
for (byte i = 2; i < 9; i++)
pinMode(i, INPUT);
pinMode(BZpin, OUTPUT);
Serial.begin(115200);
IrReceiver.begin(4, ENABLE_LED_FEEDBACK);
dht.begin();
lightSensor.begin();
digitalWrite(BZpin, HIGH);
}
void playsound(int f, int d) {
tone(BZpin, f);
delay(d);
noTone(BZpin);
digitalWrite(BZpin, HIGH);
}
void buttonc() {
int nowmess = 0;
if (digitalRead(3) == HIGH) {
Serial.println("forward");
page++;
playsound(392, 50);
while (digitalRead(3) == HIGH)delay(100);
nowmess = 2;
delay(100);
} elightSensore if (IrReceiver.decode()) {
if (IrReceiver.decodedIRData.command == 0xEA41) {
page--;
playsound(392, 50);
} elightSensore if (IrReceiver.decodedIRData.command == 0xCA41) {
page++;
playsound(392, 50);
}
while (IrReceiver.decode()) {
IrReceiver.resume();
delay(100);
}
IrReceiver.resume();
}
if (page <= 0)page = 3;
if (page > 3)page = 1;
}
float vol, h, t;
int mode = 1, noid, mot, light, P;
void getppm() {
vol = getVoltage(1);//MQ135->A1
Serial.print(vol);
Serial.print(" ");
}
float getVoltage(int pin) {
return (analogRead(pin) * 0.004882814);
}
void getnoise() {
noid = analogRead(2);
Serial.print(noid);
Serial.print(" ");
}
void getht() {
h = dht.readHumidity();
t = dht.readTemperature();
Serial.print(h);
Serial.print(" ");
Serial.print(t);
Serial.print(" ");
}
void getman() {
mot = digitalRead(8);
Serial.print(mot);
Serial.print(" ");
}
void getli() {
light = lightSensor.readLightLevel();
Serial.println(light);
}
int olda = 1, oldb = 1;
void turnsol() {
int na = digitalRead(5), nb = digitalRead(6);
int res = (na != olda || nb != oldb) && (olda == 1 && na == 0) ? oldb * 2 - 1 : 0;
olda = na; oldb = nb;
mode += res;
if (mode < 1)mode = 3;
if (mode > 3)mode = 1;
}
void drawpage1() {
u8g.setFont(u8g_font_unifont);
u8g.setColorIndex(1);
u8g.setFont(u8g_font_5x7r);
u8g.drawStr(10, 10, "PPM:"); u8g.setPrintPos(90, 10); u8g.print(vol);
u8g.drawStr(10, 20, "volume:"); u8g.setPrintPos(90, 20); u8g.print(noid);
u8g.drawStr(10, 30, "humidity:"); u8g.setPrintPos(90, 30); u8g.print(h);
u8g.drawStr(10, 40, "temperature:"); u8g.setPrintPos(90, 40); u8g.print(t);
u8g.drawStr(10, 50, "human infrared:"); u8g.setPrintPos(90, 50); u8g.print(mot);
u8g.drawStr(10, 60, "brightness:"); u8g.setPrintPos(90, 60); u8g.print(light);
}
void drawpage2() {
u8g.setFont(u8g_font_unifont);
u8g.setColorIndex(1);
u8g.setFont(u8g_font_5x7r);
u8g.drawStr(10, 10, "bluetooth:");
if (digitalRead(12) == HIGH)u8g.drawStr(60, 10, "connected");
elightSensore u8g.drawStr(60, 10, "disconnected");
}
void drawpage3() {
u8g.setFont(u8g_font_unifont);
u8g.setColorIndex(1);
u8g.setFont(u8g_font_6x13r);
u8g.drawStr(10, 10, "mode:");
if (mode == 1)u8g.drawStr(50, 30, "AUTO");
if (mode == 2)u8g.drawStr(50, 30, "REST");
if (mode == 3)u8g.drawStr(50, 30, "SPORTS");
}
void loop() {
// put your main code here, to run repeatedly:
getppm();
getnoise();
getht();
getman();
getli();
buttonc();
if (page == 3)turnsol();
u8g.firstPage();
do {
if (page == 1)drawpage1();
if (page == 2)drawpage2();
if (page == 3)drawpage3();
} while (u8g.nextPage());
if (page == 1 || page == 2)delay(500);
elightSensore delay(50);
}Loading
ssd1306
ssd1306