Thông báo

Collapse
No announcement yet.

DHT11 : Cảm biến nhiệt độ-độ ẩm hiển thị lcd >> các bác xem em phần xuất tín hiệu báo động với !!

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • DHT11 : Cảm biến nhiệt độ-độ ẩm hiển thị lcd >> các bác xem em phần xuất tín hiệu báo động với !!

    ko hiểu sao em sai chỗ nào mà khi nd quá 40 độ lại ko có đèn báo
    #include "main.h"
    #include "lcd_new.h"


    #use FAST_IO(B)
    #use FAST_IO(C)
    #use FAST_IO(D)
    #use FAST_IO(E)

    #byte PORTA=0x05
    #byte PORTB=0x06
    #byte PORTC=0x07
    #byte PORTD=0x08
    #byte PORTE=0x09
    #bit led = portD.0

    #bit DHT_DATA = PORTA.1
    #define SET_PIN SET_TRIS_A
    #define DHT_ER 0
    #define DHT_OK 1
    #define DHT_ND 0
    #define DHT_DA 1

    float nhietdo = 0, doam=0;
    unsigned char DHT_GetTemHumi (unsigned char select)
    {
    unsigned char buffer[5]={0,0,0,0,0};
    unsigned char ii,i,checksum;

    SET_PIN(0x00);// set la cong ra
    DHT_DATA=1;
    delay_us(60);
    DHT_DATA = 0;
    delay_ms(25); // it nhat 18ms
    DHT_DATA = 1;
    SET_PIN(0xff);
    delay_us(40);
    if(DHT_DATA==1)return DHT_ER ;
    else while(DHT_DATA==0); //Doi DaTa len 1
    delay_us(60); //60
    if(DHT_DATA==0)return DHT_ER;
    else while((DHT_DATA==1)); //Doi Data ve 0
    //Bat dau doc du lieu
    for(i=0;i<5;i++)
    {
    for(ii=0;ii<8;ii++)
    {
    while(DHT_DATA==0);//Doi Data len 1 !DHT_DATA
    delay_us(50); //50
    if(DHT_DATA==1)
    {
    buffer[i]|=(1<<(7-ii));
    while(DHT_DATA==1);//Doi Data xuong 0
    }
    }
    }
    //Tinh toan check sum
    checksum=buffer[0]+buffer[1]+buffer[2]+buffer[3];
    //Kiem tra check sum
    if((checksum)!=buffer[4])return DHT_ER;
    //Lay du lieu
    if (select==DHT_ND)
    {
    //Return the value has been choosen
    return(buffer[2]);
    }
    else if(select==DHT_DA)
    {
    return(buffer[0]);
    }
    return DHT_OK;


    }
    //------------------------------------------------------//
    void main()
    {
    set_tris_d(0xff);
    set_tris_a(0xff);
    lcd_init();
    delay_ms(200);
    lcd_gotoxy(7,1);
    lcd_putc('H');
    delay_ms(100);
    lcd_putc('I');
    delay_ms(200);
    lcd_putc('!');
    delay_ms(1000);
    printf(lcd_putc,"\f " );
    printf(lcd_putc,"dangphuctiep");
    delay_ms(1000);
    lcd_gotoxy(1,2);
    printf(lcd_putc,"demo" );
    delay_ms(2000);
    printf(lcd_putc,"\f " );
    while(TRUE)
    {
    set_tris_d(0xff);
    nhietdo= DHT_GetTemHumi (DHT_ND);
    delay_ms(400);
    lcd_gotoxy(1,1);
    printf(lcd_putc,"Nhiet do: " );
    lcd_gotoxy(10,1);
    printf(lcd_putc,"%3.1f ^C",nhietdo);
    delay_ms(800);
    if (nhietdo>=40)
    {
    led=0;
    }
    doam= DHT_GetTemHumi (DHT_DA);
    lcd_gotoxy(1,2);
    printf(lcd_putc,"Do am: " );
    lcd_gotoxy(10,2);
    printf(lcd_putc,"%3.1f ",doam);
    lcd_gotoxy(14,2);
    lcd_putc('%');
    delay_ms(1000);
    }
    }
    Last edited by dangphuctiep; 23-07-2016, 01:53.

  • #2
    Nó không xuất tín hiệu báo động vì code không phải do em viết, mà copy từ nơi khác, nên em chả hiểu gì, chả biết sửa ở đâu. Viết từ đầu từng ít một, kiểm tra từng ít một ... may ra chạy được em ạ.
    Phần mềm tự do hoặc không dùng máy tính nữa !.

    Comment


    • #3
      Liên hệ với người viết code xem có thiếu chỗ nào không Bác

      Comment


      • #4
        Không hiểu lắm câu hỏi của bạn. Nếu bạn cho hiển thị LCD thì nhiệt độ và độ ẩm đã hiển thị đúng thông số chưa, trên 40 có hiển thị không.
        Nếu việc hiển thị đã đúng thì phần cảnh báo sẽ dễ dàng thôi

        Comment


        • #5
          Nguyên văn bởi chuotbu92 Xem bài viết
          Không hiểu lắm câu hỏi của bạn. Nếu bạn cho hiển thị LCD thì nhiệt độ và độ ẩm đã hiển thị đúng thông số chưa, trên 40 có hiển thị không.
          Nếu việc hiển thị đã đúng thì phần cảnh báo sẽ dễ dàng thôi
          mọi thứ đều hiển thị..nhưng riêng xuất tín hiệu ra lại ko dc (

          Comment


          • #6
            Nguyên văn bởi dangphuctiep Xem bài viết
            mọi thứ đều hiển thị..nhưng riêng xuất tín hiệu ra lại ko dc (
            Bạn thử bỏ led=0; delay_ms(800); led =1; ở trong thân while(1) xem câu lệnh đó của bạn có thực thi ko

            Comment

            Về tác giả

            Collapse

            dangphuctiep Tìm hiểu thêm về dangphuctiep

            Bài viết mới nhất

            Collapse

            Đang tải...
            X