2012-04-29 6 views
0

Я использую Arduino UNO R3, и когда я посылаю AT-команду на свой экран GSM через Serial, я получаю все большее число из Serial.available().Arduino Serial.available() продолжает расти

Вот пример, который я использую для отладки:

void loop() 
{ 

    Serial.println("AT+CADC?"); 
    delay(3000); 
} 
void serialEvent() 
{ 
    char * sensorValue; 
    int serial = Serial.available(); 
    Serial.print("-"); 
    Serial.print(serial); 
    Serial.println("-"); 
    if(serial >0) 
    { 
    sensorValue = (char*) malloc(sizeof(char) * (serial +1)); 
    int i; 
    for(i = 0; i < serial; i++) 
    { 
     sensorValue[i] = Serial.read(); 
     //Serial.print(sensorValue[i]); 
    } 
    sensorValue[serial+1] = '\0'; 
    Serial.print(sensorValue); 
    } 
    delay(2000); 
} 

В результате я получаю от последовательного монитора является:

-30-

-63

-63-

-63-

...

Почему число байтов доступны начать в 30, а затем максимум на 63? Это происходит даже тогда, когда я использую Serial.read(), который должен потреблять данные в буфере.

РЕДАКТИРОВАТЬ: Добавлено полное contens of serialEvent().

+2

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

+0

Хорошо, как я упомянул в конце, результат тот же, что и при чтениях. Я только что отредактировал код, чтобы показать мой полный код, где я читаю. – BOMEz

ответ

1
sensorValue[serial+1] = '\0'; 
Serial.print(sensorValue);  // <== here 

Вы отправляете все, что получаете, прямо на модем. Это быстро повторяет его. Поэтому, как только вы это сделаете с помощью AT-команды, вы будете навсегда петля, отправляя одни и те же байты взад и вперед. Удалите вызовы Serial.print().

+0

А я вижу, имеет смысл, хотя я ищу, чтобы получить ответ от модема и увидеть его в терминале. Как я могу получить результат, не пиная его в цикл? – BOMEz

+1

Я не знаю достаточно о вашем конкретном аппаратном обеспечении и прошивке Arduino, это движущаяся цель. Но, очевидно, ваш код должен различать * два * последовательных порта. Один для модема, другой для терминала. Не знаю, как это может работать, когда у вас есть только «серийный», извините. Форум поставщика - хорошее место, чтобы найти людей, которые возились с настраиваемым оборудованием. –

1

Я предлагаю вам использовать последовательную библиотеку программного обеспечения - [http://arduino.cc/en/Reference/SoftwareSerial]SoftwareSerial 1 - и использовать это для доступа к модему GSM, если GSM-модем не требует UART/RS-232.

Другая альтернатива, которая может быть уместна, если большая часть вашей работы связана с использованием модемов, будет Arduino Mega 2560. Он имеет четыре аппаратных последовательных интерфейса, хотя он не имеет выходных сигналов RS-232. Для этого вы должны иметь возможность использовать одну из планок FTDI.

+0

Хорошее предложение на Mega 2560, мне, возможно, придется изучить его. Я нахожусь на прототипировании и получил только UNO R3, поскольку это была последняя модель. – BOMEz

Смежные вопросы