สวัสดีครับพี่ๆพอจะมีวิธีไหนบ้างครับที่เราจะส่งการแจ้งเตือนไปในไลน์ทุกๆ 1 ชม ครับพี่ ผมไม่รู้จะหยิบฟังชั่นไหนมาใช้ดีครับพี่
กระทู้นี้เลยครับ
พี่ครับแล้วถ้าผมต้องการให้มันส่งค่า ทุกๆ ชม. ชั่วโมงละ 15 ครั้ง แบบถี่ๆเลยครับพี่ พอครบ 15 ครั้ง ให้มันรออีก 1 ชม เช็คเงื่อนไขว่าพร้อมที่จะส่งไหมถ้าพร้อมให้มันส่งใหม่ครับ ทำเป็น ลูป แบบนี้ไปเรื่อยๆครับพี่ พอดีผมลองเขียนโค๊ดดูแล้วแต่ ไม่รู้จะไปต่อยังไงครับพี่ ตอนนี้คือติดตรงที่ พอมันนับถึง 15 แล้วมันรีเซ็ทแล้วนับต่อเลยครับ ไม่รอเวลา 1 ชม. ที่ผมต้องการครับพี่ (ในโค๊ดค่า 60000 คือไว้สำหรับเทสครับพี่)
#include <SimpleTimer.h>
#include <TridentTD_LineNotify.h>
#define SSID "xxx" // แก้ ชื่อ ssid ของ wifi
#define PASSWORD "xxx" // แก้ รหัสผ่าน wifi
#define LINE_TOKEN "xxx" // แก้ Line Token
const int analogInPin = A0;
int sensorValue = 0;
int t1 = sensorValue ;
SimpleTimer timer;
int i = 0;
void easyTime()
{
Serial.print("Uptime (s): ");
Serial.println((millis() / 1000) / 60);
Serial.print("ครั้ง : ");
Serial.println(i);
if (i < 15){
i++;
LINE.notify("เกิน ");
Serial.print("อุณหภูมิเกิน - ");
Serial.print("ส่งไปแล้ว : ");
Serial.println(i);
delay(100);
if (i >= 10){
i = 0;
}
}
timer.setInterval(60000, easyTime);
}
void setup() {
Serial.begin(9600);
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.setToken(LINE_TOKEN);
LINE.notify("เซนเซอร์วัดความชื้นและอุณหภูมิ เริ่มทำงานแล้ว");
}
void loop() {
timer.run();
sensorValue = analogRead(analogInPin);
Serial.print("sensor = ");
Serial.println(sensorValue);
delay(1000);
if(sensorValue > 100)
{
easyTime();
Serial.println("อุณหภูมิเกิน");
}
}
วางผิดต่ำแหน่งครับ
แบบนี้ไหมครับพี่
#include <SimpleTimer.h>
#include <TridentTD_LineNotify.h>
#define SSID "xxx" // แก้ ชื่อ ssid ของ wifi
#define PASSWORD "xxx" // แก้ รหัสผ่าน wifi
#define LINE_TOKEN "xxx" // แก้ Line Token
const int analogInPin = A0;
int sensorValue = 0;
int t1 = sensorValue ;
SimpleTimer timer;
int i = 0;
void easyTime()
{
Serial.print("Uptime (s): ");
Serial.println((millis() / 1000) / 60);
Serial.print("ครั้ง : ");
Serial.println(i);
if (i < 15){
i++;
LINE.notify("เกิน ");
Serial.print("อุณหภูมิเกิน - ");
Serial.print("ส่งไปแล้ว : ");
Serial.println(i);
delay(100);
if (i >= 10){
i = 0;
}
}
}
void setup() {
Serial.begin(9600);
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.setToken(LINE_TOKEN);
LINE.notify("เซนเซอร์วัดความชื้นและอุณหภูมิ เริ่มทำงานแล้ว");
timer.setInterval(60000, easyTime);
}
void loop() {
timer.run();
sensorValue = analogRead(analogInPin);
Serial.print("sensor = ");
Serial.println(sensorValue);
delay(1000);
if(sensorValue > 100)
{
easyTime();
Serial.println("อุณหภูมิเกิน");
}
}
ใช่ครับ คำสั่ง setup จะสั่งครั้งเดียวที่ void setup เท่านั้น หลังจากนั้นก็จะทำงานตลอด
พี่ครับขอถามอีกเรื่องครับ พอเข้าลูปให้ มันส่งค่าถี่ๆแค่ 15 ครั้ง จากนั้น รอ 1 ชม ถ้าค่ายังเกิดอยู่ ตามเงื่อนไขใน Void loop ที่กำหนดไว้ ให้มันส่งอีก 15 ครั้ง ถี่ๆเหมือนเดิมนี่ผมต้องแก้ตรงไหนครับพี่ ผมอาจจะอธิบายไม่เข้าใจ ผมขอโทษด้วยครับพี่
ค่ายังเกินรึป่าวครับ
อันนี้เราเขียนให้มันทำงานได้รึยัง ถ้ายังคิดว่าจะเขียนยังไง ดูจากฝีไม้ลายมือในการเขียนโปรแกรมตัวอย่าง ก็น่าจะพอเดาทางได้นะ ลองอธิบายหน่อย
ตอนนี้มันทำงานได้แล้วครับพี่ แต่พอ มันนับการส่งถึง 15 ครั้งปุ๊บ มันไม่ยอมออกจาก Loop มันเริ่มนับการส่งที่ 1 ใหม่ครับ ซึ่งผมต้องการให้มันรอ 1 ชม. แล้วค่าวนเข้าลูปใหม่ครับพี่
คีย์เวิคย์เคสนี้คือ เมื่อครบ 1 ชม ส่ง 15 รอบ แล้วรออีก 1 ชม ถึงส่งอีกครั้งช้ะ
ใช่เลยครับพี่
ตรงนี้เราใช้ for loop วนไปเลย 15 ครั้ง ไม่ได้หรอ
มีเหตุผลอันใดถึงมีการวางฟังก์ชันนี้ใน void loop อีก
มันเหมือนเป็นการทำงานซ้ำซ้อน
เดี๋ยวผมจะลองแก้ดูครับพี่ ขอบคุณมากครับพี่
คำแนะนำคือย้ายชุดนี้เข้าไปไว้ที่ easyTime(); ตัด easyTime(); ในนั้นออก ภายใน if(sensorValue > 100) {} ถ้าเป็นจริงให้ใช้ for วนการแจ้งแจ้งไปเลย 15 ครั้ง พอหลุดจากนั้น มันก็จะรออีก 1 ชม เพื่อจะเช็คเงื่อนไขอีกครั้ง
ส่วนการอ่านค่าเราก็เลือกได้ทั้ง 2 แบบคือ ให้อ่าน ทุกๆ 1 ชม เว้นเสียแต่ว่า เราต้องการอ่านค่าแล้วเอาไปใช้อย่างอื่นด้วย
พี่ผมคิดออกเลย 55555