سلام من یک سنسور دمای 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 ولت و دیتا گذاشتم هرچند برشم میدارم فرقی نمیکنه، لطفا راهنمایی بفرمایید دلیل این مشکل چیست و چطور باید برطرفش کنم؟
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);//ارسال پیام به شماره مشخص شده
}
}
}
سلام مهندس دمیرچی بازم امروز هنگ کرد! چند روزی خوب بود تا امروز که دوباره هنگ کرد، با این شرایط میشه مشکل از سنسور یا مثلا جریان برگشتی یا ولتاژ و اینطور چیزا باشه؟ چون به محض اینکه استعلام دما رو میگیرم و رو گوشیم نتیجه میاد هنگ میکنه!
سلام. اشکالات برنامه رو رفع کردم اما باز هم گاهی هنگ میکنه، فقط وقتی مشکل حل میشه که کتابخانه dht و دستوراتش رو بر میدارم، ممکنه اشکال از کتابخانه باشه؟
باید بررسی بکنید احتمالا جایی در برنامه چیزی باعث میشود برنامه قفل بشود و به صورت لاگ گیری در SD کارت یا چاپ در سریال و ذخیره کردن داده های سریال در سیستم تا بررسی بکنید چه دلیلی باعث قفل کردن برنامه میشود.