مشکل سنسور دمای dht22

10 روز قبل
24 بازدید

0

سلام من یک سنسور دمای 22dht دارم که وقتی به آردینو وصلش میکنم و با یک پیامک می خوام دما و رطوبت رو برای روی گوشی پیامک کنه بعد ارسال دما و رطوبت آردینو هنگ میکنه و دیگه هیچ فرمانی رو نمیپذیره و باید دستی ریست کنم داره درست بشه

دستورات مربوط به دما و رطوبت که در برنامه دارم:

 

if (inputString.indexOf("TEMP") > 0) {
    hum = dht.readHumidity();
    temp = dht.readTemperature();
    gsmSerial.print("ROTOBAT(%): ");
    gsmSerial.println(hum);
    gsmSerial.print("DAMA(C):");
    gsmSerial.print(temp);
    delay(2000); .
    String value = "";
    value = gsmSerial.readStringUntil('\n');
    if (value.startsWith("ROTOBAT"))
    {
      Serial.println(value);
      gsmSerial.println(ersal[i]);
      delay(500);
      while (Serial.available())
      {
        gsmSerial.write(Serial.read());
      }
      while (gsmSerial.available())
      {
        Serial.write(gsmSerial.read());
      }
      gsmSerial.print(value); //محتوای ارسالی
      delay(500);
      while (Serial.available())
      {
        gsmSerial.write(Serial.read());
      }
      while (gsmSerial.available())
      {
        Serial.write(gsmSerial.read());
      }
      gsmSerial.write(26);
    }
  }


     

لازم بذکر است ابتدای برنامه موارد لازم مثل کتابخانه dht  و... را گذاشتم، برای اولین بار هم که کلمه temp رو ارسال میکنم دما و رطوبت رو برام میفرسته اما بعد اون کلا هنگ میکنه، یک مقاومت هم بین 5 ولت و دیتا گذاشتم هرچند برشم میدارم فرقی نمیکنه، لطفا راهنمایی بفرمایید دلیل این مشکل چیست و چطور باید برطرفش کنم؟

10 روز قبل
راحله
1

افزودن دیدگاه

1 پاسخ ثبت شده است
0

با سلام

خیلی بهم ریخته کد نویسی کرده اید.

در مرحله اول چه شرطی بررسی میشود؟؟

inputString.indexOf("TEMP")

این دستور اشتباه است.

سپس دستور های while های پشت هم قرار داده اید که همگی باعث قفل شدن برنامه میشوند.

اگر طبق توضیحات قبلی که بهتون گفته بودم  پیش بروید.

 

در ادامه اش به این صورت میشود

String sendMassage = "";
bool sendMessage(String number, String value)
{

    Serial.println("Message to :" + number + "\t-" + value);
    gsmSerial.flush();
    delay(10);
    gsmSerial.println("AT+CMGS=\"+98" + number + "\"");
    delay(5);
    while (true)
    {
        if (gsmSerial.available())
        {
            checker = gsmSerial.readStringUntil('\n');
            checker.trim();
            Serial.println(checker);

            if (checker.startsWith("+CME ERROR: 58"))
            {
                Serial.println("Error on send line");
                return false;
            }
            if (checker.startsWith(">"))
            {
                gsmSerial.println(value);

                delay(20);
                gsmSerial.write(26);
                while (true)
                {
                    if (gsmSerial.available())
                    {
                        checker = gsmSerial.readStringUntil('\n');
                        Serial.println(checker);

                        if (checker.startsWith("OK"))
                        {
                            delay(100);
                            gsmSerial.readStringUntil('\n');
                            gsmSerial.readStringUntil('\n');
                            return true;
                        }
                        else if (checker.startsWith("+CMS ERROR: "))
                        {
                            return false;
                        }
                    }
                }
            }
        }
    }
}
void loop()
{
    /*
    با فرض بر اینکه پیامک دریافتی به صورت زیر باشد
    +CMGL: 1,"REC UNREAD","+98123456789",,"07/02/18,00:05:10+32"
    Reading text messages is easy.
    */
    if (gsmSerial.available())
    {
        inputString = gsmSerial.readStringUntil('\n');
        inputString.trim();
        if (inputString.startsWith("+CMGL:")) // در اینجا خط اول خوانده شده و به این صورت می باشد +CMGL: 1,"REC UNREAD","+98123456789",,"07/02/18,00:05:10+32"
        {
            inputString.remove(0, inputString.indexOf(',') + 1); // در اینجا تا , را حذف میکنیم و می شود "REC UNREAD","+98123456789",,"07/02/18,00:05:10+32"
            inputString.remove(0, inputString.indexOf(',') + 2); // این کار را تکرار میکنیم
            //+98123456789",,"07/02/18,00:05:10+32"
            Serial.println("------------------------------------");
            Serial.println(inputString); //
            Serial.println("------------------------------------");

            inComingNumber = inputString.substring(inputString.indexOf('+') + 3, inputString.indexOf('"')).toInt(); // در این مرحله از کارکتر بعد + 3 عدد جلو میرویم و تا " را میخوانیم  و به عدد تبدیل میکنیم و نگه داری میکنیم.
            Serial.print("New Number is : ");
            Serial.println(inComingNumber);
            inputString = gsmSerial.readStringUntil('\n'); // در صورت تایید خط بعدی که متن پیام هست خوانده می شود.
            // در اینجا چه کاری میخواهید انجام بدهید به عهده شما هست که شماره شما چه چیزی می باشد.
            // برای مثال شما میخواهید شماره جدیدی را سیو کنید می توانید به صورت زیر این کار را انجام بدهید.
            inputString.trim();                 // فرض می کنیم متن پیام به صورت زیر باشد Save3:456123789
            if (inputString.startsWith("TEMP")) // متنی که باید بررسی بشود را در اینجا قرار میدهیم
            {
                massage = "Temp:";
                massage = massage + String(dht.readTemperature());
                massage = massage + " ,Humidity: ";
                massage = massage + String(dht.readHumidity());
                sendMessage(String(inComingNumber), massage);//ارسال پیام به شماره مشخص شده
            }
        }
    }
}
9 روز قبل
محمد دمیرچی
4310

افزودن دیدگاه


انجمن کافه‌ربات © 1400