SIM 900 и лишнее в отправленных смс
- Войдите на сайт для отправки комментариев
доброго времени суток всем. собираю систему умного дома, попутно учусь и изучаю ардуино и программирование. конечно же мой скетч собран из готовых примеров с интернета. теорию читал, не раз, читал данный форум, но мне проще разбираться на примере и на своих ошибках. поэтому медленно и верно мучаю то что имеется и постепенно увеличиваю задачи. скетч конечно далек от идеала. проблема в следующем:
1. при запросе параметров через смс в ответ прилетает смс с параметрами, все хорошо, как и должно быть, но первые две строки в смс это АТ команда модулю SIM 900 "AT + CMGS = \"+79ххххххххх\"
2. при запросе баланса прилетает в ответ смс где только АТ команда "ATD*102#"
ранее при тестировании SIM900 на отправку смс наблюдалась такая картина:
сначала вообще смс не отправлялись, увеличил задерки между посылками АТ команд до 300мс при настройке модуля и до 200мс при командах отправки. смс стали приходить. но так же прилетали АТ команды в смс
увеличил задержки до 500 мс и 300 мс соотв. смс стали приходить как надо
одна мысль- в сериал порту остается команда в буфере, и потом считывается при отправке смс..
модуль Sim 900 и ардуино мега 2650 артемовские
///////////////////////Программа "умного дома" на основе MEGA2650//////////////////////// //Дисплей #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей //датчики температуры #include <OneWire.h>// библиотека для DS18B20 #include <DallasTemperature.h>// библиотека для DS18B20 #define ONE_WIRE_BUS 7 // датчики DS18B20 на 7 пин OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); // Везде где встречается ds - это работа с датчиками Dallas DS18B20 DeviceAddress ZalC = { 0x10, 0xC2, 0x8C, 0x30, 0x03, 0x08, 0x00, 0x3A }; // Сетевой адрес датчика DS18B20 в доме DeviceAddress UlicaC = { 0x28, 0xFF, 0x35, 0x2C, 0xA0, 0x16, 0x05, 0xF3 }; // Сетевой адрес датчика DS18B20 на улице DeviceAddress podacha = { 0x10, 0xA9, 0x10, 0x31, 0x03, 0x08, 0x00, 0x18 }; // Сетевой адрес датчика DS18B20 температура тосола в подаче DeviceAddress obratka = { 0x10, 0x81, 0x8A, 0x30, 0x03, 0x08, 0x00, 0x8A }; // Сетевой адрес датчика DS18B20 температура тосола в обратке float tempC; // для работы с DS18B20 float TempZalC = 15; // Переменная. Измеренная температура в зале (По умолчанию 15гр.С) float TempUlicaC = 15; // Переменная. Измеренная температура на улице (По умолчанию 15гр.С) float Temppodacha = 15; // Переменная. Измеренная температура на кухне (По умолчанию 15гр.С) float Tempobratka = 15; // Переменная. Измеренная температура в подполе (По умолчанию 15гр.С) //датчик атмосферного давления #include <iarduino_Pressure_BMP.h> iarduino_Pressure_BMP sensor; float AD=0; //датчик уровня воды int VodaPin = A0; int VodaValue = 0; //промежуточная переменная int Voda = 0; //переменная в литрах //датчики удара boolean ydarsperedi=false; boolean ydarszadi=false; //_______Все для цикла void otoplenie()______________________________________________________ int tempDust = 24; // Уставка желаемой температуры в доме (По умолчанию 23гр.С) int tempDECOust = 12; // Уставка температуры в доме в режиме "Экономия"(По умолчанию 13гр.С) boolean SMSVoltOFF=false; // Флаг "Отправлена СМС об отключении питания 220в" boolean SMSVoltON=false; // Флаг "Отправлена СМС о восстановлении питания 220в" boolean SMSDelete=false; // Флаг "Удалены все СМС на SIM900" boolean TimeSMSzapros=false; // Флаг "Отправлена СМС о состоянии дома по таймеру" boolean SMSVoltIBP=false; // Флаг "Отправлена СМС о низком заряде аккумулятора" boolean EcoTempDust=false; // Флаг "Экономия отопления" boolean SMSAlarmTemp=false; // Флаг "Отправлена СМС о критической температуре" #include <DHT.h> #define DHTPIN 6 //Датчик DTH11 на pin6 #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); float Vlaga=0; // Значение влажности в цикле ventilyaciya() //_______Все для цикла void voltmetr() float vout = 0.0; // Напряжение на входе аналового входа float Vpit = 0.0; // Измеряемое напряжение на выходе ИБП int volt = 0; // Напряжение на входе АЦП int statushome=0; // переменная статуса включения умного дома 1 - включен, 0 -выключен int statusotp=0; // статус отопления дома 0 - откл , 1- вкл , 2- экономия int statusAlarm=0; // Переменная "Наличие тревоги" int signaliz=0; // Переменная "Режим работы охр.сигнализации" - 0 - откл , 1- вкл , 2- постановка на охрану, 3-в тревоге int AlarmTemp=0; // Переменная "Наличие тревоги по критической температуре" long previousMillis = 0; // храним время последнего замера влажности для цикла izmereniya() long interval = 120000; // интервал между замерами параметров для цикла izmereniya() 2 минуты //_______Для работы терминала по Sim900______________________________ #include <GPRS_Shield_Arduino.h>// библиотека для работы с GPRS устройством GPRS gprs(Serial1);// создаём объект класса GPRS и передаём в него объект Serial1 void setup() { pinMode(53, OUTPUT); // Управление отоплением digitalWrite(53,HIGH); pinMode(13, OUTPUT); // Лампа УД включен digitalWrite(13,LOW); pinMode(52, INPUT);// датчик удара сзади pinMode(50, INPUT);//датчик удара спереди digitalWrite(52,LOW); digitalWrite(50,LOW); Serial.begin(9600);// открываем последовательный порт для мониторинга действий в программе Serial1.begin(9600);// открываем Serial-соединение с GPRS Shield gprs.powerOn();// включаем GPRS шилд while (!gprs.init()) // проверяем есть ли связь с GPRS устройством { // если связи нет, ждём 1 секунду и выводим сообщение об ошибке // процесс повторяется в цикле пока не появится ответ от GPRS устройства delay(3000); Serial.print("GPRS Init error\r\n"); } Serial.println("GPRS init success"); // вывод об удачной инициализации GPRS Shield NastroykaGSM(); dht.begin(); // Замер влажности с DHT11 sensors.begin(); // Замер температуры с DS18B20 sensors.setResolution(ZalC, 10); sensors.setResolution(UlicaC, 10); sensors.setResolution(podacha, 10); sensors.setResolution(obratka, 10); sensor.begin(); // Замер атмосферного давления с ВМР 280 delay(2000); lcd.init(); lcd.backlight();// Включаем подсветку дисплея lcd.print("YD"); lcd.setCursor(0, 1); lcd.print("Privetstvyet"); } void loop() { readsms(); izmereniya(); zapros(); // alarms(); if (statushome==1){digitalWrite(13,HIGH);} else {digitalWrite(13, LOW);} // Лампа "Умный дом включен" if (statusotp==1) {otoplenie();} else {digitalWrite(53, HIGH);} // Управление работой газового котла 1 - вкл., 0 - откл. // if (!signaliz==0){signalizSMS();} // Работа сигнализации сигнализации при режимах 1,2,3 } void readsms() { if(Serial1.available()) //если модуль что-то послал { char ch = ' '; String val = ""; while(Serial1.available()) { ch = Serial1.read(); val += char(ch); //собираем принятые символы в строку delay(3); } Serial.print("Sim send> "); Serial.println(val); if(val.indexOf("+CMT") > -1) //если есть входящее sms { if(val.indexOf("On") > -1) { startOneSMS(); Serial1.println("SISTEMA UMNIY DOM-ON"); EndSMS(); homeON(); Serial.println("SISTEMA UMNIY DOM-ON");} //включение УД if(val.indexOf("Off") > -1){ startOneSMS(); Serial1.println("SISTEMA UMNIY DOM-OFF"); EndSMS(); homeOFF(); Serial.println("SISTEMA UMNIY DOM-OFF");} //выключение УД if(val.indexOf("OTOPLENIE-ON") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-ON"); Serial1.print(TempZalC); EndSMS(); statusotp=1; Serial.println("OTOPLENIE-ON");} //включение отопления if(val.indexOf("OTOPLENIE-OFF") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-OFF"); EndSMS(); statusotp=0; Serial.println("OTOPLENIE-OFF");} //включение отопления if(val.indexOf("OTOPLENIE-ECO") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-ECO"); EndSMS(); statusotp=2; Serial.println("OTOPLENIE-ECO");} //включение отопления if(val.indexOf("Zapros") > -1) { startOneSMS(); SMSzapros(); EndSMS();} //запрос параметров if(val.indexOf("Balans") > -1) { startOneSMS(); SMSbalance(); EndSMS();} //запрос баланса } } } void izmereniya() // Замер температур с датчиков DS18B20 и влажности с датчика DHT11 { unsigned long currentMillis = millis(); delay(100); // Необязательная задержка Vlaga = dht.readHumidity(); // Уровень влажности % с DHT11 sensors.requestTemperatures(); // Замеры температур с DS18B20 delay(750); // Необязательная задержка TempZalC = sensors.getTempC(ZalC); // Считываем температуру в зале delay(100); TempUlicaC = sensors.getTempC(UlicaC); // Считываем температуру на улице delay(100); Temppodacha = sensors.getTempC(podacha); // Считываем температуру в подаче delay(100); Tempobratka = sensors.getTempC(obratka); // Считываем температуру в обратке delay(100); VodaValue = analogRead(VodaPin);//считываем показания с пина датчика уровня воды if (VodaValue<=12){Voda=10;} if (VodaValue>12&&VodaValue<=20){Voda=15;} if (VodaValue>20&&VodaValue<=32){Voda=20;} if (VodaValue>32&&VodaValue<=40){Voda=25;} if (VodaValue>40&&VodaValue<=47){Voda=35;} if (VodaValue>47&&VodaValue<=53){Voda=43;} if (VodaValue>53&&VodaValue<=60){Voda=50;} if (VodaValue>60&&VodaValue<=67){Voda=58;} if (VodaValue>67&&VodaValue<=76){Voda=68;} if (VodaValue>76&&VodaValue<=85){Voda=75;} if (VodaValue>85&&VodaValue<100){Voda=85;} if(TempZalC== -127 || TempUlicaC== -127 || Temppodacha== -127 || Tempobratka== -127) // Перезапрос при ошибке датчика { sensors.requestTemperatures(); delay(750); // TempZalC = sensors.getTempC(ZalC); // Считываем температуру в зале delay(100); TempUlicaC = sensors.getTempC(UlicaC); // Считываем температуру на улице delay(100); Temppodacha = sensors.getTempC(podacha); // Считываем температуру в подаче delay(100); Tempobratka = sensors.getTempC(obratka); // Считываем температуру в обратке delay(100); if(sensor.read(1)){AD=sensor.pressure;}// считываем показатель атмосферного давления else {Serial.println("нет ответа от сенсора давления");} delay(3000); lcd.clear(); lcd.print("Vlaga:"); lcd.setCursor(6, 0); lcd.print(Vlaga); lcd.print("%");//вывод уровня влажности на дисплей lcd.setCursor(0, 1); lcd.print("Zal:"); lcd.setCursor(6, 1); lcd.print(TempZalC) ;lcd.print("*C");//вывод температуры спереди на дисплей delay(3000); lcd.clear(); lcd.print("Podacha:"); lcd.setCursor(8, 0); lcd.print(Temppodacha) ;lcd.print("*C");//вывод температуры подачи антифриза на дисплей lcd.setCursor(0, 1); lcd.print("Obratka:"); lcd.setCursor(8, 1); lcd.print(Tempobratka) ;lcd.print("*C");//вывод температуры обратки антифриза на дисплей delay(3000); lcd.clear(); lcd.print("Atm P:"); lcd.setCursor(8, 0); lcd.print(AD) ;lcd.print("mm.Hg");//вывод атмосферного давления на дисплей lcd.setCursor(0, 1); lcd.print("Voda:"); lcd.setCursor(8, 1); lcd.print(Voda) ;lcd.print("L");//вывод уровня воды в баке на дисплей } voltmetr(); // Считываем напряжения на выходе ИБП (норма 13,5в) previousMillis = currentMillis; // Сброс таймера } void voltmetr() //____________Цикл "Вольтметр"__измерение напряжения на выходе ИБП // Взято с http://digitrode.ru/computing-devices/mcu_cpu/87-voltmetr-na-arduino.html { volt = analogRead(A1); // А0 аналоговый вход вольтметра vout = (volt * 5.0) / 1024.0; Vpit = vout / (10000.0/(100000.0+10000.0)); // По формуле Vpit = vout / (R2/(R1+R2)) if (Vpit<0.09) { Vpit=0.0;} // Округление до нуля } void alarms() //______________Цикл "тревожные сигналы"____// http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no... { } //else if (Vpit<=12.0 && SMSVoltIBP==false) { startOneSMS(); Serial2.println("Alarm! Min zaryad akkumulyatora IBP!"); EndSMS(); SMSVoltIBP=true;} // Низкий заряд аккумулятора //else if (Vpit>=14.0 && SMSVoltIBP==false) { startOneSMS(); Serial2.println("Alarm! Max zaryad akkumulyatora IBP!"); EndSMS(); SMSVoltIBP=true;} // Перезаряд аккумулятора // else {statusAlarm=0; AlarmTemp=0;} //} void SMSbalance() { Serial1.println("ATD*102#"); delay(2000); } void homeON() //Цикл включения умного дома { statushome=1; // статус умного дома 0 - откл , 1- вкл Serial.print("HOME vkl"); } void homeOFF() //Цикл выключения умного дома { statushome=0; // статус питания дома 0 - откл , 1- вкл Serial.print("HOME vikl"); } void otoplenie() // Цикл управления электро котлом (Сигнал инвертированный!(Особенность подключения к котлу)) { if ( statusotp==0) // Отключено { digitalWrite(53,HIGH); Serial.print("Otoplenie vikl");} // Отключить отопление if ( statusotp==1) // Климат-контроль { if ( TempZalC > (tempDust)){digitalWrite(53,HIGH); Serial.print("Otoplenie vikl");} // Отключить отопление если температура больше желаемой if (TempZalC < tempDust) {digitalWrite(53,LOW); Serial.print("Otoplenie vkl");} // Включить отопление если температура меньше желаемой } if ( statusotp==2) // Экономия { if ( TempZalC > (tempDECOust)){digitalWrite(53,HIGH); Serial.print("OtoplenieEco vikl");} // Отключить отопление если температура больше желаемой на 1грС if (TempZalC < tempDECOust) {digitalWrite(53,LOW); Serial.print("OtoplenieEco vkl");} // Включить отопление если температура меньше желаемой } } void zapros() //Передача всех параметров в терминал { Serial.print("SmartHOME = "); if (statushome==1){Serial.println("ON");} if (statushome==0){Serial.println("OFF");} Serial.print("Klimat kontrol= "); if (statusotp==1){Serial.print("ON: "); Serial.print("Ustavka: "); Serial.print(tempDust); Serial.println("*C");} if (statusotp==0){Serial.println("OFF");} if (statusotp==2){Serial.println("ECONOMIA");} Serial.println("Parametry:"); // int chk = dht.read(DHT11PIN); // switch (chk) // { // case DHTLIB_OK: break; // Serial1.println("DHT-OK"); // case DHTLIB_ERROR_CHECKSUM: Serial1.println("DHT Checksum error"); break; // case DHTLIB_ERROR_TIMEOUT: Serial1.println("DHT Time out error"); break; // default: Serial1.println("DHT Unknown error"); break; // } Serial.print("Voda="); Serial.print(Voda);Serial.println("L"); Serial.print("P="); Serial.print(AD); Serial.println(" mm.Hg"); Serial.print("Vlaga: "); Serial.print(Vlaga); Serial.println(" %"); Serial.print("Zal: "); Serial.print(TempZalC); Serial.println(" *C"); Serial.print("Ulica:"); Serial.print(TempUlicaC); Serial.println(" *C"); Serial.print("Podacha:"); Serial.print(Temppodacha); Serial.println(" *C"); Serial.print("Obratka:"); Serial.print(Tempobratka); Serial.println(" *C"); // Serial.print("IBP:+"); Serial.print(Vpit); Serial.println(" V"); // if (Vpit<=12.0) { Serial.println("Alarm! Min zaryad akkumulyatora IBP!"); } // if (Vpit>=14.0) { Serial.println("Alarm! Max zaryad akkumulyatora IBP!"); } // Serial.print("SMS:"); Serial.println(SMSschet); // Serial.print("DS18B20 ERROR:");// Serial.println(dsshet); } void SMSzapros() { startOneSMS(); Serial1.print("HOME="); if (statushome==1){Serial1.println("ON");} if (statushome==0){Serial1.println("OFF");} // Serial1.print("Ohrana:"); // if (signaliz==2){Serial1.println("START");} // if (signaliz==1){Serial1.println("ON");} // if (signaliz==0){Serial1.println("OFF");} // if (AlarmTemp==1) { Serial1.println("Temperatura!"); } Serial1.print("KLIMAT="); if (statusotp==1){Serial1.print("ON:"); Serial1.print(tempDust); Serial1.println("*C");} if (statusotp==0){Serial1.println("OFF");} if (statusotp==2){Serial1.println("ECO");} Serial1.print("Voda="); Serial1.print(Voda);Serial1.println("L"); Serial1.print("P="); Serial1.print(AD); Serial1.println(" mm.Hg"); Serial1.print("Vlaga: "); Serial1.print(Vlaga); Serial1.println(" %"); Serial1.print("Zal: "); Serial1.print(TempZalC); Serial1.println(" *C"); // Serial1.print("Ulica:"); Serial1.print(TempUlicaC); Serial1.println(" *C"); Serial1.print("Podacha:"); Serial1.print(Temppodacha); Serial1.println(" *C"); Serial1.print("Obratka:"); Serial1.print(Tempobratka); Serial1.println(" *C"); // Serial1.print("IBP:+"); Serial1.print(Vpit); Serial1.println(" V"); EndSMS(); } void NastroykaGSM() { Serial1.print("AT+CMGF=1\r"); //устанавливает текстовый режим смс-сообщения Serial.println("text:"); delay(500); Serial1.print("AT+IFC=1, 1\r"); //устанавливает программный контроль потоком передачи данных delay(500); Serial1.print("AT+CPBS=\"SM\"\r"); //открывает доступ к данным телефонной книги SIM-карты delay(500); // Serial1.print("AT+GSMBUSY=1, 1\r"); //запрет всех входящих звонков // delay(500); Serial1.print("AT+CMGDA=\"DEL ALL\"\r"); //Очищаем накопившиеся СМС delay(500); Serial.println("SMS to terminal:"); Serial1.print("AT+CNMI=1,2,2,1,0\r"); //включает оповещение о новых сообщениях delay(500); } void startOneSMS() //__________________Цикл подготовки модуля к отправке СМС-сообщений по первому номеру { delay(300); Serial1.print("AT+CMGF=1\r"); delay(300); Serial1.println("AT + CMGS = \"+79ххххххххх\""); delay(300); } void EndSMS() //__________________Цикл окончания и отправки СМС-сообщения_______________________ { delay(300); Serial1.println((char)26); // Команда отправки СМС delay(5000); }забыл добавить. при остальных командах по смс, кроме запроса параметров и запроса баланса ответное смс приходит как надо
2. при запросе баланса прилетает в ответ смс где только АТ команда "ATD*102#"
А что вы хотели, вы же вместо того, чтобы отправить запрос баланса оператору, потом принять ответ, распарсить его и вытащить собственно сумму - вы вместо всего этого просто пихаете команду баланса в СМС - она и приходит.
сначала вообще смс не отправлялись, увеличил задерки между посылками АТ команд до 300мс при настройке модуля и до 200мс при командах отправки. смс стали приходить. но так же прилетали АТ команды в смс
потому что код уродский. Типичный "умный дом на СМС" из инета. По уму после каждой команды модему вы должны дождаться ответа, проверить, что это "ОК", и только потом отсылать следующую команду. И задержки ответа модема могут быть как 100мс, так и пять секунд.
распарсить-да, но для меня это пока сложновато
в ходе множественных исканий был как то код, там насколько помню баланс был заюзан аналогично, работало, но утверждать не буду, уже и не помню, если честно
согласен, код уродский и типичный из инета..
с ОК как то пытался, не пошло что то. знаю, да. ждать можно долго и не всегда одинаково занимает время ответа
стратегия у меня такая- для начала лишь бы чтоб работало, ( времени сделать все сразу хорошо нет, система постоянно используется) а потом доработка и прочее
в ходе множественных исканий был как то код, там насколько помню баланс был заюзан аналогично, работало, но утверждать не буду, уже и не помню, если честно
Баланс так работать точно не будет.
Вот еще, нашел, почему у вас приходит AT + CMGS = \"+79ххххххххх\" в запросе. Вы дважды вызываете функцию StartOneSMS() - сначала до процедуры Zapros. а потом в самой процедуре...
Вот еще, нашел, почему у вас приходит AT + CMGS = \"+79ххххххххх\" в запросе. Вы дважды вызываете функцию StartOneSMS() - сначала до процедуры Zapros. а потом в самой процедуре...
черт, точно ж.. невнимательность всего лишь..спасибо за помощь
по запросу баланса буду еще читать
про баланс. строка 149. Вы распознаете команду "Balance". Далее начинаете отсылать сразу смс, потом делаете запрос баланса.
А надо сначала сделать запрос баланса, и потом, когда смс с балансом придёт на GSM модуль, уже отправлять его пользователю.
Т.е. строка 149 далжна выглядеть так
if(val.indexOf("Balans") > -1) { SMSbalance(); }и далее вставляете рядом, где у вас парсятся все команды, распознавание, что прилетело смс с балансом
иногда оно начинается не +CMT, а с +USD тогда будет так
if(val.indexOf("+CMT") > -1) //если есть входящее sms { if(val.indexOf("On") > -1) { startOneSMS(); Serial1.println("SISTEMA UMNIY DOM-ON"); EndSMS(); homeON(); Serial.println("SISTEMA UMNIY DOM-ON");} //включение УД if(val.indexOf("Off") > -1){ startOneSMS(); Serial1.println("SISTEMA UMNIY DOM-OFF"); EndSMS(); homeOFF(); Serial.println("SISTEMA UMNIY DOM-OFF");} //выключение УД if(val.indexOf("OTOPLENIE-ON") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-ON"); Serial1.print(TempZalC); EndSMS(); statusotp=1; Serial.println("OTOPLENIE-ON");} //включение отопления if(val.indexOf("OTOPLENIE-OFF") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-OFF"); EndSMS(); statusotp=0; Serial.println("OTOPLENIE-OFF");} //включение отопления if(val.indexOf("OTOPLENIE-ECO") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-ECO"); EndSMS(); statusotp=2; Serial.println("OTOPLENIE-ECO");} //включение отопления if(val.indexOf("Zapros") > -1) { startOneSMS(); SMSzapros(); EndSMS();} //запрос параметров if(val.indexOf("Balans") > -1) { SMSbalance(); } //запрос баланса } else if (val.indexOf("+USD") > -1) {startOneSMS(); Serial1.println (val); EndSMS();}А команду запроса баланса лучше писать не так как у вас
Serial1.println("ATD*102#");а вот так
Serial1.println("ATD#102#");. Потому как в вашем варианте, возможно, смс с балансом будет приходить на кириллице, и оно будет не читаемо для вашего скетча.А команду запроса баланса лучше писать не так как у вас
Serial1.println("ATD*102#");а вот так
Serial1.println("ATD#102#");. Потому как в вашем варианте, возможно, смс с балансом будет приходить на кириллице, и оно будет не читаемо для вашего скетча.спасибо за помощь, вроде разобрался, заработало
только в моем случае смс с балансом начинается не +USD, а с +СUSD
и в ответном смс кроме баланса опять команда
есть еще такая особенность:
сейчас все датчики работают исправно и дают адекватные показания
но стоит в 15 строку вставить адрес другого датчика температуры 0x10, 0x57, 0x39, 0xBE, 0x02, 0x08, 0x00, 0x9A
то пропадают показания барометра, при чем данные с этого датчика температуры адекватные..
барометр BMP280
и в ответном смс кроме баланса опять команда
код покажите. скорее всего нужно убрать задержку 2 сек после команды запроса баланса
т.е. убираем совсем функцию SMSbalance() и строку запроса делаем в виде
if(val.indexOf("Balans") > -1) { Serial1.println ("ATD#102#"); }Пока идёт эта задержка 2 сек. Модуль успевает ответить на команду эхом
ATD#102#
и в ответном смс кроме баланса опять команда
код покажите. скорее всего нужно убрать задержку 2 сек после команды запроса баланса
т.е. убираем совсем функцию SMSbalance() и строку запроса делаем в виде
if(val.indexOf("Balans") > -1) { Serial1.println ("ATD#102#"); }Пока идёт эта задержка 2 сек. Модуль успевает ответить на команду эхом
ATD#102#
сделал вот так