/*
//ชื่อ ชั้น เลขที่
//ต่อวงจรตามรูปที่กำหนดให้ และแก้ไขโปรแกรมให้ถูกต้อง
//**แก้ไขเฉพาะตำแหน่งที่เป็น "___" เท่านั้น
//เติมคำตอบใน "___" ให้ถูกต้อง 45 ตำแหน่ง 15 คะแนน
//การทำงานของโปรแกรม
// switch slide จะเป็นตัวเลือกโหมด
// ถ้าอยู่ด้านขวา จะเป็นโหมด Auto / ด้านซ้ายจะเป็นโหมด Manual
//โหมด Auto
// ถ้า Temp มากกว่า 30 องศาC LED_RGB จะติดสีแดง / Relay ทำงาน LED แดงติด เขียวดับ
// ถ้า Temp น้อยกว่า 20 องศาC LED_RGB จะติดสีฟ้า / Relay ทำงาน LED แดงติด เขียวดับ
// ถ้า Temp อยู่ในช่วง 21 - 29.9 องศาC LED_RGB จะติดสีเขียว / Relay ไม่ทำงาน LED แดงดับ เขียวติด
//โหมด Manual
// เมื่อกด push button สีเขียว แล้วปล่อย 1 ครั้ง relay จะทำงาน LED แดงติด เขียวดับ
// เมื่อกด push button สีเขียว แล้วปล่อย 1 ครั้ง relay จะไม่ทำงาน LED แดงดับ เขียวติด
#include "DHT.h"
#define pinR ___
#define pinG ___
#define pinB ___
#define relay ___
#define switch_1 12
#define switch_2 ___
#define push_sw ___
#define DHTPIN ___
#define DHTTYPE ___
DHT dht(DHTPIN, DHTTYPE);
int State = 0;
void setup() {
Serial.begin(___);
dht.begin();
pinMode(___, INPUT_PULLUP);
pinMode(___, INPUT_PULLUP);
pinMode(___, INPUT_PULLUP);
pinMode(___, OUTPUT);
pinMode(___, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(relay, OUTPUT);
}
void loop() {
// Wait a few seconds between measurements.
delay(20);
float t = dht.readTemperature();
if (digitalRead(switch_1) == ___) { //Auto mode
if (t > ___) {
analogWrite(pinR, ___);
analogWrite(pinG, ___);
analogWrite(pinB, ___);
digitalWrite(relay, ___);
} else if (t > ___ && t < ___) {
analogWrite(pinR, ___);
analogWrite(pinG, ___);
analogWrite(pinB, ___);
digitalWrite(relay, ___);
} else if (t < ___) {
analogWrite(pinR, ___);
analogWrite(pinG, ___);
analogWrite(pinB, ___);
digitalWrite(relay, ___);
}
}
if(digitalRead(___) == ___){ //Manual mode
if(digitalRead(___) == ___){
___++;
while(digitalRead(___) == 0){}
}
if(___ == 1){
digitalWrite(___, ___);
}
else if(State == ___){
digitalWrite(___, ___);
}
else if(___ == 3){
State = ___;
}
}
Serial.print(" Temperature: ");
Serial.print(t);
Serial.println("°C ");
}
*/
//เฉลย
#include "DHT.h"
#define pinR 6
#define pinG 5
#define pinB 3
#define relay 4
#define switch_1 12
#define switch_2 13
#define push_sw 7
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
int State = 0;
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(switch_1, INPUT_PULLUP);
pinMode(switch_2, INPUT_PULLUP);
pinMode(push_sw, INPUT_PULLUP);
pinMode(pinR, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(relay, OUTPUT);
}
void loop() {
// Wait a few seconds between measurements.
delay(20);
float t = dht.readTemperature();
if (digitalRead(switch_1) == 0) { //Auto mode
if (t > 26) {
analogWrite(pinR, 255);
analogWrite(pinG, 0);
analogWrite(pinB, 0);
digitalWrite(relay, HIGH);
} else if (t > 25 && t < 26) {
analogWrite(pinR, 0);
analogWrite(pinG, 255);
analogWrite(pinB, 0);
digitalWrite(relay, LOW);
} else if (t < 25) {
analogWrite(pinR, 0);
analogWrite(pinG, 0);
analogWrite(pinB, 255);
digitalWrite(relay, HIGH);
}
}
if(digitalRead(switch_2) == 0){ //Manual mode
if(digitalRead(push_sw) == 0){
State++;
while(digitalRead(push_sw) == 0){}
}
if(State == 1){
digitalWrite(relay, HIGH);
}
else if(State == 2){
digitalWrite(relay, LOW);
State = 0;
}
else if(State == 3){
State = 0;
}
}
Serial.print(" Temperature: ");
Serial.print(t);
Serial.println("°C ");
}