/*
/ u8x8
/ home :https://github.com/olikraus/u8g2/wiki
/ reference:https://github.com/olikraus/u8g2/wiki/u8x8reference#setflipmode
/
/ DHT22
/ https://github.com/nethoncho/Arduino-DHT22
/
/
*/
#include <U8x8lib.h>
#include <DHT.h>
#define VR A0
#define ledR 4
#define ledG 5
#define BZZ 7
#define DHTpin 8
#define TL 0
#define TH 35
#define BZSP 60000
#define BZW 1000
U8X8_SSD1306_128X64_ALT0_HW_I2C u8x8(U8X8_PIN_NONE);
DHT dht(DHTpin, DHT22);
float temp;
byte fbzz = 0;
byte fr = 0;
byte fg = 0;
unsigned long tb;
unsigned long tl;
unsigned long tlv;
int fd[8] = {523, 587, 659, 698, 784, 880, 988, 1047};
byte ib = 0;
#define SW 6 //●追加
byte swr = LOW; //●追加
byte run = 0; //●追加
void setup() {
pinMode(ledR, OUTPUT);
pinMode(ledG, OUTPUT);
pinMode(SW, INPUT); //●追加
u8x8.begin();
u8x8.setFlipMode(1);
setFont(1);
u8x8.clear();
u8x8.setCursor(0, 0);
u8x8.print("Wite!");
dht.begin();
delay(2000);
u8x8.clear();
//dspTitle();
}
void loop() {
byte swn;
swn = digitalRead(SW);
if (swn == HIGH && swr == LOW) {
run = !run;
if(run==0){
u8x8.clear();
digitalWrite(ledR,LOW);
digitalWrite(ledG,LOW);
}else{
dspTitle();
}
}
swr == swn;
if (run) {
ope();
}
delay(20);
}
void setFont(int n){
switch(n){
case 2:
u8x8.setFont(u8x8_font_courB18_2x3_r);
break;
default:
//u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.setFont(u8x8_font_8x13_1x2_r);
}
}
void ope() {
byte wk;
wk = fr + fg;
dspTemp();
fr = temp >= TH;
fg = temp <= TL;
checkVR();
if (wk == 0 && (fr + fg))outBzz();
if ((fr + fg) && millis() - tb >= BZSP)outBzz();
ledBLK();
delay(20);
}
void outBzz() {
tone(BZZ, fd[ib], BZW);
++ib %= 8;
tb = millis();
}
void checkVR() {
char s[16];
int v;
v = analogRead(VR);
sprintf(s, "VR: %4d", v);
u8x8.setCursor(0, 6);
u8x8.print(s);
if (v < 600) {
fr = fg = fbzz = 0;
digitalWrite(ledR, LOW);
digitalWrite(ledG, LOW);
}
}
void ledBLK() {
if (fr)ledBLK2(ledR, 1300, 200);
else digitalWrite(ledR, LOW);
if (fg)ledBLK2(ledG, 1000, 500);
else digitalWrite(ledG, LOW);
}
void ledBLK2(byte L, uint32_t t1, uint32_t t2) {
byte v;
if (millis() - tl >= tlv) {
v = digitalRead(L);
digitalWrite(L, !v);
tlv = v ? t1 : t2;
tl = millis();
}
}
void dspTitle() {
u8x8.clear();
u8x8.setCursor(0, 0);
u8x8.print("Temperature");
}
void dspTemp() {
u8x8.setCursor(0, 2);
setFont(2);
u8x8.print(getTemp(), 1);
u8x8.print("*C");
setFont(1);
}
float getTemp() {
temp = dht.readTemperature();
return temp;
}