Найти нужное значение в Serial port и выполнить с ним действие
- Войдите на сайт для отправки комментариев
Пт, 03/04/2020 - 21:59
Всем привет, задача такая:
Имеется SIM800l , хочу отправить на него команду, чтобы он ответил с уровнем сигнала сети
gsm.SimpleWriteln("AT+CSQ"); но как правильно это реализовать? точнее в порт вываливается информация со значением, такого формата: +CSQ: 23,0. Мне нужно забрать значение 23 и дальше его сравниваться. Никак не пойму как его поймать в порте. Что почитать или может пример есть у кого, все это хочу прикрутить к коду (код не ругайте,только учусь)
#include "SIM900.h" #include <SoftwareSerial.h> #include <EEPROM.h> #include "sms.h" #include "call.h" SMSGSM sms; CallGSM call; //=================Пины 2 и 3 для Подключения GSM модуля int flag1=0; int flag_dvig=0; boolean started=false; char smsbuffer[160]; char n[20]; String n1 = "+7хххххххх"; String input_string = ""; String smsContent = ""; char PowerON[] = "Signalka vkluchena!"; char PowerOFF[] = "Snyato s ohrani"; char v[] ="Ya v seti"; char koncevik1[] ="Otkrita dver #1"; char koncevik2[] ="Otkrita dver #2"; char dvigenie[] ="dvigenie v komnate"; char CameraON[] = "Camera ON"; char CameraOFF[] = "Camera OFF"; char SirenaON[] = "SirenaON"; char SirenaOFF[] = "SirenaOFF"; char ok[] ="Vse OK)!"; char pos; char sendsms[160]; //Таймер сброса от зависания unsigned long rst_time = (long)60*60*1000; //раз в час сброс unsigned long rst_timer; //Таймер сброса от зависания unsigned long cam_time = (long)120*1000; //раз в час сброс unsigned long cam_timer; //подключаем заголовочный файл библиотеки EEPROM uint8_t counter; //Здесь будем хранить счетчик,uint8_t - тип данных, занимающий 1 байт,и хранящий значение от 0 до 255 void setup() { //Установки для счетчика counter = EEPROM.read(0);//Читаем счетчик из EEPROM: counter++; // увеличиваем его на единицу EEPROM.write(0, counter);//Записываем значение счетчика // "сбросить" таймер Ресет+Сеть rst_timer = millis(); cam_timer = millis(); //Пин вход pinMode(4, INPUT); // Концевик №1 pinMode(5, INPUT); // Концевик №2 pinMode(6, INPUT); // Датчик движения //Пин выход pinMode(7, OUTPUT); // Камера pinMode(8, OUTPUT); // Сирена pinMode(11, OUTPUT); // RST Sim800l //Выкл пины digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(11, LOW); digitalWrite(12, HIGH); delay(2000); // Ждем 2с pinMode(12, OUTPUT); // rst Arduino digitalWrite(11, HIGH); Serial.begin(9600); //Выводим счетчик в порт: Serial.print("It's reset #"); Serial.println(counter, DEC); delay(1000); // Ждем 2с if (gsm.begin(4800)) { Serial.println("\nstatus=READY"); started=true; n1.toCharArray(n,20); Serial.print("220v ON"); sms.DeleteSMS(1);memset(n,0,20); char smsbuffer[160]=""; } else Serial.println("\nstatus=IDLE"); } void loop() { // Таймер камеры if (flag1==1 || flag1==3){ if (millis() - cam_timer >= cam_time) { Serial.print("CameraOFF"); digitalWrite(7, LOW); //выключаем sim800l delay(1000); // Ждем 1 секунд flag1++; cam_timer = millis(); } } // Раз в день перезагрузка модема if (millis() - rst_timer >= rst_time) { Serial.print("RST"); digitalWrite(12, LOW); //выключаем sim800l delay(1000); // Ждем 1 секунд rst_timer = millis(); } // Раз в неделю отпраляем смс, что все ок if (counter>5 && digitalRead(4)==LOW && digitalRead(5)==LOW && digitalRead(6)==LOW) { n1.toCharArray(n,20); sms.SendSMS(n, ok); //смс ОК Serial.print("vse OK"); sms.DeleteSMS(1);memset(n,0,20); char smsbuffer[160]=""; delay(1000*5); // Ждем 5 секунд counter=0; EEPROM.write(0, counter); } //Открытие двери №1 if ((digitalRead(6)==HIGH) && (flag1==0 || flag1==2)){ //Если открыта первая дверь и переменная равна нулю digitalWrite(7, HIGH); //Включаем камеру n1.toCharArray(n,20); sms.SendSMS(n, koncevik1); //Отправляем смс, что открыта первая дверь Serial.print("koncevik1"); sms.DeleteSMS(1);memset(n,0,20); char smsbuffer[160]=""; delay(1000); // Ждем 1с flag1++; flag_dvig=1; } //Открытие двери №2 if ((digitalRead(5)==HIGH) && (flag1==0 || flag1==2)){ //Если открыта вторая дверь после первой или кто-то отрыл дверь войдя в окно digitalWrite(7, HIGH); //Включаем камеру n1.toCharArray(n,20); sms.SendSMS(n, koncevik2); // Отправляем смс, что открыта вторая дверь Serial.print("koncevik2"); sms.DeleteSMS(1);memset(n,0,20); char smsbuffer[160]=""; delay(1000); // Ждем 120 секунд flag1++; flag_dvig=1; } //Срабатывание датчика движения if (digitalRead(4)==HIGH && flag_dvig==1) { //Если открыт одан из дверей n1.toCharArray(n,20); sms.SendSMS(n, dvigenie); // Посылаем СМС о том, что движение в комнате Serial.print("dvigenie"); sms.DeleteSMS(1);memset(n,0,20); delay(1000); // Ждем 1 с flag_dvig=2; } pos = sms.IsSMSPresent(SMS_UNREAD); // смотрим непрочитанные СМС if (pos) { // Если непрочитанные СМС есть, то... getsms(); // получаем непрочитанную СМС // Команда "0" - снять с охраны if (input_string=="0"){ flag1=4; Serial.print("Snyato s ohrani!"); n1.toCharArray(n,20); sms.SendSMS(n, PowerOFF); sms.DeleteSMS(1);memset(n,0,20); input_string=""; char smsbuffer[160]=""; } // Команда "1" - Поставить на охрану if (input_string=="1"){ flag1=0; Serial.print("Postanovka na ohranu!"); n1.toCharArray(n,20); sms.SendSMS(n, PowerON); sms.DeleteSMS(1); memset(n,0,20); input_string=""; char smsbuffer[160]=""; } // Команда "2" - вкл камеру на 2 минуты if (input_string=="2"){ flag1=1; digitalWrite(7, HIGH); //Включаем камеру Serial.print("camera on"); n1.toCharArray(n,20); sms.SendSMS(n, CameraON); delay(1000); // Ждем 1c sms.DeleteSMS(1); memset(n,0,20); input_string=""; char smsbuffer[160]=""; } // Команда "3" - вкл сирену на 2 минуты if (input_string=="3"){ digitalWrite(8, HIGH); //Включаем Сирену Serial.print("Sirena on"); n1.toCharArray(n,20); sms.SendSMS(n, SirenaON); delay(1000*30); // Ждем 30 секунд digitalWrite(8, LOW); //Выключаем камеру sms.SendSMS(n, SirenaOFF); sms.DeleteSMS(1); memset(n,0,20); input_string=""; char smsbuffer[160]=""; } // Команда "4" - Звонок if (input_string=="4"){ if(call.CallStatus()!=CALL_ACTIVE_VOICE);{ Serial.print("звонок"); call.Call(n); } } sms.DeleteSMS(pos); // удаляем СМС из симки } delay(1000); // Ждем 1 секунд } void getsms() { sms.GetSMS(1,n,20,smsbuffer,160); input_string =String(smsbuffer); }
В строке 226 ошибка - лишняя точка с запятой.