принимаем из компорта в ардуино и парсим, какие есть варианты?

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015
while (gsm.available())
    { //сохраняем входную строку в переменную val
   ch = gsm.read();
      val += char(ch);
      delay(20);
  }

последнее время меня этот вариант не устраивает, вероятно делей тому проблема.

что можно использовать взамен, более надежное в работе?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

парсинг построчно :)

String readsmsstr() {
  String content = "";
  boolean returnstr = false;
  char smschar;
  while (gprs.available() && returnstr == false) {
    smschar = gprs.read();
    if (smschar == '\n') {
      returnstr = true;
    }
    else {
      content.concat(smschar); //складываем символы в строку
    }
  }
  return content;
}

 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

ой, можно  приписать подсказки по строкам? спасибо.

какие еще варианты подскажут? можно в ветке собирать примеры, желательно с подробным описанием что и как делается, чтобы многие понимали и учились. спасибо.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

работа со строками, по подсказкам, serial print поможет

  if (gprs.available()) {
    smsstr = readsmsstr();
    Serial.println(smsstr);
    smsstr.trim();
    if (smsstr.startsWith("+CMT")) {
      smsstr = readsmsstr();
      smsstr.trim();
      Serial.println(smsstr);
     }
   }

 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

хорошо, спрошу еще как обьявлять smsstr  и readsmsstr ?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

readsmsstr это функция, которую я дал в первом своем посте

а smsstr так - String smsstr;

и еще инклюд надо добавить

#include <String.h>

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

пробую в код поставить

'readsmsstr' was not declared in this scope

хотя указал:

String smsstr;
#include <String.h>

софтсериал или иная библиотека?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

в двух соснах заблудились ?

#include <SoftwareSerial.h>
#include <String.h>

String smsstr;
SoftwareSerial gprs(7, 8);

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
gprs.begin(19200);
}

void loop() {
  // put your main code here, to run repeatedly:
if (gprs.available()) {
  smsstr = readsmsstr();
  Serial.println(smsstr);
  smsstr.trim();
  if (smsstr.startsWith("+CMT")) {
    smsstr = readsmsstr();
    smsstr.trim();
    Serial.println(smsstr);
   }
 }
}

String readsmsstr() {
  String content = "";
  boolean returnstr = false;
  char smschar;
  while (gprs.available() && returnstr == false) {
    smschar = gprs.read();
    if (smschar == '\n') {
      returnstr = true;
    }
    else {
      content.concat(smschar); //складываем символы в строку
    }
  }
  return content;
}