#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <EEPROM.h>
#include <SoftwareSerial.h>
/-------Line------//
#define SSID "ict"
#define PASS "1122334455"
unsigned long lastTimeMillis = 0;
String UID = "#001";
String Msg, Str = "OFF1";
int LEDStatus = 6;
int LEDOnOff = 11;
int LEDError = 8;
int ch_pd = 9;
boolean LoopRuning = false;
SoftwareSerial dbgSerial(3, 2); // RX, TX
#define LOAD A2
#define Buzzer 12
int sensorValue = 0; // variable to store the value coming from the sensor
int sensorPin = A0; // select the input pin for the potentiometer
int ValueMax,ValueMin;
//---------------------------------------------------
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {11, 10, 9, 8}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {7, 6, 5, 4}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//------------ LCD ---------------------------
LiquidCrystal_I2C lcd(0x27,20,4);// PCF8574A = 0x3F
//-----------------------------------------------------
void setup(void)
{
lcd.begin();
lcd.setCursor(0,0);lcd.print("Smoke Detect Project");
lcd.setCursor(0,1);lcd.print(" NOTICE = ");
lcd.setCursor(0,2);lcd.print("SetVal = - ");
lcd.setCursor(0,3);lcd.print("Sensor = ");
pinMode(LOAD,OUTPUT); digitalWrite(LOAD,LOW);
pinMode(Buzzer,OUTPUT); digitalWrite(Buzzer,HIGH);
ValueMax = EEPROM.read(0);
lcd.setCursor(17,2); lcd.print(ValueMax);
ValueMin = EEPROM.read(1);
lcd.setCursor(13,2); lcd.print(ValueMin);
Beep();
//----------------Line-----------------///
pinMode(LEDStatus, OUTPUT);
pinMode(LEDOnOff, OUTPUT);
pinMode(LEDError, OUTPUT);
pinMode(ch_pd, OUTPUT);
digitalWrite(ch_pd, LOW);
delay(500);
digitalWrite(ch_pd, HIGH);
delay(5000);
Serial.begin(115200);
while (!Serial){
errorShow(); // wait for serial port to connect. Needed for Leonardo only
delay(100);
}
errorOff();
Serial.setTimeout(500);
dbgSerial.begin(115200); //can't be faster than 19200 for softserial
delay(3000);
dbgSerial.print("Test ESP8266...");
while (1){
if (sendAndWait("AT","OK", 100)){
errorOff();
break;
}else{
dbgSerial.println("To Text");
Serial.println("AT");
delay(100);
while (Serial.available()) {
dbgSerial.write(Serial.read());
}
errorShow();
delay(500);
}
}
dbgSerial.println("OK");
dbgSerial.println("Set mode");
Serial.println("AT+CWMODE=1");
delay(100);
dbgSerial.println("Connect to router");
while (1){
if (connectWiFi(SSID,PASS)){
errorOff();
break;
}else{
dbgSerial.println("Connect to router error");
errorShow();
delay(500);
}
}
dbgSerial.println("Set the multiple connection mode");
while (1){
if (sendAndWait("AT+CIPMUX=1","OK",300)){
errorOff();
break;
}else{
dbgSerial.println("AT+CIPMUX=1");
Serial.println("AT");
delay(300);
while (Serial.available()) {
dbgSerial.write(Serial.read());
}
errorShow();
delay(500);
}
}
dbgSerial.println("Create TCP Port 8000");
while (1){
if (createTCPPort("80")){
errorOff();
break;
}else{
dbgSerial.println("Create TCP error");
errorShow();
delay(500);
}
}
dbgSerial.println("ip address:");
Serial.println("AT+CIFSR");
delay(100);
while (Serial.available()) {
dbgSerial.write(Serial.read());
}
dbgSerial.println();
dbgSerial.println("Start TCP Server");
LoopRuning = true;
digitalWrite(12,HIGH);
}
//-----------------------------------------------------
void loop(void)
{ char i,Key;
while(Key == NO_KEY) // ตรวจสอบการกดปุ่ม ถ้ามีการกดปุ่มทำหลังปึกกาปิด แต่ถ้าไม่กดปุ่ม ก็จำทำภายในปึกกา
{
sensorValue = 0;
for(i=0;i<10;i++){
sensorValue = sensorValue + analogRead(0);delay(1);}
sensorValue = sensorValue / 10;
lcd.setCursor(15,3);ShowNum(sensorValue,3);
if(sensorValue > ValueMax)
{
lcd.setCursor(14,1);
lcd.print("SEND ");
digitalWrite(LOAD,HIGH);
Beep();
}
else {
lcd.setCursor(14,1);
lcd.print(" OFF ");digitalWrite(LOAD,LOW);
}
if(sensorValue > ValueMin)
{
lcd.setCursor(14,1);
lcd.print("SEND ");
digitalWrite(LOAD,HIGH);
Beep();
}
else {
lcd.setCursor(14,1);
lcd.print(" OFF ");
digitalWrite(LOAD,LOW);}
Key = keypad.getKey();
}
// ถ้ามีการกดปุ่มจะเริ่มทำบรรทัดนี้
Beep();
if(Key == 'B') // ตรวจสอบว่าปุ่มที่กด เป็นปุ่ม A หรือไม่
{
lcd.setCursor(5,3);
lcd.blink();
ValueMax = GetNum(3,18,3); //เรียกกฟังก์ชั่นรับค่า GetNum(จำนวนหลักที่ต้องการจะป้อน,คอลัมภ์ที่โชว์,บรรทัดที่โชว์)
//GetNum(3,16,3);ต้องรับค่าที่ป้อน จำนวน 3 หลัก ให้โชว์คอลัมภ์ ที่ 16 บรรทัดที่ 3
EEPROM.write(0,ValueMax);
lcd.noBlink();
}
if(Key == 'A') // ตรวจสอบว่าปุ่มที่กด เป็นปุ่ม A หรือไม่
{
lcd.setCursor(5,3);
lcd.blink();
ValueMin = GetNum(3,14,3); //เรียกกฟังก์ชั่นรับค่า GetNum(จำนวนหลักที่ต้องการจะป้อน,คอลัมภ์ที่โชว์,บรรทัดที่โชว์)
//GetNum(3,16,3);ต้องรับค่าที่ป้อน จำนวน 3 หลัก ให้โชว์คอลัมภ์ ที่ 16 บรรทัดที่ 3
EEPROM.write(1,ValueMin);
lcd.noBlink();
}
///------------Line----------------///
if (digitalRead(sensorPin) == 0)
digitalWrite(Buzzer, HIGH);
while (Serial.available() >0 ){
char c = Serial.read();
Msg += c;
if (Msg.indexOf("OK") >= 0) {
dbgSerial.println("TCP Server");
dbgSerial.println("Msg = " + Msg);
if (Msg.indexOf("+IPD,0,3

FF") >= 0){
dbgSerial.println("LED to off");
digitalWrite(LEDOnOff, LOW);
}else if (Msg.indexOf("+IPD,0,2

N") >= 0){
dbgSerial.println("LED to on");
digitalWrite(LEDOnOff, HIGH);
}else if (Msg.indexOf("+IPD,0,3:GET") >= 0){
dbgSerial.println("get led");
if (digitalRead(LEDOnOff) == 1)
Str = "ON";
else
Str = "OFF";
Received("0", Str);
}else if (Msg.indexOf("+IPD,0,3:UID") >= 0){
dbgSerial.println("get uid");
Received("0", UID);
}
Msg = "";
}
}
Str = "
http://www.kruimron.com/bh/line.php?token=GdrudSRg2fJmHxA85avQysS3pOhVaU8CCNGYidRgwdt&mes=777";
//Received("0", Str);
if (millis() - lastTimeMillis > 3000) {
lastTimeMillis = millis();
Serial.println("AT+CIPSTART=4,\"TCP\",\"www.kruimron.com/bh\",80");
delay(1000);
//printResponse();
String cmd = "GET /line.php?token=GdrudSRg2fJmHxA85avQysS3pOhVaU8CCNGYidRgwdt&mes=777 HTTP/1.1";
Serial.println("AT+CIPSEND=4," + String(cmd.length() + 4));
dbgSerial.println("AT+CIPSEND=4," + String(cmd.length() + 4));
delay(1000);
Serial.println(cmd);
dbgSerial.println(cmd);
delay(1000);
Serial.println("");
}
}
//---------Line-----------------------------------------------//
boolean sendAndWait(String AT_Command, char *AT_Response, int wait){
dbgSerial.print(AT_Command);
Serial.println(AT_Command);
delay(wait);
while ( Serial.available() > 0 )
{
//dbgSerial.write(Serial.read());
if ( Serial.find(AT_Response) ) {
dbgSerial.print(" --> ");
dbgSerial.println(AT_Response);
return true;
}
}
dbgSerial.println(" fail!");
return false;
}
boolean connectWiFi(String NetworkSSID,String NetworkPASS){
String cmd = "AT+CWJAP=\"";
cmd += NetworkSSID;
cmd += "\",\"";
cmd += NetworkPASS;
cmd += "\"";
// dbgSerial.println(cmd);
//sendAndWait(cmd,"OK",10);
Serial.println(cmd);
delay(100);
while (Serial.available()) {
dbgSerial.write(Serial.read());
return true;
}
return false;
}
boolean createTCPPort(String Port){
Serial.println("AT+CIPSERVER=1," + Port);
delay(300);
while (Serial.available())
{
dbgSerial.write(Serial.read());
if (Serial.find("OK") || Serial.find("no change"))
return true;
else
return false;
}
return false;
}
boolean Received(String id, String Str){
Serial.print("AT+CIPSEND=" + id + ",");
Serial.println(Str.length());
if (Serial.find(">")){
return sendAndWait(Str,"SEND OK", 100);
dbgSerial.println("Send...ok");
}
return false;
}
void errorShow(){
if (digitalRead(LEDError) == 0)
digitalWrite(LEDError, HIGH);
}
void errorOff(){
if (digitalRead(LEDError) == 1)
digitalWrite(LEDError, LOW);
}
/*-------------------------------------------------------------*
* Slide Number *
*-------------------------------------------------------------*/
char BufNum[8];
void SlideNum(void)
{
BufNum[6] = BufNum[5];
BufNum[5] = BufNum[4];
BufNum[4] = BufNum[3];
BufNum[3] = BufNum[2];
BufNum[2] = BufNum[1];
BufNum[1] = BufNum[0];
}
/*-------------------------------------------------------------*
* Get Number From Keypad ฟังก์ชั่นรับค่าของปุ่มกด *
*-------------------------------------------------------------*/
unsigned long GetNum(int Count,int X,int Y)
{ char Key,i,N;
int Sum;
lcd.blink();
lcd.setCursor(X+(Count-2),Y-1);
N = 0;
for(i=0;i<Count;i++){BufNum
= ' ';}
i = 0;
while(Key != '#') //กดปุ่ม # เมื่อกรอกข้อมูลเสร็จแล้ว
{ Key = NO_KEY;
while(Key == NO_KEY){Key = keypad.getKey();}
Beep(); delay(300);
if(Key =
ช่วยดูโค้ดarduino ว่าผิดพลาดตรงไหน (รันแล้วerror) project ตรวจจับควัน
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <EEPROM.h>
#include <SoftwareSerial.h>
/-------Line------//
#define SSID "ict"
#define PASS "1122334455"
unsigned long lastTimeMillis = 0;
String UID = "#001";
String Msg, Str = "OFF1";
int LEDStatus = 6;
int LEDOnOff = 11;
int LEDError = 8;
int ch_pd = 9;
boolean LoopRuning = false;
SoftwareSerial dbgSerial(3, 2); // RX, TX
#define LOAD A2
#define Buzzer 12
int sensorValue = 0; // variable to store the value coming from the sensor
int sensorPin = A0; // select the input pin for the potentiometer
int ValueMax,ValueMin;
//---------------------------------------------------
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {11, 10, 9, 8}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {7, 6, 5, 4}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//------------ LCD ---------------------------
LiquidCrystal_I2C lcd(0x27,20,4);// PCF8574A = 0x3F
//-----------------------------------------------------
void setup(void)
{
lcd.begin();
lcd.setCursor(0,0);lcd.print("Smoke Detect Project");
lcd.setCursor(0,1);lcd.print(" NOTICE = ");
lcd.setCursor(0,2);lcd.print("SetVal = - ");
lcd.setCursor(0,3);lcd.print("Sensor = ");
pinMode(LOAD,OUTPUT); digitalWrite(LOAD,LOW);
pinMode(Buzzer,OUTPUT); digitalWrite(Buzzer,HIGH);
ValueMax = EEPROM.read(0);
lcd.setCursor(17,2); lcd.print(ValueMax);
ValueMin = EEPROM.read(1);
lcd.setCursor(13,2); lcd.print(ValueMin);
Beep();
//----------------Line-----------------///
pinMode(LEDStatus, OUTPUT);
pinMode(LEDOnOff, OUTPUT);
pinMode(LEDError, OUTPUT);
pinMode(ch_pd, OUTPUT);
digitalWrite(ch_pd, LOW);
delay(500);
digitalWrite(ch_pd, HIGH);
delay(5000);
Serial.begin(115200);
while (!Serial){
errorShow(); // wait for serial port to connect. Needed for Leonardo only
delay(100);
}
errorOff();
Serial.setTimeout(500);
dbgSerial.begin(115200); //can't be faster than 19200 for softserial
delay(3000);
dbgSerial.print("Test ESP8266...");
while (1){
if (sendAndWait("AT","OK", 100)){
errorOff();
break;
}else{
dbgSerial.println("To Text");
Serial.println("AT");
delay(100);
while (Serial.available()) {
dbgSerial.write(Serial.read());
}
errorShow();
delay(500);
}
}
dbgSerial.println("OK");
dbgSerial.println("Set mode");
Serial.println("AT+CWMODE=1");
delay(100);
dbgSerial.println("Connect to router");
while (1){
if (connectWiFi(SSID,PASS)){
errorOff();
break;
}else{
dbgSerial.println("Connect to router error");
errorShow();
delay(500);
}
}
dbgSerial.println("Set the multiple connection mode");
while (1){
if (sendAndWait("AT+CIPMUX=1","OK",300)){
errorOff();
break;
}else{
dbgSerial.println("AT+CIPMUX=1");
Serial.println("AT");
delay(300);
while (Serial.available()) {
dbgSerial.write(Serial.read());
}
errorShow();
delay(500);
}
}
dbgSerial.println("Create TCP Port 8000");
while (1){
if (createTCPPort("80")){
errorOff();
break;
}else{
dbgSerial.println("Create TCP error");
errorShow();
delay(500);
}
}
dbgSerial.println("ip address:");
Serial.println("AT+CIFSR");
delay(100);
while (Serial.available()) {
dbgSerial.write(Serial.read());
}
dbgSerial.println();
dbgSerial.println("Start TCP Server");
LoopRuning = true;
digitalWrite(12,HIGH);
}
//-----------------------------------------------------
void loop(void)
{ char i,Key;
while(Key == NO_KEY) // ตรวจสอบการกดปุ่ม ถ้ามีการกดปุ่มทำหลังปึกกาปิด แต่ถ้าไม่กดปุ่ม ก็จำทำภายในปึกกา
{
sensorValue = 0;
for(i=0;i<10;i++){
sensorValue = sensorValue + analogRead(0);delay(1);}
sensorValue = sensorValue / 10;
lcd.setCursor(15,3);ShowNum(sensorValue,3);
if(sensorValue > ValueMax)
{
lcd.setCursor(14,1);
lcd.print("SEND ");
digitalWrite(LOAD,HIGH);
Beep();
}
else {
lcd.setCursor(14,1);
lcd.print(" OFF ");digitalWrite(LOAD,LOW);
}
if(sensorValue > ValueMin)
{
lcd.setCursor(14,1);
lcd.print("SEND ");
digitalWrite(LOAD,HIGH);
Beep();
}
else {
lcd.setCursor(14,1);
lcd.print(" OFF ");
digitalWrite(LOAD,LOW);}
Key = keypad.getKey();
}
// ถ้ามีการกดปุ่มจะเริ่มทำบรรทัดนี้
Beep();
if(Key == 'B') // ตรวจสอบว่าปุ่มที่กด เป็นปุ่ม A หรือไม่
{
lcd.setCursor(5,3);
lcd.blink();
ValueMax = GetNum(3,18,3); //เรียกกฟังก์ชั่นรับค่า GetNum(จำนวนหลักที่ต้องการจะป้อน,คอลัมภ์ที่โชว์,บรรทัดที่โชว์)
//GetNum(3,16,3);ต้องรับค่าที่ป้อน จำนวน 3 หลัก ให้โชว์คอลัมภ์ ที่ 16 บรรทัดที่ 3
EEPROM.write(0,ValueMax);
lcd.noBlink();
}
if(Key == 'A') // ตรวจสอบว่าปุ่มที่กด เป็นปุ่ม A หรือไม่
{
lcd.setCursor(5,3);
lcd.blink();
ValueMin = GetNum(3,14,3); //เรียกกฟังก์ชั่นรับค่า GetNum(จำนวนหลักที่ต้องการจะป้อน,คอลัมภ์ที่โชว์,บรรทัดที่โชว์)
//GetNum(3,16,3);ต้องรับค่าที่ป้อน จำนวน 3 หลัก ให้โชว์คอลัมภ์ ที่ 16 บรรทัดที่ 3
EEPROM.write(1,ValueMin);
lcd.noBlink();
}
///------------Line----------------///
if (digitalRead(sensorPin) == 0)
digitalWrite(Buzzer, HIGH);
while (Serial.available() >0 ){
char c = Serial.read();
Msg += c;
if (Msg.indexOf("OK") >= 0) {
dbgSerial.println("TCP Server");
dbgSerial.println("Msg = " + Msg);
if (Msg.indexOf("+IPD,0,3
dbgSerial.println("LED to off");
digitalWrite(LEDOnOff, LOW);
}else if (Msg.indexOf("+IPD,0,2
dbgSerial.println("LED to on");
digitalWrite(LEDOnOff, HIGH);
}else if (Msg.indexOf("+IPD,0,3:GET") >= 0){
dbgSerial.println("get led");
if (digitalRead(LEDOnOff) == 1)
Str = "ON";
else
Str = "OFF";
Received("0", Str);
}else if (Msg.indexOf("+IPD,0,3:UID") >= 0){
dbgSerial.println("get uid");
Received("0", UID);
}
Msg = "";
}
}
Str = "http://www.kruimron.com/bh/line.php?token=GdrudSRg2fJmHxA85avQysS3pOhVaU8CCNGYidRgwdt&mes=777";
//Received("0", Str);
if (millis() - lastTimeMillis > 3000) {
lastTimeMillis = millis();
Serial.println("AT+CIPSTART=4,\"TCP\",\"www.kruimron.com/bh\",80");
delay(1000);
//printResponse();
String cmd = "GET /line.php?token=GdrudSRg2fJmHxA85avQysS3pOhVaU8CCNGYidRgwdt&mes=777 HTTP/1.1";
Serial.println("AT+CIPSEND=4," + String(cmd.length() + 4));
dbgSerial.println("AT+CIPSEND=4," + String(cmd.length() + 4));
delay(1000);
Serial.println(cmd);
dbgSerial.println(cmd);
delay(1000);
Serial.println("");
}
}
//---------Line-----------------------------------------------//
boolean sendAndWait(String AT_Command, char *AT_Response, int wait){
dbgSerial.print(AT_Command);
Serial.println(AT_Command);
delay(wait);
while ( Serial.available() > 0 )
{
//dbgSerial.write(Serial.read());
if ( Serial.find(AT_Response) ) {
dbgSerial.print(" --> ");
dbgSerial.println(AT_Response);
return true;
}
}
dbgSerial.println(" fail!");
return false;
}
boolean connectWiFi(String NetworkSSID,String NetworkPASS){
String cmd = "AT+CWJAP=\"";
cmd += NetworkSSID;
cmd += "\",\"";
cmd += NetworkPASS;
cmd += "\"";
// dbgSerial.println(cmd);
//sendAndWait(cmd,"OK",10);
Serial.println(cmd);
delay(100);
while (Serial.available()) {
dbgSerial.write(Serial.read());
return true;
}
return false;
}
boolean createTCPPort(String Port){
Serial.println("AT+CIPSERVER=1," + Port);
delay(300);
while (Serial.available())
{
dbgSerial.write(Serial.read());
if (Serial.find("OK") || Serial.find("no change"))
return true;
else
return false;
}
return false;
}
boolean Received(String id, String Str){
Serial.print("AT+CIPSEND=" + id + ",");
Serial.println(Str.length());
if (Serial.find(">")){
return sendAndWait(Str,"SEND OK", 100);
dbgSerial.println("Send...ok");
}
return false;
}
void errorShow(){
if (digitalRead(LEDError) == 0)
digitalWrite(LEDError, HIGH);
}
void errorOff(){
if (digitalRead(LEDError) == 1)
digitalWrite(LEDError, LOW);
}
/*-------------------------------------------------------------*
* Slide Number *
*-------------------------------------------------------------*/
char BufNum[8];
void SlideNum(void)
{
BufNum[6] = BufNum[5];
BufNum[5] = BufNum[4];
BufNum[4] = BufNum[3];
BufNum[3] = BufNum[2];
BufNum[2] = BufNum[1];
BufNum[1] = BufNum[0];
}
/*-------------------------------------------------------------*
* Get Number From Keypad ฟังก์ชั่นรับค่าของปุ่มกด *
*-------------------------------------------------------------*/
unsigned long GetNum(int Count,int X,int Y)
{ char Key,i,N;
int Sum;
lcd.blink();
lcd.setCursor(X+(Count-2),Y-1);
N = 0;
for(i=0;i<Count;i++){BufNum = ' ';}
i = 0;
while(Key != '#') //กดปุ่ม # เมื่อกรอกข้อมูลเสร็จแล้ว
{ Key = NO_KEY;
while(Key == NO_KEY){Key = keypad.getKey();}
Beep(); delay(300);
if(Key =