สอบถามการอ่านค่า แล้วส่งออกทาง Line Notify ครับ

พูดคุยกันเรื่องบอร์ด Arduino

ผมทำโปรเจค อ่านค่าสถานะ Air ว่าเปิดหรือปิดอยู่ แล้วตอนก่อน สองทุ่ม ให้แจ้งทาง Line Notify ว่าสถานะตอนนี้เปิดหรือปิด … และสั่งปิดสองทุ่ม ในทุก ๆ วัน … และจะสั่งเปิดมันตอนเวลา 8 โมงเช้าในทุก ๆ วัน ตอนนี้ติดปัญหาครับ คือ

1.จะ set ให้แจ้งเตือนผ่าน Line Notify ทุก ๆ ทุ่มครึ่ง . สองทุ่ม ไม่ทราบว่าจะใช้คำสั่งอะไร ครับ

2.พอมันทำร่วมกับคำสั่งอื่น ค่าเวลาที่ดึงมา พอทำร่วมกับคำสั่งอื่น มันก็จะกระโดดไป จะให้มัน run ค่าเวลาตลอดโดยที่ไม่ไปร่วมกับ คำสั่งอื่น เป็นไปได้ไหมครับ

3.ปัญหาของโค้ดนี้ พอหน่วงเวลานาน ๆ ให้มันส่งค่า ทีนี้มันจะข้ามเวลที่เรากำหนดไว้เช่น ให้จ่าย 1 ตอน 16.00 น. พอมันหน่วงนาน มันข้าม 16.00 ไป มันก็ไม่จ่าย 1 ออกมาแล้วครับ

อันนี้โค้ดครับ (ขออภัยครับ ยังมือใหม่ครับ)

#include <TridentTD_LineNotify.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include "HTTPClient.h"
#include <time.h>
#include <WiFiClientSecure.h>


#define SSID        "xxxx"      
#define PASSWORD    "xxxxxxxx"     
#define LINE_TOKEN  "pkZdoFEVMTveWYiB56xYSeI3H6LlotK2hamEnYYTBzH" 

int timezone = 7*3600;
int dst = 0;

//#include "DHT.h"
//#define DHTPIN 13
//#define DHTTYPE DHT11
//DHT dht(DHTPIN, DHTTYPE);

/////////////// input Read Air1-Air7
  const int buttonPin1 = 23;
  const int buttonPin2 = 22; 
  const int buttonPin3 = 21; 
  const int buttonPin4 = 19;  
  
/////////// output control air on/off
  const int SW_Air1 = 34;
  const int SW_Air2 = 35;
  const int SW_Air3 = 32;
  const int SW_Air4 = 33;


  
////////////////////////////////  

void setup() {


  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);
  pinMode(buttonPin4, INPUT);


  pinMode(SW_Air1, OUTPUT);
  pinMode(SW_Air2, OUTPUT);
  pinMode(SW_Air3, OUTPUT);
  pinMode(SW_Air4, OUTPUT);

  
  configTime(timezone, dst, "pool.ntp.org", "time.hist.gov");
  Serial.println("\nWaiting for time");
  while (!time(nullptr)) {
    Serial.print(",");
    delay(500);
  }
  //dht.begin();
  Serial.begin(115200); Serial.println();
  Serial.println(LINE.getVersion());

  WiFi.begin(SSID, PASSWORD);
  Serial.printf("WiFi connecting to %s\n",  SSID);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(400);
  }
  Serial.printf("\nWiFi connected\nIP : ");
  Serial.println(WiFi.localIP());

  // กำหนด Line Token
  LINE.setToken(LINE_TOKEN);
  LINE.notify("");
  
}



void loop() {

  time_t now = time(nullptr);
  struct tm* p_tm = localtime(&now);
  
  Serial.print(p_tm->tm_hour);
  Serial.print(":");
  Serial.print(p_tm->tm_min);
  Serial.print(":");
  Serial.print(p_tm->tm_sec);
  Serial.println("");
  delay(100);

    float Air1 = buttonPin1;
    float Air2 = buttonPin2;
    float Air3 = buttonPin3;
    float Air4 = buttonPin4;

  
  
  Air1 = digitalRead(buttonPin1);
  Air2 = digitalRead(buttonPin2);
  Air3 = digitalRead(buttonPin3);
  Air4 = digitalRead(buttonPin4);
 

  if (Air1 == HIGH || Air2 == HIGH || Air3 == HIGH || Air4 == HIGH ) {
    String LineText;
    String string1 =  " ROOM1 Air";
    String string2 = " ON ";
    LineText = string1 + string2; 
    Serial.print("Line ");
    Serial.println(LineText);
    LINE.notify(LineText);
    //LINE.notify("Temperature is: "+String(t)+" C");  
    delay(1500000L);
  }

  if(p_tm->tm_hour == 15 && p_tm->tm_min == 20 && p_tm->tm_sec == 00) {
  
  digitalWrite(SW_Air1,HIGH);
  digitalWrite(SW_Air2,HIGH);
  digitalWrite(SW_Air3,HIGH);
  digitalWrite(SW_Air4,HIGH);
    
  delay(100);  
}
  
  if (Air1 == LOW || Air2 == LOW || Air3 == LOW || Air4) {
    String LineText;
    String string1 = " ROOM1 Air ";
    String string2 = " OFF ";
    //String string3 = " tm* p_tm";
    LineText = string1 + string2;
    Serial.print("Line ");
    Serial.println(LineText);
    LINE.notify(LineText);
    //LINE.notify("Temperature is: "+String(t)+" C");  
    delay(1500000L);
  }
  
  if(p_tm->tm_hour == 15 && p_tm->tm_min == 40 && p_tm->tm_sec == 00) {
  

  digitalWrite(SW_Air1,LOW);
  digitalWrite(SW_Air2,LOW);
  digitalWrite(SW_Air3,LOW);
  digitalWrite(SW_Air4,LOW);
   
  delay(500);   
}

  }

พอให้รับค่า Air มาจริง ๆ มันยังส่งค่าผิดอยู่เลยครับ ส่ง on บ้าง off บ้างสลับกันมาใน Line Notify

1 Likes

ใช้การเปรียบเทียบเวลาเอาครับ เพิ่มคำสั่งให้ดึงเวลา ออนไลน์มาก็ได้ ถ้าไม่มีโมดูล นาฬิกา ถ้ามากกว่าเวลา ทุ่มครึ่ง หรือเท่ากับก็ให้ส่งการแจ้งเตือนไป

ได้ครับ ใช้การตั้งรอบเวลามันจะทำงานเป็นรอบๆ ตามที่เราตั้งโค้ตก็จะแยกจากโค้ตหลักด้วย

ใช้วิธี milli เอาไม่หน่วงแต่เป็นการนับแทนตัวอย่างตามกระทู้นี้