Seeduino indexOf - со странностями.

pavelrer
Offline
Зарегистрирован: 22.01.2022

Добра! Не эксперт, прошу помощи.

Пытаюсь привязать 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?
как так?
 
Спасибо!
b707
Offline
Зарегистрирован: 26.05.2017

схему питания от БП выкладывайте. Только СВОЮ схему, а не "нашел похожую в инете"

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

схему питания от БП выкладывайте. Только СВОЮ схему, а не "нашел похожую в инете"

И скетч ПОЛНОСТЬЮ (для альтернативно одарённых - ПОЛНОСТЬЮ), чтобы его можно было компилировать и запускать.

А также, скетч должен быть выложен по правилам форума - с номерами строк!

pavelrer
Offline
Зарегистрирован: 22.01.2022
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\"");   // Давим все СМС


  }
}

 

pavelrer
Offline
Зарегистрирован: 22.01.2022

Блок питания обычная зарядка для айфона, через usb seeeduino xiao samd21.

Или так же от компьютера.

С LoRa модемом работает баз проблем.

Я, только учусь.

Не работает только тогда когда закрываем arduino ide, даже от компа перестает.

sadman41
Offline
Зарегистрирован: 19.10.2016

71 Serial.println(DataPhoneNum);

pavelrer
Offline
Зарегистрирован: 22.01.2022

71 Serial.println(DataPhoneNum);

Будет номер телефон с которого послали.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

pavelrer пишет:

71 Serial.println(DataPhoneNum);

Будет номер телефон с которого послали.

Вы ставили печать и проверяли? Или теоретизируете?

Поставьте и покажите нам, что выводит в хорошем случае, и в плохом.

И, да, кстати, Вас просили нарисовать схему. Где она? А заодно и фото сборки.

Upper
Offline
Зарегистрирован: 23.06.2020

Я не работал с sim800. Поэтому дальше общие соображения про отличия при питании от БП и ПК, которые могут не помочь в вашем случае.

Вы отправляете AT команды на SIM800, но не проверяете ответ. Может быть она не успевает инициализироваться  при питании от БП? Поставьте для пробы задержку секунд на 5, чтобы отбросить эту версию.

pavelrer
Offline
Зарегистрирован: 22.01.2022

Всем спасибо за внимание, вопрос решен.

Перед инициализации модема нужно было поставит задержку в секунду, ну или резет жать.

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

pavelrer пишет:

71 Serial.println(DataPhoneNum);

Будет номер телефон с которого послали.

Вы ставили печать и проверяли?


Видите вона как.
Без задержки печатает правильно, а работает неправильно. Волшебный дилэй заставляет и печатать и работать как полагается.
Думаю, что нужно в анналы внести: если что-то не работает, поставьте delay на UINT32_MAX.