Коллеги ине нужна помощь ибо я туплю.

Тема в разделе "Arduino & Shields", создана пользователем gospodenkods, 28 сен 2021.

  1. gospodenkods

    gospodenkods Нуб

    Ребят прошу меня не пинать.

    Что имеем .
    Nano + Sim900 с последней прилетают комманды в виде SMS

    Код ниже
    Код (C++):
    void loop() {
        val = "";
        ch = 0;
     
        // Тело  программы ,  в этом бесконечном цикле проверяем  что вывалилось в порт  от GSM модуля. Если звонок RING то ложим связь .  Если комманды то вызываем процедуры
        if (mySerial.available()) {  //если GSM модуль что-то послал нам, то
            while (mySerial.available()) {  //сохраняем входную строку в переменную val
                ch = mySerial.read();
                val += char(ch);
                delay(40);
            }
        }

        //Поймем  что пришло смс
        if (val.indexOf("+CMT") > -1) {
            Serial.println("SMS Recive");
           val.toUpperCase();
            //Включили первый порт
            if (val.indexOf("R1P1") > -1)
            {
                set_pin_status(0, 0);
            }
            else if (val.indexOf("R1P0") > -1)
            {
                set_pin_status(0, 1);
            }
         
            if (val.indexOf("R2P1") > -1)
            {
                set_pin_status(1, 0);
            }
            else if (val.indexOf("R2P0") > -1)
            {
                set_pin_status(1, 1);
            }
         
            if (val.indexOf("R3P1") > -1)
            {
                set_pin_status(2, 0);
            }
            else if (val.indexOf("R3P0") > -1)
            {
                 set_pin_status(2, myPinsStatus[2]!=0);
            }
         
            if (val.indexOf("R4P1") > -1)
            {
                set_pin_status(3, 0);
            }
            else if (val.indexOf("R4P0") > -1)
            {
                set_pin_status(3, 1);
            }
            clearsms();
        }
        //Очистка  переменной
        val = "";
        val_number = "";


    }
    Проблема заключается втом ,что отсылаю СМС R1P1 эту подстроку находит
    val.indexOf("R1P1") точно так же обстоят дела с
    val.indexOf("R1P0") и так далее . НО На СМС
    val.indexOf("R3P1") в indexOf возвращает -1 т.е нашел .. И самое ,что интересное что если несколько раз перекомпилировать то возвращать ужу будет val.indexOf("R4P1") - 1 или val.indexOf("R0P1") .

    Я себе уж весь мозг сломал и не понимаю куда рыть уже, что я делаю не так ?
    В Serial выводил val , значение всегда считыватся но indexOf не видит вхождение.
     
  2. Asper Daffy

    Asper Daffy Иксперд

    С какого бодуна? Вам нужна помощь? Или Вам нужно: "Молодец gospodenkods! Мы в тебя верим!"
    Простите, не понял по нику, Вы мужчина или женщина? Если мужчина, то такая фигня не может сломать Вам мозг. Мозг мужчине могут вынести только две вещи: см.


    Вы уверены, что это достаточный повод делать что-то за Вас?

    В общем так, помогайте себе сами. Для этого, для начала после комментария

    //Поймем что пришло смс

    Вставьте что-нить вроде Serial.print("val='"); Serial.print(val); Serial.println("'");

    Так Вы действительно поймёте что именно Вам пришло и, думаю, проблема снимется.
     
  3. b707

    b707 Гуру

    Код (C++):
    if (val.indexOf("R2P1") > -1)
            {
                set_pin_status(1, 0);
            }
            else if (val.indexOf("R2P0") > -1)
            {
                set_pin_status(1, 1);
            }
       
            if (val.indexOf("R3P1") > -1)
            {
                set_pin_status(2, 0);
            }
            else if (val.indexOf("R3P0") > -1)
            {
                 set_pin_status(2, myPinsStatus[2]!=0);
            }
    интересно, чем вариант "R3P0" провинился. что вы его вот так выставляете
    работать не будет
     
  4. gospodenkods

    gospodenkods Нуб


    Конечно не будет , это уже дурь была.
     
  5. DetSimen

    DetSimen Гуру

    val = ""; вынеси из loop() чисти ее в другом месте
     
  6. gospodenkods

    gospodenkods Нуб

    Вам явно бабы не дают. Раз так хамите.
     
  7. gospodenkods

    gospodenkods Нуб

    Сам спросил , сам отвечаю.

    Подкинул другую платку , все завелось.
     
  8. b707

    b707 Гуру

    слабак :)
    какую плату-то?
    скорее всего дело в коде. если не исправил - ошибки потом снова вылезут
     
    Andrey12 нравится это.
  9. Asper Daffy

    Asper Daffy Иксперд

    Да, не, b707, если плата китайская, то при замене её на нормальную строки сами парситься начинают. Это же известно.
     
    DetSimen и Andrey12 нравится это.