Опять про Serial порт и GSM шилд

Nosferatu13666
Offline
Зарегистрирован: 31.05.2013

Доброго времени суток. Извеняюсь, если гдето были похожие темы, но ответа я так и не нашел. Если кто знает, пожалуйста подскажите.

Есть Arduino Uno и GSM шилд.

Суть проблемы:на AT-команды приходят ответы 64+ символов. Размер буфера Serial 64 байта (читал на официальном сайте). Т.е. 64 байта ардуино принимает, остальные - как придется.

Перепробовал кучу вариантов, и задержки, и таймауты, но, через сериал монитор получалось считывать длинные строки, с модемом - нет.

Пока что просто увеличил размер SoftwareSerial буфера. Все работает нормально, но ограничивается размером буфера. В дальнейшем требуется считывать строки бОльшей длины.

Как быть в этом случае?

maksim
Offline
Зарегистрирован: 12.02.2012

Во-первых, размер буфера можно увеличить arduino-1.0\hardware\arduino\cores\arduino\HardwareSerial.cpp в нем SERIAL_BUFFER_SIZE 64http://arduino.ru/forum/programmirovanie/uvelichenie-bufera-uart-bolee-128-bait
Во-вторых нужно просто успевать обрабатывать получаемые данные, можно это делать в прерывании - http://arduino.cc/en/Reference/SerialEvent

Nosferatu13666
Offline
Зарегистрирован: 31.05.2013

На счет прерываия уже думал. А команда SerialRead() смещает "голову" буфера?

maksim
Offline
Зарегистрирован: 12.02.2012

Если вы имеете ввиду освобождается ли байт буфера после чтения из буфера байта, то да.

Nosferatu13666
Offline
Зарегистрирован: 31.05.2013

Большое спасибо, буду пробовать.

dieego
Offline
Зарегистрирован: 25.06.2012

Добрый день!

У меня проблема с передачей AT команд 

вот собственно что хочу сделать



mySerial.println("AT+HTTPINIT");

   delay(5000);

   mostraDadosSerial();

   // set http param value

   mySerial.println("AT+HTTPPARA=\"URL\",\"http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=arduinoteam HTTP/1.1");

   delay(5000);

   mostraDadosSerial();

   // set http action type 0 = GET, 1 = POST, 2 = HEAD

   mySerial.println("AT+HTTPACTION=0");

   delay(6000);

   mostraDadosSerial();

а вот что выдаёт Serial port

AT+HTTPINIT

OK

AT+HTTPPARA="URL","http://api.twitter.com/1/statuses/user_timelAT+HTTPACTION=0

ERROR

AT+HTTPREAD

OK

Почему то сьедается часть команды. увеличил буфер порта до 256 - толку ноль.

Прошу помощи!

Извините за форматирование - когда вставляю код редактор добавляет лишние строки)

egor1855
Offline
Зарегистрирован: 24.10.2016

Если на "лету" не успеваете обрабатывать, и, теряется часть данных, то пишите в "буфер" своей же программу, у уно 500 байт для этого можно взять.