2013-05-21 96 views
0

我寫了下面的代碼,用GSM SM5100B向我的手機發送一條簡單消息。但它不起作用。我想用C++代碼檢查每個printf行的輸出。 例如AT命令的輸出C++代碼

AT+CMFG=1 
ok 
AT+CMGS="69******" 
ok 

等 是否有任何爲什麼要實現這個?

我的代碼

#include <stdio.h> // standard input/output functions 
#include <string.h> // string function definitions 
#include <unistd.h> // UNIX standard function definitions 
#include <fcntl.h> // File control definitions 
#include <errno.h> // Error number definitions 
#include <termios.h> // POSIX terminal control definitionss 
#include <time.h> // time calls 

int open_port(void) 
{ 
int fd; // file description for the serial port 
fd = open("/dev/ttyAMA0", O_RDWR | O_NOCTTY | O_NDELAY); 
if(fd == -1) // if open is unsucessful 
{ 
    printf("open_port: Unable to open /dev/ttyAMA0. \n"); 
} 
else 
{ 
    fcntl(fd, F_SETFL, 0); 
    printf("port is open.\n"); 
} 

return(fd); 
} //open_port 

int configure_port(int fd)  // configure the port 
{ 
struct termios port_settings;  // structure to store the port settings in 

cfsetispeed(&port_settings, B9600); // set baud rates 
cfsetospeed(&port_settings, B9600); 

port_settings.c_cflag &= ~PARENB; // set no parity, stop bits, data bits 
port_settings.c_cflag &= ~CSTOPB; 
port_settings.c_cflag &= ~CSIZE; 
port_settings.c_cflag |= CS8; 

tcsetattr(fd, TCSANOW, &port_settings); // apply the settings to the port 
return(fd); 

} 

void init_gsm() 
{ 
printf("AT+CMGF=1\r\n"); 
sleep(3); 
printf("AT+CMGS=\"+34603****\"\r\n"); 
sleep(3); 
//printf("Hello\r\n%c",26); 
printf("Hello\x1A"); 
sleep(3); 
// printf("\x1A"); 

} 
int main(void) 
{ 
int fd = open_port(); 
configure_port(fd); 
sleep(5); 
//query_modem(fd); 
    init_gsm(); 
return(0); 

} 
+1

請問您能更具體嗎?只是說「它不起作用」並沒有真正告訴我們多少。 –

+0

雖然它可能與你有什麼關係,但沒有寫任何東西給調制解調器? –

+0

我的意思是我沒有結果...我只有端口是開放的和3個printf行。我想我需要一個代碼來讀取緩衝區 – dali1985

回答

0

最嚴重的是,您在發送AT命令後沒有等待最終結果代碼。使用sleep不是有效的解決方案。你必須修復這個做適當的解析從調制解調器回來的響應。有關更多詳細信息,請參閱以下答案,answer 1,answer 2

然後您的init_gsm函數應該有一個int fd參數用於發送AT命令以及讀取響應。

0

C++的方法是,您使用的stringstreamwrite的組合。

stringstream ss; 
string number; 

cout << "Enter phone number to send to:"); 
cout.flush(); 
cin >> number; 
ss << "AT+CMGS=\"" << number << "\"\r\n"; 
string str = ss.str(); 
write(fd, str.c_str(), str.length());