我有一個字符串,具體來說,一個手機號碼與從串行端口(PC)輸入的11個數字,並計劃將其發送到arduino。我在輸入字符串並將其輸出到串行緩衝區時沒有問題,我感到困惑的是,arduino是否真正正確地讀取了我剛纔輸入的手機號碼?另外,假設arduino已經讀取了字符串,我該如何正確地在我的arduino代碼中插入字符串並處理所有內容以便它現在可以發送SMS?我能夠單獨使用GSMSMS代碼發送短信。我可以通過手動輸入特定的手機號碼來完成。但下面的第一個arduino代碼,我有錯誤。我錯過了什麼嗎?我非常需要一些建議和提示。提前致謝! :))) 這是我的Arduino代碼:從pc發送字符串到arduino
char text[11];
int bufferIndex = 0;
char Rx_data[50];
unsigned char Rx_index = 0;
int i = 0;
char msg[160];
int sig;
void setup(){
Serial.begin(38400);
initGSM();
loop_Serial();
send_msg(text, "Your sample has been tested. You may now get your result. Thank you.");
}
void loop_Serial()
{
if(Serial.available())
{
char ch = (char)Serial.read();
if(ch == '\n') // is this the terminating carriage return
{
text[ bufferIndex ] = 0; // terminate the string with a 0
bufferIndex = 0; // reset the index ready for another string
// do something with the string
Serial.println(text);
}
else
text[ bufferIndex++ ] = ch; // add the character into the buffer
}
}
void loop() {
//none
}
void send_msg(char *number, char *msg)
{
char at_cmgs_cmd[30] = {'\0'};
char msg1[160] = {'\0'};
char ctl_z = 0x1A;
sprintf(msg1, "%s%c", msg, ctl_z);
sprintf(at_cmgs_cmd, "AT+CMGS=\"%s\"\r\n",number);
sendGSM(at_cmgs_cmd);
delay(100);
delay(100);
delay(100);
sendGSM(msg1);
delay(100);
}
void sendGSM(char *string){
Serial.write(string);
delay(90);
}
void clearString(char *strArray) {
int j;
for (j = 100; j > 0; j--)
strArray[j] = 0x00;
}
void send_cmd(char *at_cmd, char clr){
char *stat = '\0';
while(!stat){
sendGSM(at_cmd);
delay(90);
readSerialString(Rx_data);
stat = strstr(Rx_data, "OK");
}
if (clr){
clearString(Rx_data);
delay(200);
stat = '\0';
}
}
void initGSM(){
send_cmd("AT\r\n",1);
// send_cmd("ATE0\r\n",1); // Turn off automatic echo of the GSM Module
send_cmd("AT+CMGF=1\r\n",1); // Set message format to text mode
//Sucess
Serial.println("Success");
delay(1000);
delay(1000);
delay(1000);
}
void readSerialString (char *strArray) {
if(!Serial.available()) {
return;
}
while(Serial.available()) {
strArray[i] = Serial.read();
i++;
}
}
AT
AT + CMGF = 1
成功
AT + CMGS = 「S」
你的樣品已經過測試。你現在可以得到你的結果。謝謝。
「S」從哪裏來?我輸入的字符串在哪裏?
你好,我更新了我的代碼。請檢查上面..現在我得到「S」,我不知道它來自哪裏。 :( – Van
你還沒有等待所有11個字符,而且你的++必須移出[] – Lesto
我相信那個loop_Serial部分會循環並循環,直到達到11個字符並執行程序的其餘部分, (((((((((()((((((( – Van