2012-04-26 2 views
2

Arduino에서 AT 명령의 출력을 어떻게 캡처합니까?Arduino에서 AT 명령의 출력을 읽으려면 어떻게해야합니까?

저는 GSM 방패가 달린 Arduino Uno R3을 사용하고 있습니다. 나는 모든 AT 명령어 (they can be seen here)를 가지고 있으며, 터미널을 사용하고 출력을 얻으면 그것들을 입력 할 수있다. 그러나 결과 출력을 코드를 통해 어떻게 포착 할 수 있습니까? 아래 코드는 내가 시도한 것을 보여 주지만 작동하지 않습니다. 특히 내가 아날로그 입력을 얻고 그 결과를 프린트하려고 시도하는 곳. CADC AT + + 1 = CMGF

AT

:

#include <SoftwareSerial.h> 

SoftwareSerial mySerial(7, 8); 

void setup() 
{ 
    char sensorValue[32] =""; 
    Serial.begin(9600); 
    mySerial.begin(9600); 
    Serial.println("\r"); 

    //Wait for a second while the modem sends an "OK" 
    delay(1000);      

    //Because we want to send the SMS in text mode 
    Serial.println("AT+CMGF=1\r");  
    delay(1000); 

    mySerial.println("AT+CADC?");  //Query the analog input for data 
    Serial.println(Serial.available());  
    Serial.println(Serial.read()); //Print out result??? 

    //Start accepting the text for the message 
    //to be sent to the number specified. 
    //Replace this number with the target mobile number. 
    Serial.println("AT+CMGS=\"+MSISDN\"\r");  


    delay(1000); 
    Serial.println("!"); //The text for the message 
    delay(1000); 
    Serial.write(26); //Equivalent to sending Ctrl+Z 
} 

void loop() 
{ 
    /* 
    if (mySerial.available()) 
    Serial.write(mySerial.read()); 
    if (Serial.available()) 
    mySerial.write(Serial.read()); 
    */ 
} 

난 출력을 얻을? 21 13

또는 CADC AT + + 1 = CMGF

AT

? 18 65

에 관계없이 내 아날로그 소스의 변화

답변

2

는 SoftwareSerial read 기능 here의 문서를 살펴 보자.

GSM 장치 직렬 인터페이스에서 읽을 때 버퍼에서 읽을 바이트가 있다는 것을 당연한 것으로 생각할 수 없습니다.

그것은 mySerial.read() 반환 -1 (사용할 수없는 바이트), 아두 이노 시리얼 포트에 뭔가를 제공 할 수있는 GSM 장치 전에 그 코드를 실행으로 매우 가능성이 높습니다.

들어오는 바이트의 직렬 인터페이스를 테스트하려면 available 함수 (설명서 here)를 사용해야합니다. 무한 대기를 피하기 위해 타임 아웃과 함께 사용할 수 있습니다.

시도해 볼 수있는 가장 좋은 방법은 직렬 작업 (읽기, 쓰기, 시간 초과, 지연 등)을 처리하기 위해 별도의 class을 작성하는 것입니다.

또한 Arduino 용 GPRS 드라이버를 한 번 작성했습니다. GPRS 장치에 여분의 커패시터를 설치하고 2A 이상의 출력 전류를 가진 전원 공급 장치를 사용해야하는 전원 공급 장치에 문제가있었습니다.

+0

그래, 사용 가능한()을 확인하기 위해 코드를 다르게 작성했지만, 방금 입력 한 명령을 다시 얻었습니다. 명령을 다시 보내는 결과는 어떻게 얻을 수 있습니까? – BOMEz

+0

당신은 가용성에 대한 테스트를하고 myserial에서 읽어보십시오. –

관련 문제