Нужна помощь в выдергивании номера из строки в терминале
- Войдите на сайт для отправки комментариев
Пт, 29/09/2017 - 20:39
Сабж - SIM800L; Нужно сохранить номер при поступлении самого первого входящего вызова в EEPROM, не пойму толь я дурак, толи лыжи не едут. Скетч на этапе реализации парсинга номера из строки:
#include <SoftwareSerial.h> #include <EEPROM.h> SoftwareSerial SIM800L(2, 3); String serialString = ""; String lastString = ""; int number = 0; void setup ( ) { Serial.begin(19200); SIM800L.begin(19200); SIM800L.println("AT"); Serial.println("Starting..."); //delay(20000); //регистрация в сети SIM800L.println("AT+CLIP=1"); pinMode(5, INPUT); //пин свч допплер радара if (EEPROM.read(3) != 125){ Serial.println("First run"); } else { EEPROM.get (5, number); Serial.println("phone number to calls:"); Serial.println("+" + number); } } void loop( ) { while (SIM800L.available()){ char c = (SIM800L.read()); serialString += c; } if (serialString != lastString){ Serial.println(serialString); lastString = serialString; } if (serialString.startsWith("+CLIP:")){ Serial.println("phone number finded"); int index = serialString.lastIndexOf(",", 23); Serial.println(serialString.substring(8, index)); } // if (Serial.available()){ //трансляция команд терминала ардуино в терминал модема SIM800L.write(Serial.read()); } }
В терминале вот такая беда:
RING +CLIP: "+79045825809",145,"",0,"",0 NO CARRIER RING +CLIP: "+79045825809",145,"",0,"",0 NO CARRIER
То есть, вход в условие начала строки с "+CLIP" не выполняется. Не пойму почему. Думал - не знаю чего-то, попробовал как в одном из примеров из инета условие с "+CLIP" менять на "RING" - ну, те же грабли.
1. Замените в 38 строке finded на found - глаза режет.
2. Вы не ждёте конца строки, а просто читаете пока в сериале что-то есть и надеетесь, что стрка пришла целиком. Это не всегда так. В любом случае, в строку 38 вставьте такую конструкцию:
Serial.print("just before comparison:::"); Serial.print(serialString); Serial.println(":::");
И посмотрите. что у Вас там непосредственно перед сравнением. Если проблема не решится, публикуйте изменённый скетч и протокол из сериала.
1. Заменил)) Самое смешное, что перед глазами висит табличка с irr. verbs)), а что я иногда с деепричастиями делаю, ммм...))
2. Спасибо за подсказку, выяснилось, что в переменной не строки, а черт знает что, хотя в терминале и выглядит все опрятно. Получается, нужно отталкиваться от кодов возврата каретки?
В строку 38 добавлять что-то бесполезно, в условие скетч не вошел ни разу, хотя, судя по вот этому коду:
и вот этому выхлопу:
крайне низкий, но не нулевой шанс на это существует))
UPD Задача выполнена, хоть и через задницу:
В терминале снова полная дичь, но номер найден:
UPD 2, пораскинул мозгами и родил конструкцию
теперь строка в тесминале все не просто выглядит благопристойной, а таковой и является:
ЕвгенийП, еще раз спасибо за подсказку!
Не за что.