SerialreadBytes()+GSM модем не работает.
- Войдите на сайт для отправки комментариев
Пнд, 21/12/2015 - 16:06
Помогите, пожалуйста, начинающему Ардуинщику.
#include <SoftwareSerial.h>
SoftwareSerial modem (6,8);
char inNumber[11];
char message[99];
String inputString = "";
boolean stringComplete = false;
void State(String aT)
{
modem.print(aT);
modem.print("\r");
modem.println("\n");
delay(500);
while (modem.available())
{
char inChar = (char)modem.read();
inputString += inChar;
if (inChar == '\n')
{
stringComplete = true;
}
}
}
void ReadMessage (String aT)
{
modem.print(aT);
modem.print("\r");
modem.println("\n");
delay(500);
while (modem.available())
{
modem.readBytes(message, 99);
delay(500);
for (int i=0; i<100; i++)
{
if (i != 99) Serial.print(message[i]);
else Serial.println(message[i]);
}
Serial.println(message[90]);
for (int i=0, k=22; i<12; i++, k++)
{
inNumber[i] = message[k];
if (i != 11) Serial.print(inNumber[i]);
else Serial.println(inNumber[i]);
}
delay(500);
for(int i=0; i<151; i++)
{
if (i < 11) inNumber[i] = 0;
message[i] = 0;
}
}
}
void Event()
{
State("AT");
if (stringComplete)
{
if (inputString == "\r\nOK\r\n")
{
Serial.println(inputString);
inputString = "";
stringComplete = false;
ReadMessage ("AT+CMGR=1");
}
inputString = "";
stringComplete = false;
}
}
void setup()
{
modem.begin(9600);
modem.setTimeout(2000);
Serial.begin(9600);
inputString.reserve(200);
}
void loop()
{
Event();
}
Ахренеть!
И в чём же начинающий ардуинщик нуждается в помощи?
Мне надо прочитать скетч, догадаться, что автор хотел сделать, потом понять что и почему не получилось и найти решение?
А не жирно?
Может потрудитесь объяснить Вашу проблему?
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
1. Найдите файл SoftwareSerial.h
2. Найдите в нём строку #define _SS_MAX_RX_BUFF 64 // RX buffer size
в другой ситуации (без софтсериала) мне помогала небольшая пауза в чтении ответа модуля. в причину даже не вникал.
Arans, спасибо, попробую...Я потом понял, что только 64 байта максимум. Поищу строку.
в другой ситуации (без софтсериала) мне помогала небольшая пауза в чтении ответа модуля. в причину даже не вникал.
Плюсую, та же история была на Меге при чтении SMS через Hard Serial, поиграл паузами и стабильно заработало. Ну и размер буфера увеличивал опять же.
Araris, спасибо, увеличил буфер, все полетело!
Еще вопрос, почему Loop выполняется только один раз?
Вот код:
void Event() { while (1) { State("AT"); if (stringComplete) { if (inputString == "OK\r\n") { Serial.println(inputString); inputString = ""; stringComplete = false; ReadMessage ("AT+CMGR=1"); } inputString = ""; stringComplete = false; } } } void setup() { modem.begin(9600); modem.setTimeout(2000); Serial.begin(9600); inputString.reserve(50); } void loop() { Event(); }Потому что в строке 3 объявлен бесконечный цикл, из которого нет выхода и, соответственно, возврата из Event() в loop().
Уже разобрался, связано было с тем, что не было задержки и Ат комманда воспринималась еще как вычитка из модема.