ตอนนี้ผมทำได้แค่ ส่งค่า Humidity+Temperature ไปที่หน้าจอ lcd กับ Gauge ของโปรแกรม blynk สิ่งทีผมต้องการคือ กำหนดค่า min-max การทำงานของค่า Humidity+Temperature ผ่าน slider ของโปรแกรม blynk แล้วให้ค่า min-maxไปออกที่หน้าจอ lcd ด้วยครับ
อันนี้คือโค้ดที่ผมใช้อยู่ครับ
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
SimpleTimer timer;
#include "DHT.h"
#define DHTPIN D7
#define DHTTYPE DHT21
DHT dht(DHTPIN, DHTTYPE);
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
char auth[] = "**********";
char ssid[] = "********";
char pass[] = "********";
void sendSensor ()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Blynk.virtualWrite (V5, h);
Blynk.virtualWrite (V6, t);
Serial.print ("Temp =");
Serial.print (h);
Serial.print ("Humi =");
Serial.print (t);
}
void setup()
{
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
Serial.begin(9600);
lcd.begin();
Blynk.begin(auth, "********", "**********");
timer.setInterval(1000L, sendSensor);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
lcd.begin();
lcd.setCursor(0,0);
lcd.print("Humidity =");
lcd.setCursor(13,0);
lcd.print(h);
lcd.setCursor(19,0);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("Temperature=");
lcd.setCursor(13,1);
lcd.print(t);
lcd.setCursor(19,1);
lcd.print("C");
lcd.setCursor(0,2);
lcd.print("Set-H =");
lcd.setCursor(19,2);
lcd.print("%");
lcd.setCursor(0,3);
lcd.print("Set-T =");
lcd.setCursor(19,3);
lcd.print("C");
delay(500);
Blynk.run();
timer.run();
}
ขออภัยที่ตอบช้านะครับ อันนี้ตัวอย่างเบื้องต้นลองไปประยุคต์ดู ติดตรงไหนเอามาคุยกันครับ
นี้เป็น I/O ที่เราจะใช้ กำหนดเป็น 14 ให้เป็น Output ออกมาจากบอร์ด
กดหนดใน void setup()
pinMode(14, OUTPUT);
กรณีที่ 1
เราต้องการจ่ายค่า output ออกมาทาง pin 14 โดยตรง ให้กำหนดแบบนี้
เราปรับ Slider เท่าไหร่มันก็จะออกมาตามนั้นเลย ไม่ต้องเขียนโค้ตรองรับ
กรณีที่ 2
กำหนดแบบ Virtual Pins ที่ V4 คือไปผ่าน I/O ภายในอีกที เหมาะสำหรับ การนำไปเข้าเงื่อนไข ที่ซับซ้อน ต้องมีโค้ตรองรับ
ใส่โค้ตนี้ลงไปนอก void loop()
BLYNK_WRITE(V4){
int value = param.asInt();
analogWrite(14, value);
}
ไม่ค่อยเข้าใจเท่าไหร่เลยครับ
คือตอนนี้ผมกำลังทำโปรเจคตามคลิปนี้ ซึ่งเหลือแค่ตัว Slider ทำให้มันกำหนดค่าการทำงานอะครับ ช่วยแนะนำทีครับ
ลองใส่โค้ตที่แนะนำไปดู รึยังครับ
ลองใช่แบบที่2แล้วครับ อยากรู้ ว่ามันใช่ร่วมกับ if-else ได้มั้ยครับ เพราะผมอยากจะเอาตัวค่าของ Slider มาเป็นตัวกำหนด การทำงานของ if-else อะครับ
เอาตัวแปรนี้ไปไว้ใน void loop เข้าเงื่อนไขได้เลยครับ
ผมลองประกาศแค่ int value; รันผ่านแต่ขึ้น 0 ครับ
การประกาศค่าถูกแล้วครับ แต่ใส่ให้มันรับค่าในฟังก์ชันด้วย ไม่งั้นมันก็เหมือนว่าเราไม่ได้ใช้ ตัวแปรนี้รับค่าอะไรเลย
ได้แล้วครับ ขอบคุณมากครับ แล้วในคลิป ตอน 5:56 คือต้องเพิ่มโค้ดอะไรอีกหรอครับ มันถึง จดจำค่า หลังจากปิด-เปิดเครื่อง ครับ?
ศึกษาเรื่อง eeprom ครับ
รบกวนขอโค้ตมาเพื่อมาศึกษาครับ ขอบคุณครับ