سلام میخوام یک شرط بذارم که اگر ارتباط ماژول sim800 با آردینو قطع شده بود با استفاده از تایمر واچ داگ یا تابع ریست آردینو ریست بشه اما هر شرطی میذارم یا ریست نمیشه یا مدام ریست میشه, لطفا راهنمایی بفرمایید چطور میتوانم شرطی بذارم که مدام چک کند که اگر آردینو ماژول سیمکارت را گم کرده بود دستور ریست اجرا شود.
سمت آردوینو دستور AT را به صورت دوره ای به سمت سیم کارت ارسال کنید. در صورتی که بعد از یک تایم مشخص جواب OK را دریافت نکردید دستور ریست را صادر کنید.
البته بهتر هست از دستور AT+CREG استفاده کنید که ببینید ارتباط خود ماژول سیم کارت نیز قطع شده است یا نه
ویرایش اول:
باید پردازش دیتای سریال را به درستی انجام بدهید.
شما وقتی از دستور readStringUntil که استفاده میکنید دیتای شما به صورت String دریافت می شود حالا باید بیاید این دستور را 2-3 بار پشت هم تکرار کنید ببینید که دستور OK در کدام یک می آید (این احتمال نیز وجود دارد به صورت داعم در حال جا به جایی باشد)
در مورد شرط هم از دستور
if (value.startsWith("OK"){
}
استفاده کنید تا در صورتی که اطلاعات جلوتر به هم ریخته بودند متوجه آنها نشود.
بهترین پیشنهاد بنده این می باشد
Serial.println("AT+CREG"); // respond +CREG: 1,1
String value;
delay(5);
for (byte i = 0; i < 5; i++)
{
value = Serial.readStringUntil('\n');
if (value.startsWith("+CREG:"))
{
if (value.substring(7, 8).toInt() == 1)
{
//ok
}
}
}
ممنون از مهندس دمیرچی عزیز.
اتفاقا از همین دستورات استفاده کردم و شرطی گذاشتم که اگر okرا دریافت نکرد ریست کند و اگر دریافت کرد به برنامه ادامه دهد اما درست عمل نکرد و مدام ریست می شود, گویی متوجه دریاف ok نمی شود و اینکه مدام این دستور در سریال مانیتور اجرا میشود چون در تابع لوپ است!
متاسفنه درحال حاضر به نقشه دسترسی ندارم.
اتصال به این صورت است که یک خازن موازی منبع تغذیه 4.2 ولت 3 آمپری به مثبت و منفی ماژول وصل شده, زمین ماژول و زمین آردینو به هم وصل شدن rx و tx ماژول هم به پایه های 10 و 11 آردینو وصل شدن