اطلاعیه

Collapse
No announcement yet.

ایا میشه خروجی سنسور dht22 از نوع float هست رو ...

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ایا میشه خروجی سنسور dht22 از نوع float هست رو ...

    سلام به دوستان
    ایا راهی هست خروجی سنسور dht22 از نوع float هست رو به char تغییر داد .
    دو نوع کد دارم من که هرکدوم به روشی از سنسور مربوط خروجی میگیرند
    کد اول :
    char temperature[] = " 00.00";
    char temperature_msb;
    if(temperature_msb < 0){
    temperature_msb = abs(temperature_msb);
    temperature[0] = '-';
    }
    else
    temperature[0] = ' ';
    temperature_lsb >>= 6;
    temperature[2] = temperature_msb % 10 + 48;
    temperature[1] = temperature_msb / 10 + 48;
    if(temperature_lsb == 0 || temperature_lsb == 2){
    temperature[5] = '0';
    if(temperature_lsb == 0) temperature[4] = '0';
    else temperature[4] = '5';
    }
    if(temperature_lsb == 1 || temperature_lsb == 3){
    temperature[5] = '5';
    if(temperature_lsb == 1) temperature[4] = '2';
    else temperature[4] = '7';
    }
    // Temperature (Celcius)

    و کد دوم
    //include library
    #include "DHT.h"
    //Define the input pin (pin #2)
    #define I_DHT22 19
    //Define the sensor type (here DHT22)
    #define DHTTYPE DHT22
    //Object declaration
    DHT dht(I_DHT22, DHTTYPE);

    void setup() {
    //Serial port communication
    Serial.begin(9600);
    Serial.println("DHT22 - Test");
    //Initialization
    dht.begin();
    }

    void loop() {
    //2 seconds delay between measurements
    delay(2000);

    //Temperature (Celcius)
    float temperature = dht.readTemperature();
    if (isnan(temperature)) {
    Serial.println("Failed to read temperature from DHT sensor.");
    }
    else {
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.print(" *C\r\n");
    }

    //Humidity
    float humidity = dht.readHumidity();
    if (isnan(humidity)) {
    Serial.println("Failed to read humidity from DHT sensor.");
    }
    else {
    Serial.print("Humidity: ");
    Serial.print(humidity);
    Serial.print(" %\r\n");
    }

    //Heat index
    if (isnan(temperature) || isnan(humidity)) {
    Serial.println("Unable to compute heat index (missing parameters).");
    }
    else {
    float heatIndex = dht.computeHeatIndex(temperature, humidity, false);
    if (isnan(heatIndex)) {
    Serial.println("Failed to compute heat index.");
    }
    else {
    Serial.print("Heat index: ");
    Serial.print(heatIndex);
    Serial.print(" *C\r\n");
    }
    }
    }

    در کل کد ها زمین تا اسمون با هم فرق دارن
    ایا راهی هست بشه خروجی ها به char تبدیل کرد ؟؟؟

    #2
    پاسخ : ایا میشه خروجی سنسور dht22 از نوع float هست رو ...

    با سلام .
    منظورت اینه که عدد فلوت به رشته قابل چاپ روی lcd تبدیل بشه?
    به زبان C باید باشه ؟ این کد ظاهرا به زبان C هست.
    جدیدترین ویرایش توسط hossein_10; ۲۳:۳۲ ۱۳۹۷/۰۸/۱۸.

    دیدگاه


      #3
      پاسخ : ایا میشه خروجی سنسور dht22 از نوع float هست رو ...

      درود . کد دوم که برای آردو هست ، هدف شما از تبدیل به char چیه ?

      دیدگاه


        #4
        پاسخ : ایا میشه خروجی سنسور dht22 از نوع float هست رو ...

        سلام
        اره برای نمایشش توی نمایشگر چون خطا کانورت میگیره ؟

        دیدگاه


          #5
          پاسخ : ایا میشه خروجی سنسور dht22 از نوع float هست رو ...

          نوشته اصلی توسط systam نمایش پست ها
          سلام
          اره برای نمایشش توی نمایشگر چون خطا کانورت میگیره ؟
          با سلام . من برای زبان c بلدم . و با کدویژن اینکار رو انجام دادم .
          اول هدر stdio.h رو باید اینکلود بکنی .توی کد ویژن اینطوریه #include <stdio.h>
          بعد یه آررایه تعریف میکنی به این صورت char lcd_Buf[n] که این n در واقع بایدحداقل 1 عدد از طول رشته ای که میخوای چاپ کنی بیشتر باشه مثلا اگر طول رشته 20 میشه
          شما باید طول آرایه رو حداقل n=21 انتخاب کنی .

          حالا با sprintf( lcd_buf , " mytext %5.2f %5.2f " , arg1 , arg2 ) این تابع میتونی اعداد اعشاری رو به رشته تبدیل کنی هرچی توی رشته بنویسی مثلا mytext به همراه اعداد اعشاری با فرمتی که خودت تععیین میکنی مثل 5.2f% ; کلا به یک رشته تبدیل میشه و توی lcd buf قرار میگیره و فقط دقت کن طول رشته با احتساب فاصله ها از طول lcd_buf بیشتر نشه . %5.2f هم به این معنیه که عددی که میخوای چاپ بشه به صورت 5 کاراکتر با احتساب نقطه اعشار و دورقم بعد از اعشار چاپ میشه و arg1 , arg2 اعدادی هستن که باید چاپ بشن .....حتما هم نباید 2 تا باشن میتونی تعداد بیشتری بنویسی ولی باید توی رشته فرمتشون رو مشخص کنی .
          بعد بایدآخر رشته رو ببندی برای اینکار لازمه اگه اگر مثلا طول رشته 16کاراکتر شد توی بدنه اصلی برنامه ' lcd_buf[16]= '\0 . البته توی بعضینسخه ها همون تابع sprintf اینکارو میکنه و لی توی بعضیها هم نه . شما دفعه اول احتیاطا اینکارو بکنن.

          بعدش دیگه راحته ، کافیه رشته رو روی lcd نمایش بدی .
          جدیدترین ویرایش توسط hossein_10; ۱۳:۲۳ ۱۳۹۷/۰۸/۲۵.

          دیدگاه


            #6
            پاسخ : ایا میشه خروجی سنسور dht22 از نوع float هست رو ...

            من متوجه مشکل نمیشم ، مگه آردو عدد دما و رطوبت بدست آمده از سنسور dht رو روی lcd نشون نمیده ؟ لزوم تبدیل به کاراکتر چیه ؟ چه نوع lcd ?

            دیدگاه

            لطفا صبر کنید...
            X