131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
ภาคผนวก ค
โปรแกรมควบคุมการทำงาน
152
1.โปรแกรมควบคมุ มการทำงาน Cannabis greenhouse Temp & Humidity Embedded Control
Box
#include <Blynk.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <FirebaseESP32.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Arduino.h>
#include <HTTPClient.h>
#include <Adafruit_Sensor.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <TridentTD_LineNotify.h>
#define BLYNK_PRINT Serial
#define TX_485 19
#define RX_485 18
SoftwareSerial RS485_serial (RX_485, TX_485);
LiquidCrystal_I2C lcd(0x27, 20, 4);
BlynkTimer timer;
char auth[] = "-jejhZRd9jfTjJON6_ltJ6dgYpYVUlZk";
char ssid[] = "KKCBD2021" ;
char pass[] = "0629149455";
const long offsetTime = 25200;
#define LINE_TOKEN "zTLpvj6xrjoFIslYhTocNhV118rRytJFgglal5XH68q"
const long interval = 1000;
153
unsigned long task_trig = 0;
String KEY = "AKfycbzRQafcSYsta9jayh7CO2MXknIuBVhHlOw6SEwmJGrAcNDwwUYA";
const char* APP_SERVER = "script.google.com";
#define FIREBASE_HOST "kkcbd-cannabis-default-rtdb.asia-
southeast1.firebasedatabase.app"
#define FIREBASE_AUTH "jfcw30AOf4RbC1j4JogKFfrkAKqVmSXP8HAG0Mtf"
unsigned char Address, Function, Num_of_Data, Firebase_CX, LINE_CX;
FirebaseData firebaseData;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", offsetTime);
int hourNow, minuteNow, secondNow;
String Str_Line ;
#define RS485transmit 1
#define RS485receive 0
int selectMode;
float AirTemp1, AirTemp2, AirTemp3, AirTemp4, AirTemp5, AirTemp6, AirTemp7,
temp;
float AirHumi1, AirHumi2, AirHumi3, AirHumi4, AirHumi5, AirHumi6, humi;
int lux1, lux2, lux3, luxs;
int co21, co22, co23;
int tempset;
bool Sel = false;
byte currentMin = 0;
byte SetTime2Notify = 1;
String str2line;
#define Relay1 4
#define Relay2 16
#define Relay3 17
154
#define Relay4 5
void setup() {
lcd.init();
lcd.backlight();
Wire.begin();
Serial.begin(9600);
RS485_serial.begin(9600);
// กำหนดขาควบคมุ ของ RS485 เป็น Output
Blynk.begin(auth, ssid, pass, "blynk.iot-cm.com", 8080);
Serial.println(LINE.getVersion());
LINE.setToken(LINE_TOKEN);
Serial.println(" COMMUNICATIONS TO RS485 ");
timeClient.begin();
LINE.notify("Started VeggiNusery ");
timer.setInterval(1000, Set);
timer.setInterval(1000L, runStep);
timer.setInterval(1000L, Time_NTP);
pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
pinMode(Relay3, OUTPUT);
pinMode(Relay4, OUTPUT);
digitalWrite(Relay1, LOW);
digitalWrite(Relay2, LOW);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
155
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println("Initial Parameter >>> " + String(selectMode) + " | " +
String(SetTime2Notify));
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
}
void SendRotine() {
if (timeClient.getMinutes() == 59 && timeClient.getSeconds() == 59 ) {
str2line = {"VeggiNusery : " + String(temp) + " | " + String(humi) + " | " +
String(luxs)};
LINE.notify(str2line);
Serial.println("line แจ้งเตอื น");
}
}
void Firebase_Update() {
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp01", AirTemp1);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp02", AirTemp2);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp03", AirTemp3);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp04", AirTemp4);
156
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp05", AirTemp5);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp06", AirTemp6);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Temp07", AirTemp7);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Humidity1", AirHumi1);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Humidity2", AirHumi2);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Humidity3", AirHumi3);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Humidity4", AirHumi4);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Humidity5", AirHumi5);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Humidity6", AirHumi6);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Ligh1", lux1);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Ligh2", lux2);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/Ligh3", lux3);
Firebase.setFloat(firebaseData, "/VeggiNusery/AirSensor/C02", co21);
}
void LCD_Display(void)
{
temp = (AirTemp1 + AirTemp2 + AirTemp3 + AirTemp4 + AirTemp5 + AirTemp6) / 6;
humi = (AirHumi1 + AirHumi2 + AirHumi3 + AirHumi4 + AirHumi5 + AirHumi6) / 6;
luxs = (lux1 + lux2 + lux3) / 3;
lcd.setCursor(0, 0);
lcd.print("Temp : ");
lcd.print(temp);
lcd.setCursor(13, 0);
lcd.print("C " );
lcd.setCursor(0, 1);
lcd.print("Humi : ");
lcd.print(humi);
157
lcd.setCursor(13, 1);
lcd.print("% ");
lcd.setCursor(0, 2);
lcd.print("Lux : ");
lcd.print(luxs);
lcd.print(" % ");
lcd.setCursor(0, 3);
lcd.print("Co2 : ");
lcd.print(co21);
lcd.print(" ppm " );
}
unsigned long PrevTime, NowTime;
unsigned char Cx = 0;
void loop()
{
Blynk.run();
timer.run();
RS485_SerialEvent();
LCD_Display();
SendRotine();
}
void Time_NTP()
{
timeClient.update();
secondNow = timeClient.getSeconds();
minuteNow = timeClient.getMinutes();
hourNow = timeClient.getHours();
158
Serial.println("The time is >> " + String(hourNow) + ":" + String(minuteNow) + ":" +
String(secondNow) + " >>> " + String(SetTime2Notify));
}
unsigned char rxCount = 0;
unsigned char rxBuff[100];
void calSensorValue(void)
{
Serial.println(" ");
unsigned int sensorDat = (rxBuff[4] << 8) | rxBuff[5];
AirTemp1 = sensorDat / 100.00;
Serial.print("AirTemp1: "); Serial.print(AirTemp1);
sensorDat = (rxBuff[6] << 8) | rxBuff[7];
AirTemp2 = sensorDat / 100.00;
Serial.print("AirTemp2: "); Serial.print(AirTemp2);
sensorDat = (rxBuff[12] << 8) | rxBuff[13];
AirHumi1 = sensorDat / 100.00;
Serial.print("AirHumi1: "); Serial.print(AirHumi1);
sensorDat = (rxBuff[14] << 8) | rxBuff[15];
AirHumi2 = sensorDat / 100.00;
Serial.print("AirHumi2: "); Serial.print(AirHumi2);
sensorDat = (rxBuff[26] << 8) | rxBuff[27];
lux1 = sensorDat / 100.00;
Serial.print("lux1: "); Serial.print(lux1);
sensorDat = (rxBuff[24] << 8) | rxBuff[25];
co21 = sensorDat / 100.00;
Serial.print("co21: "); Serial.println(co21);
}
159
void calSensorValue1(void)
{
Serial.println(" ");
unsigned int sensorDat1 = (rxBuff[4] << 8) | rxBuff[5];
AirTemp3 = sensorDat1 / 100.00;
Serial.print("AirTemp3: "); Serial.print(AirTemp3);
sensorDat1 = (rxBuff[6] << 8) | rxBuff[7];
AirTemp4 = sensorDat1 / 100.00;
Serial.print("AirTemp4: "); Serial.print(AirTemp4);
sensorDat1 = (rxBuff[8] << 8) | rxBuff[9];
AirTemp7 = sensorDat1 / 100.00;
Serial.print("AirTemp7: "); Serial.println(AirTemp7);
sensorDat1 = (rxBuff[12] << 8) | rxBuff[13];
AirHumi3 = sensorDat1 / 100.00;
Serial.print("AirHumi3: "); Serial.print(AirHumi3);
sensorDat1 = (rxBuff[14] << 8) | rxBuff[15];
AirHumi4 = sensorDat1 / 100.00;
Serial.print("AirHumi4: "); Serial.print(AirHumi4);
sensorDat1 = (rxBuff[26] << 8) | rxBuff[27];
lux2 = sensorDat1 / 100.00;
Serial.print("lux2: "); Serial.println(lux2);
}
void calSensorValue2(void)
{
Serial.println(" ");
unsigned int sensorDat2 = (rxBuff[4] << 8) | rxBuff[5];
AirTemp5 = sensorDat2 / 100.00;
Serial.print("AirTemp5: "); Serial.print(AirTemp5);
160
sensorDat2 = (rxBuff[6] << 8) | rxBuff[7];
AirTemp6 = sensorDat2 / 100.00;
Serial.print("AirTemp6: "); Serial.print(AirTemp6);
sensorDat2 = (rxBuff[12] << 8) | rxBuff[13];
AirHumi5 = sensorDat2 / 100.00;
Serial.print("AirHumi5: "); Serial.print(AirHumi5);
sensorDat2 = (rxBuff[14] << 8) | rxBuff[15];
AirHumi6 = sensorDat2 / 100.00;
Serial.print("AirHumi6: "); Serial.print(AirHumi6);
sensorDat2 = (rxBuff[26] << 8) | rxBuff[27];
lux3 = sensorDat2 / 100.00;
Serial.print("lux3: "); Serial.println(lux3);
}
void RS485_SerialEvent()
{
if (RS485_serial.available() > 0) {
unsigned char inChar = RS485_serial.read();
rxBuff[rxCount] = inChar;
if (rxBuff[0] == '@')
{
// Serial.print("PASS of @ |");
if ((rxCount == 39) || (rxBuff[rxCount] == '#'))
{
rxCount = 0;
if ((rxBuff[1] == 'B') && (rxBuff[2] == '0'))
{
if (rxBuff[3] == '1')
{
161
calSensorValue();
}
else if (rxBuff[3] == '2')
{
calSensorValue1();
}
else if (rxBuff[3] == '3')
{
calSensorValue2();
}
}
return;
}
rxCount++;
}
}
}
void dataToCloud(void)
{
Blynk.virtualWrite(V0, AirTemp1);
Blynk.virtualWrite(V1, AirHumi1);
Blynk.virtualWrite(V2, AirTemp2);
Blynk.virtualWrite(V3, AirHumi2);
Blynk.virtualWrite(V4, lux1);
Blynk.virtualWrite(V15, co21);
Blynk.virtualWrite(V5, AirTemp3);
Blynk.virtualWrite(V6, AirHumi3);
162
Blynk.virtualWrite(V7, AirTemp4);
Blynk.virtualWrite(V8, AirHumi4);
Blynk.virtualWrite(V9, lux2);
Blynk.virtualWrite(V10, AirTemp5);
Blynk.virtualWrite(V11, AirHumi5);
Blynk.virtualWrite(V12, AirTemp6);
Blynk.virtualWrite(V13, AirHumi6);
Blynk.virtualWrite(V14, lux3);
Blynk.virtualWrite(V23, AirTemp7);
HTTPClient http;
String URL = "https://script.google.com/macros/s/";
URL += KEY;
URL += "/exec?sht20_temp1=";
URL += AirTemp1;
URL += "&sht20_humi1=";
URL += AirHumi1;
URL += "&dht22_temp1=";
URL += AirTemp2;
URL += "&dht22_humi1=";
URL += AirHumi2;
URL += "&lux1=";
URL += lux1;
URL += "&co2=";
URL += co21;
URL += "&sht20_temp2=";
URL += AirTemp3;
URL += "&sht20_humi2=";
URL += AirHumi3;
163
URL += "&dht22_temp2=";
URL += AirTemp4;
URL += "&dht22_humi2=";
URL += AirHumi4;
URL += "&lux2=";
URL += lux2;
URL += "&sht20_temp3=";
URL += AirTemp5;
URL += "&sht20_humi3=";
URL += AirHumi5;
URL += "&dht22_temp3=";
URL += AirTemp6;
URL += "&dht22_humi3=";
URL += AirHumi6;
URL += "&lux3=";
URL += lux3;
Serial.println("[HTTP] begin...");
Serial.println(URL);
Serial.println();
http.begin(URL);
Serial.println("[HTTP] GET...");
int httpCode = http.GET();
if (httpCode > 0) {
Serial.print("[HTTP] GET... code: ");
Serial.println(httpCode);
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
164
Serial.println(payload);
}
} else {
Serial.print("[HTTP] GET... failed, error: ");
Serial.println(http.errorToString(httpCode).c_str());
}
Firebase_Update();
}
BLYNK_CONNECTED() {
Blynk.syncAll();
}
BLYNK_WRITE(V16)
{
selectMode = param.asInt();
if (selectMode == 1) //If button MANUAL on app
{
Serial.println("RY01_ON");
RS485_serial.println("*B01RY01N#");
RS485_serial.println("*B02RY01N#");
RS485_serial.println("*B03RY01N#");
digitalWrite(Relay1, HIGH);
}
else if (selectMode == 0)
{
Serial.println("RY01_OFF");
RS485_serial.println("*B01RY01F#");
RS485_serial.println("*B02RY01F#");
RS485_serial.println("*B03RY01F#");
165
digitalWrite(Relay1, LOW);
}
}
BLYNK_WRITE(V17)
{
selectMode = param.asInt();
if (selectMode == 1)
{
Serial.println("RY02_ON");
RS485_serial.println("*B01RY02N#");
RS485_serial.println("*B02RY02N#");
RS485_serial.println("*B03RY02N#");
digitalWrite(Relay2, HIGH);
}
else if (selectMode == 0)
{
Serial.println("RY02_OFF");
RS485_serial.println("*B01RY02F#");
RS485_serial.println("*B02RY02F#");
RS485_serial.println("*B03RY02F#");
digitalWrite(Relay2, LOW);
}
}
BLYNK_WRITE(V18)
{
selectMode = param.asInt();
if (selectMode == 1)
166
{
Serial.println("RY03_ON");
RS485_serial.println("*B01RY03N#");
RS485_serial.println("*B02RY03N#");
RS485_serial.println("*B03RY03N#");
digitalWrite(Relay3, HIGH);
}
else if (selectMode == 0)
{
Serial.println("RY03_OFF");
RS485_serial.println("*B01RY03F#");
RS485_serial.println("*B02RY03F#");
RS485_serial.println("*B03RY03F#");
digitalWrite(Relay3, LOW);
}
}
BLYNK_WRITE(V19)
{
selectMode = param.asInt();
if (selectMode == 1)
{
Serial.println("RY04_ON");
RS485_serial.println("*B01RY04N#");
RS485_serial.println("*B02RY04N#");
RS485_serial.println("*B03RY04N#");
digitalWrite(Relay4, HIGH);
}
else if (selectMode == 0)
167
{
Serial.println("RY04_OFF");
RS485_serial.println("*B01RY04F#");
RS485_serial.println("*B02RY04F#");
RS485_serial.println("*B03RY04F#");
digitalWrite(Relay4, LOW);
}
}
BLYNK_WRITE(V30) {
if (param.asInt() == 1) {
Sel = true;
Serial.println("Selector is True");
}
if (param.asInt() == 0) {
Sel = false;
Serial.println("Selector is False");
}
}
BLYNK_WRITE(V31) {
SetTime2Notify = param.asInt();
Serial.println("Now set time to notify every " + String(SetTime2Notify) + " minute");
}
BLYNK_WRITE(V20)
{
if (Sel == true) {
if (param.asInt() == 1) {
168
digitalWrite(Relay1, HIGH);
LINE.notify("Valve[1]NO+ลดน้ำตน้ กลา้ ");
}
if (param.asInt() == 0) {
digitalWrite(Relay1, LOW);
LINE.notify("Valve[1]FFO ส้นิ สุดโปรแกรม");
}
}
}
BLYNK_WRITE(V21) {
if (param.asInt() == 1) {
digitalWrite(Relay3, HIGH);
LINE.notify("Valve[2]NO+พ่นฝอย");
}
else {
digitalWrite(Relay3, LOW);
LINE.notify("Valve[2]FFO สน้ิ สดุ โปรแกรม");
}
}
BLYNK_WRITE(V22)
{
if (param.asInt() == 1)
{
digitalWrite(Relay4, HIGH);
digitalWrite(Relay2, HIGH);
LINE.notify("Valve[3]NO+นำ้ ฉดี หลงั คาโรงเรือน");
}
169
else
{
digitalWrite(Relay4, LOW);
digitalWrite(Relay2, LOW);
LINE.notify("Valve[3]FFO ส้ินสดุ โปรแกรม");
}
}
BLYNK_WRITE(V24)
{
tempset = param.asInt();
}
void Set() {
if (Sel == false) {
if (temp >= tempset) {
digitalWrite(Relay4, HIGH);
digitalWrite(Relay2, HIGH);
}
else {
digitalWrite(Relay4, LOW);
digitalWrite(Relay2, LOW);
}
}
Blynk.virtualWrite(V25, temp);
Blynk.virtualWrite(V26, humi);
}
unsigned char stepCount = 0;
unsigned char Lx = 0;
void runStep(void)
170
{
if (stepCount == 1)
{
Serial.println("Node_01_SensorRead");
RS485_serial.println("*B01SR#");
}
else if (stepCount == 5)
{
Serial.println("Node_02_SensorRead");
RS485_serial.println("*B02SR#");
}
else if (stepCount == 9)
{
Serial.println("Node_03_SensorRead");
RS485_serial.println("*B03SR#");
}
stepCount++;
if (stepCount == 15) stepCount = 0;
//----
Lx++;
if (Lx == 200)
{
dataToCloud();
Lx = 0;
Serial.println("-- Data sending to CLOUD-Server OK --");
}
}
171
2.โปรแกรมควบคมุ มการทำงานกล่องลกู ขา่ ย 1
#include <SoftwareSerial.h>
#include "DHT.h"
#include "DFRobot_SHT20.h"
#define TX_485 8
#define RX_485 7
#define RS485transmit 1
#define RS485receive 0
#define DHTPIN 2
#define DHTTYPE DHT22
#define RunLED 13
#define RY1 9
#define RY2 10
#define RY3 11
#define RY4 12
DHT dht(DHTPIN, DHTTYPE);
DFRobot_SHT20 sht20(&Wire, SHT20_I2C_ADDR);
SoftwareSerial RS485_serial (RX_485, TX_485);
unsigned long theCurrentTime;
unsigned long theLastReadTime = 0;
long readDataInterval = 5000;
172
int analog1Pin = 1;
int analogPin = 0;
int Relay1 = 9;
int Relay2 = 10;
//-- Serial Communitioan Variable Define --//
unsigned char DataBuff[65];
////////////////////////////////////// PROGRAM SETUP //////////////////////////////////////
void setup() {
pinMode(RunLED, OUTPUT);
pinMode(RY1, OUTPUT); digitalWrite(RY1, HIGH);
pinMode(RY2, OUTPUT); digitalWrite(RY2, HIGH);
pinMode(RY3, OUTPUT); digitalWrite(RY3, HIGH);
pinMode(RY4, OUTPUT); digitalWrite(RY4, HIGH);
Serial.begin(9600);
RS485_serial.begin(9600);
dht.begin();
sht20.initSHT20();
sht20.checkSHT20();
theCurrentTime = millis();
}
unsigned char inChar;
unsigned char RxBuff[64];
unsigned char RxdCount = 0;
boolean rxComplete = false;
void serialEvent()
{
while (RS485_serial.available())
{
173
inChar = RS485_serial.read();
//Serial.write(inChar);
RxBuff[RxdCount] = inChar;
if (RxBuff[0] == '*')
{
if ((RxBuff[1] != 'B') && (RxdCount == 1))
{
RxdCount = 0; return;
}
// Serial.print(" "); Serial.println(RxdCount);
if ((RxdCount == 9) || (RxBuff[RxdCount] == '#'))
{
RxdCount = 0; rxComplete = true;
return;
}
RxdCount++;
}
}
}
void sendDatToRS485(void)
{
Serial.println("getCommand Sensors Data to RS-485");
for (unsigned char i=0; i<40;i++)
{
RS485_serial.write(DataBuff[i]);
}
}
void pinAnalogRead(void)
174
{
unsigned int lux1 = analogRead(A0);
lux1 = map(lux1, 0, 600, 0, 100);
unsigned int co2 = random(15,82); //analogRead(A1);
DataBuff[26] = lux1;
DataBuff[24] = co2 >> 8; DataBuff[25] = co2;
Serial.println("-------------------------------");
Serial.println("Lux | CO2");
Serial.print(lux1); Serial.print("|"); Serial.println(co2);
}
void AirSensor_Read(void)
{
unsigned int datBuf;
float temp1 = dht.readTemperature(); // อ่านค่าอณุ หภมู จิ าก DHT Sensor
datBuf = temp1 * 100;
DataBuff[4] = datBuf >> 8; DataBuff[5] = datBuf & 0x00FF;
float temp2 = sht20.readTemperature(); // อ่านคา่ อณุ หภูมิจาก sht Sensor
datBuf = temp2 * 100;
DataBuff[6] = datBuf >> 8; DataBuff[7] = datBuf & 0x00FF;
float humi1 = dht.readHumidity(); // อ่านคา่ ความชน้ื จาก DHT Sensor
datBuf = humi1 * 100;
DataBuff[12] = datBuf >> 8; DataBuff[13] = datBuf & 0x00FF;
float humi2 = sht20.readHumidity(); // Read Humidity
datBuf = humi2 * 100;
DataBuff[14] = datBuf >> 8; DataBuff[15] = datBuf & 0x00FF;
Serial.println("***************************************");
Serial.println("AirTemp1|AirTemp2|Humid1|Humid2 ");
Serial.print(temp1); Serial.print("|"); Serial.print(temp2); Serial.print("|");
175
Serial.print(humi1); Serial.print("|"); Serial.println(humi2);
}
unsigned int soilTempVal;
void soilTempRead(void)
{
float soilTempRead = 27.45 ; //DS18B20_Read();
soilTempVal = soilTempRead * 100;
DataBuff[2] = soilTempVal >> 8; DataBuff[3] = soilTempVal & 0x00FF;
Serial.print(DataBuff[2], HEX); Serial.println(DataBuff[3], HEX);
soilTempVal = ((DataBuff[2] << 8) | DataBuff[3]);
Serial.print(soilTempVal); Serial.print("|");
float soilTemp1_Val = soilTempVal / 100.00;
Serial.println(soilTemp1_Val);
}
void RELAY_clt(void)
{
if ((RxBuff[6] == '0') && (RxBuff[7] == '1'))
{
if (RxBuff[8] == 'N') digitalWrite(RY1, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY1, HIGH);
}
else if ((RxBuff[6] == '0') && (RxBuff[7] == '2'))
{
if (RxBuff[8] == 'N') digitalWrite(RY2, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY2, HIGH);
}
else if ((RxBuff[6] == '0') && (RxBuff[7] == '3'))
{
176
if (RxBuff[8] == 'N') digitalWrite(RY3, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY3, HIGH);
}
else if ((RxBuff[6] == '0') && (RxBuff[7] == '4'))
{
if (RxBuff[8] == 'N') digitalWrite(RY4, LOW);
if (RxBuff[8] == 'F') digitalWrite(RY4, HIGH);
}
}
//------- PROGRAM RUNNING ------//
unsigned long PreTime, NowTime;
unsigned char Cx, secNum = 0;;
void loop()
{
serialEvent();
NowTime = millis();
if (rxComplete)
{
rxComplete = false;
DataBuff[0] = '@'; DataBuff[1] = RxBuff[1];
DataBuff[2] = RxBuff[2]; DataBuff[3] = RxBuff[3];
if ((RxBuff[2] == '0') && (RxBuff[3] == '1'))
{
if ((RxBuff[4] == 'S') && (RxBuff[5] == 'R'))
{
sendDatToRS485();
}
else if ((RxBuff[4] == 'R') && (RxBuff[5] == 'Y'))
177
{
RELAY_clt();
}
}
}
//------ สร้างจังหวะในการ อ่านตัวตรวจรู้ ----//
if (NowTime >= (PreTime + 100))
{
if (Cx == 0)
{
digitalWrite(RunLED, HIGH);
// pinAnalogRead();
}
else if (Cx == 3) digitalWrite(RunLED, LOW);
if (Cx == 10)
{
Cx = 0;
secNum++;
//--------------
if(secNum == 2)
{
AirSensor_Read();
}
else if(secNum == 4)
{
pinAnalogRead();
secNum = 0;
}
178
} else Cx++;
PreTime = NowTime;
}
}
3.โปรแกรมควบคุมมการทำงานกล่องลกู ข่าย 2
#include <SoftwareSerial.h>
#include "DHT.h"
#include "DFRobot_SHT20.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define TX_485 8
#define RX_485 7
#define RS485transmit 1
#define RS485receive 0
#define DHTPIN 2
#define DHTTYPE DHT11
#define ONE_WIRE_BUS 3
#define RunLED 13
#define RY1 9
#define RY2 10
#define RY3 11
#define RY4 12
DHT dht(DHTPIN, DHTTYPE);
DFRobot_SHT20 sht20(&Wire, SHT20_I2C_ADDR);
SoftwareSerial RS485_serial (RX_485, TX_485);
OneWire oneWire(ONE_WIRE_BUS);
179
DallasTemperature sensors(&oneWire);
unsigned long theCurrentTime;
unsigned long theLastReadTime = 0;
long readDataInterval = 5000;
int analog1Pin = 1;
int analogPin = 0;
int Relay1 = 9;
int Relay2 = 10;
unsigned char DataBuff[65];
////////////////////////////////////// PROGRAM SETUP //////////////////////////////////////
void setup() {
pinMode(RunLED, OUTPUT);
pinMode(RY1, OUTPUT); digitalWrite(RY1, HIGH);
pinMode(RY2, OUTPUT); digitalWrite(RY2, HIGH);
pinMode(RY3, OUTPUT); digitalWrite(RY3, HIGH);
pinMode(RY4, OUTPUT); digitalWrite(RY4, HIGH);
Serial.begin(9600);
RS485_serial.begin(9600);
dht.begin();
sensors.begin();
sht20.initSHT20();
sht20.checkSHT20();
theCurrentTime = millis();
}
unsigned char inChar;
unsigned char RxBuff[64];
unsigned char RxdCount = 0;
boolean rxComplete = false;
180
void serialEvent()
{
while (RS485_serial.available())
{
inChar = RS485_serial.read();
//Serial.write(inChar);
RxBuff[RxdCount] = inChar;
if (RxBuff[0] == '*')
{
if ((RxBuff[1] != 'B') && (RxdCount == 1))
{
RxdCount = 0; return;
}
if ((RxdCount == 9) || (RxBuff[RxdCount] == '#'))
{
RxdCount = 0; rxComplete = true;
return;
}
RxdCount++;
}
}
}
void sendDatToRS485(void)
{
Serial.println("getCommand Sensors Data to RS-485");
for (unsigned char i = 0; i < 40; i++)
{
RS485_serial.write(DataBuff[i]);