ช่วยดูโค้ดarduino ว่าผิดพลาดตรงไหน (รันแล้วerror) project ตรวจจับควัน

#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 =
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่