Ребят прошу меня не пинать. Что имеем . 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 не видит вхождение.
С какого бодуна? Вам нужна помощь? Или Вам нужно: "Молодец gospodenkods! Мы в тебя верим!" Простите, не понял по нику, Вы мужчина или женщина? Если мужчина, то такая фигня не может сломать Вам мозг. Мозг мужчине могут вынести только две вещи: см. Вы уверены, что это достаточный повод делать что-то за Вас? В общем так, помогайте себе сами. Для этого, для начала после комментария //Поймем что пришло смс Вставьте что-нить вроде Serial.print("val='"); Serial.print(val); Serial.println("'"); Так Вы действительно поймёте что именно Вам пришло и, думаю, проблема снимется.
Код (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" провинился. что вы его вот так выставляете работать не будет
Да, не, b707, если плата китайская, то при замене её на нормальную строки сами парситься начинают. Это же известно.