lnwshop logo
  • ตอบกระทู้
  • ตั้งกระทู้ใหม่
QUOTE 

ขอความช่วยเหลือหน่อยครับ (มือใหม่ครับ) พอดีผมสั่งซื้อ DHT21 / AM2301 โมดูล

Newsoda Palee Rock
Newsoda Palee Rock
IP: 125.26.244.x
1 ปีที่ผ่านมา

พอดีผมสั่งซื้อ DHT21 / AM2301 โมดูล และ อุปกรณ์ อื่นๆจากทางร้านประจำครับ กำลังหัดทำครับ
*พี่พอจะมีโค้ด ตัวอย่าง หรือเป็นแนวทางให้ผมหน่อยไหมครับ

คือ ผมทำเครื่องควบคุมอุณหภูมิ ครับ ตอนนี้ผมทำให้มันแสดงผมที่จอได้แล้วครับ แต่ติดตรง ทำให้มันตั้งค่าหรือเซ็ตค่าจากสวิตช์ไม่ได้อะครั

//ผมต้องการให้ สวิตช์ ในการตั้งค่า อุณหภูมิ และ ความชื้น เช่น
สวิตช์

ปุ่มที่ 1 เป็นปุ่มตั้งค่า/อุณหภูมิ/กดอีกครั้งหนึ่ง ให้ตั้งค่า ความชื้น/ กดอีกครั้งหนึ่ง ให้บันทึก

ปุ่มที่2 เพิ่ม

ปุ่มที่3 ลด

ปุ่นที่4 cancel

พอจะแนะนำ หรือ มีแนวทางให้ผมไหมครับ

โค้ดที่ผมเขียน

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"

LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht;

int led1=8; //สถานะความชื้นทำงาน
int led2=9;  //สถานะอุหภูมิทำงาน


int HL=46;  //ตัวแปลความชื้นต่ำสุด
int TL=30;  //ตัวแปลอุหภูมิต่ำสุด
int HH=46;  //ตัวแปลความชื้นสูงสุด
int TH=30;  //ตัวแปลอุหภูมิสูงสุด

void setup()
{
 
lcd.begin();
dht.setup(2); //กำหนดขา INPUT

     pinMode(led1,OUTPUT);
     pinMode(led2,OUTPUT);
     pinMode(MOL,OUTPUT);
     pinMode(MOR,OUTPUT);
    
 lcd.backlight();
 lcd.setCursor(3,0); // ไปที่ตัวอักษรที่ 0 แถวที่ 1
 lcd.print("Welcome To");

 lcd.setCursor(1,1); // ไปที่ตัวอักษรที่ 6 แถวที่ 2
 lcd.print("< My Newsoda >");
        delay(3000);
        lcd.clear();
 lcd.setCursor(6,0);     
 lcd.print("(^_^)");
 lcd.setCursor(1,1);     
 lcd.print("Happy Birthday");
        delay(3000);

}

void loop()
{
delay(dht.getMinimumSamplingPeriod());

float temperature = dht.getTemperature(); // ดึงค่าอุณหภูมิ
float humidity = dht.getHumidity(); // ดึงค่าความชื้น

lcd.backlight();
lcd.setCursor(0,0);
lcd.print("<TEMP!>  <HUMI!>");

lcd.setCursor(0,1);
lcd.print(" ");   //ค่าอุหภูมิจากโมดูล
lcd.print(temperature, 1); //จุดทดสนิย 1 ตำแหน่ง
lcd.print("C");
 
lcd.print("    ");  // ค่าความชื้นจากโมดูล
lcd.print(humidity, 1);   //จุดทดสนิย 1 ตำแหน่ง
lcd.print("%");
  
   if(humidity <HL){  //ถ้าความชื้นน้อยกว่า หรือ เท่ากับ...
     digitalWrite(led1,HIGH);
     }else if(humidity >HH){ //แต่ถ้าความชื้นมากกว่า หรือ เท่ากับ....
       digitalWrite(led1,LOW);
        delay(100);
     }
    
   if(temperature <TL){   //ถ้าอุหภูมิน้อยกว่า หรือ เท่ากับ ....
   digitalWrite(led2,HIGH);
   }else if(temperature >TH){  //แต่ถ้าอุหภูมิมากกว่า หรือ เท่ากับ ...
       digitalWrite(led2,LOW);
        delay(100);
     }
  
   
  
}

ช่วยหน่อยครับ ผมหาข้อมูลมา 3 วันแระครับ

ขอบคุณครับ

 

QUOTE 
ความคิดเห็นที่ #1
เจ้าของร้าน
เจ้าของร้าน
1 ปีที่ผ่านมา

ทดลองเขียนโคดคำสั่ง if ตรวจสอบค่าจากสวิตช์ ตามตัวอย่างนี้ https://www.arduino.cc/en/Tutorial/InputPullupSerial

จากนั้น แนะนำทำตามสเตปนี้ครับ

1. เขียนคำสั่งเป็นฟังก์ชัน เพื่อให้ง่ายในการใช้งาน

2. การบันทีกข้อมูล สามารถบันทึกลงใน eeprom มีตัวอย่างใน Arduino IDE อยู่ด้วยแล้ว

3. คำสั่งอ่านค่าจากสวิตช์ ถ้าสั่งให้วนลูปอ่านค่าจากสวิตช์ โปรแกรมจะไม่สมูทเพราะบางครั้งกดสวิตช์แต่ยังไม่เข้าเงื่อนไขคำสั่งอ่านสวิตช์ ทำให้เหมือนกดได้ไม่ได้บาง แนะนำเขียนโคดให้กระชับ หรือใช้สวิตช์กับคำสั่ง interrupt ลองศึกษาจากตัวอย่างนี้ครับ http://shazsterblog.blogspot.com/2011/11/arduino-interrupt-based-led-with-toggle.html 

 

1
แสดงความคิดเห็นที่ 1-1 จากทั้งหมด 1 ความคิดเห็น
ข้อความ
ชื่อผู้โพส
ข้อมูลสำหรับการติดต่อกลับ (ไม่เปิดเผย เห็นเฉพาะเจ้าของร้าน)
อีเมล
เบอร์มือถือ
  • ตอบกระทู้

หมวดหมู่สินค้า

สมาชิก Arduino All

เข้าสู่ระบบด้วย
เข้าสู่ระบบ
สมัครสมาชิก

ยังไม่มีบัญชีเทพ สร้างบัญชีใหม่ ไม่เกิน 5 นาที
สมัครสมาชิก (ฟรี)

Arduino All ขายดี

รหัสสินค้า A015
270.00 บาท
สินค้าหมด
รหัสสินค้า A233
5.00 บาท
  • สั่งซื้อ
รหัสสินค้า A115
10.00 บาท
  • สั่งซื้อ
รหัสสินค้า A097
4.00 บาท
  • สั่งซื้อ
รหัสสินค้า A238
4.00 บาท
  • สั่งซื้อ
รหัสสินค้า A474
7.00 บาท
  • สั่งซื้อ
รหัสสินค้า A014
95.00 บาท
  • สั่งซื้อ
รหัสสินค้า A237
4.00 บาท
  • สั่งซื้อ
Go to Top