Seeduino indexOf - со странностями.
- Войдите на сайт для отправки комментариев
Сб, 22/01/2022 - 06:28
Добра! Не эксперт, прошу помощи.
Пытаюсь привязать sim800
Все Хорошо, как в кине НО!
String DataPhoneNum;
String phones = "+76577655556";
if (phones.indexOf(DataPhoneNum) >= 0)
{
Serial.println(DataPhoneNum);
digitalWrite(13, ! digitalRead(13));
}
Да все бы хорошо если номер наш
phones.indexOf(DataPhoneNum) >= 0
если нет то -1
Но работает только тогда когда к контроллеру присоединен usb шланг с ide.
Как только питаю от бп, любой номер пролетает в if?
как так?
Спасибо!
схему питания от БП выкладывайте. Только СВОЮ схему, а не "нашел похожую в инете"
схему питания от БП выкладывайте. Только СВОЮ схему, а не "нашел похожую в инете"
И скетч ПОЛНОСТЬЮ (для альтернативно одарённых - ПОЛНОСТЬЮ), чтобы его можно было компилировать и запускать.
А также, скетч должен быть выложен по правилам форума - с номерами строк!
String inputString; String Set_String1; unsigned int myindex; unsigned int myindex_2; unsigned int myindex_3; String Balance; String SMS_INPUT; String SMS_NUMER; String Balance_Decode; unsigned int myindex_4; String DataPhoneNum; String SmsTemp = ""; int bbs; String phones = "+75556667788"; void setup() { pinMode(13, OUTPUT); // Задаем режим светодиода на плате pinMode(2, OUTPUT); Serial1.begin(9600); // Порт обмена с модемом на пинах delay(200); Serial1.println("AT+IPR=9600"); // Для настройки скорости delay(200); Serial1.println("AT+CMGF=1"); // Включить TextMode для SMS delay(200); Serial1.println("AT+CMGDA=\"DEL ALL\""); // Удалить все сообщения, чтобы не забивали память модуля delay(200); Serial1.println("AT+CSCB=1"); // Запрет на прием специальных СМС сообщений delay(200); } void loop() { while (Serial1.available()) // Ожидаем прихода данных (ответа) от модема... { inputString = Serial1.readStringUntil(10); inputString.toUpperCase(); // Меняем все буквы на заглавные if (inputString.indexOf("+CMTI:") > -1) // Пришло СМС { myindex = inputString.indexOf(','); inputString.remove(0, myindex + 1); // Обрезали <+CMTI: "SM",1> до запятой включительно Set_String1 = ("AT+CMGR=" + inputString); Serial1.print(Set_String1); // Отправим команду на чтение сохраненного СМС } // Serial.println(inputString); // ========================== Проверка разрешенных номеров if (inputString.indexOf("+CMGR:") > -1) { DataPhoneNum = inputString; myindex_2 = DataPhoneNum.indexOf(','); // Обрезаем номер DataPhoneNum.remove(0, myindex_2 + 2); myindex_2 = DataPhoneNum.indexOf(','); DataPhoneNum.remove(myindex_2 - 1); DataPhoneNum.trim(); if (phones.indexOf(DataPhoneNum) > -1) // !!! ТУТ НЕ РАБОТАЕТ { digitalWrite(13, ! digitalRead(13)); Serial.println("yes_1"); } } SMS_INPUT = inputString; // Тут наша СМС if (SMS_INPUT.indexOf("ON") > -1) // !!! ТУТ РАБОТАЕТ { Serial.println("yes_2"); digitalWrite(13, ! digitalRead(13)); } Serial1.println("AT+CMGDA=\"DEL ALL\""); // Давим все СМС } }Блок питания обычная зарядка для айфона, через usb seeeduino xiao samd21.
Или так же от компьютера.
С LoRa модемом работает баз проблем.
Я, только учусь.
Не работает только тогда когда закрываем arduino ide, даже от компа перестает.
71 Serial.println(DataPhoneNum);
71 Serial.println(DataPhoneNum);
Будет номер телефон с которого послали.
71 Serial.println(DataPhoneNum);
Будет номер телефон с которого послали.
Вы ставили печать и проверяли? Или теоретизируете?
Поставьте и покажите нам, что выводит в хорошем случае, и в плохом.
И, да, кстати, Вас просили нарисовать схему. Где она? А заодно и фото сборки.
Я не работал с sim800. Поэтому дальше общие соображения про отличия при питании от БП и ПК, которые могут не помочь в вашем случае.
Вы отправляете AT команды на SIM800, но не проверяете ответ. Может быть она не успевает инициализироваться при питании от БП? Поставьте для пробы задержку секунд на 5, чтобы отбросить эту версию.
Всем спасибо за внимание, вопрос решен.
Перед инициализации модема нужно было поставит задержку в секунду, ну или резет жать.
71 Serial.println(DataPhoneNum);
Будет номер телефон с которого послали.
Вы ставили печать и проверяли?
Видите вона как.
Без задержки печатает правильно, а работает неправильно. Волшебный дилэй заставляет и печатать и работать как полагается.
Думаю, что нужно в анналы внести: если что-то не работает, поставьте delay на UINT32_MAX.