我试图让我的arduino使用gps和gprs盾牌。到现在为止还挺好。 我的代码工作时,我有评论线评论和停止工作,如果我取消他们的注释。取消注释代码时的奇怪行为
甚至更早的事件失败。例如,我必须输出GPRS Registered
和GPRS AT Ready
,但它不会发生。
有没有可能导致我的arduino受损?
这是代码。
请注意,我测试了我用盾牌发送到gprs盾牌的命令,它的工作原理。
#include <SoftwareSerial.h>
#include <TinyGPS.h>
#define BUFFSIZ 90
int GPRS_Registered;
int GPRS_AT_Ready;
char incoming_char = 0;
char buffidx;
char at_buffer[BUFFSIZ];
int firstLoop = 1;
TinyGPS gps;
SoftwareSerial cell(2,3);
SoftwareSerial uart_gps(0,1);
void sendSMS(char *msg){
cell.println("AT+CMGF=1");
cell.print("AT+CMGS=");
cell.write(34);
cell.print("A number here");
cell.write(34);
cell.println("");
delay(500);
cell.println(msg);
cell.write(26);
delay(15000);
}
void readATString(){
char c;
buffidx = 0;
while(true){
if(cell.available() > 0){
c = cell.read();
if(c == -1){
at_buffer[buffidx] = '\0';
return;
}
if(c == '\n'){
continue;
}
if((buffidx == BUFFSIZ - 1) || (c == '\r')){
at_buffer[buffidx] = '\0';
return;
}
at_buffer[buffidx++] = c;
}
}
}
void processATString(){
if(strstr(at_buffer, "+SIND: 8") != 0){
GPRS_Registered = 0;
Serial.println("GPRS Network Not Available");
}
if(strstr(at_buffer, "+SIND: 11") != 0){
GPRS_Registered = 1;
Serial.println("GPRS Registered");
}
if(strstr(at_buffer, "+SIND: 4") != 0){
GPRS_AT_Ready = 1;
Serial.println("GPRS AT Ready");
}
}
void setup(){
Serial.begin(115200);
cell.begin(9600);
uart_gps.begin(4800);
cell.listen();
Serial.println("Starting SM5100 Communication...");
delay(5000);
}
void loop(){
bool dataReady = false;
unsigned long chars, prev_chars = 0;
unsigned short sentences, failed;
if(firstLoop){
firstLoop = 0;
while(GPRS_Registered == 0 || GPRS_AT_Ready == 0){
readATString();
processATString();
}
Serial.println("Everything is working");
}
uart_gps.listen();
for (unsigned long start = millis(); millis() - start < 1000;){
while (uart_gps.available()){
char c = uart_gps.read();
if (gps.encode(c))
dataReady = true;
}
}
if (dataReady)
{
float flat, flon;
unsigned long age;
gps.f_get_position(&flat, &flon, &age);
Serial.print("flat: ");
Serial.print(flat, 6);
Serial.print("flon: ");
Serial.println(flon, 6);
cell.listen();
// HERE IS THE PROBLEM
// cell.println("AT+CGDCONT=1,\"IP\",\"internet\"");
// delay(3000);
// cell.println("AT+CGACT=1,1");
// delay(3000);
// cell.println("AT+SDATACONF=1,\"TCP\",\"my.server.com\",8080");
// delay(3000);
// cell.println("AT+SDATASTART=1,1");
// cell.println("AT+SSTRSEND=1,\"testing arduino gprs\"");
Serial.println("Sent data to server");
}
}
您的Arduino很可能没有损坏。 – sachleen
@sachleen那么如何解释这个事实,如果我只是保留'cell.println(“AT + CGDCONT = 1,\”IP \“,\”internet \“”);'并将其更改为'Serial。 println(“AT + CGDCONT = 1,\”IP \“,\”internet \“”);'工作正常吗?如果我也改变其他线路,则会发生同样的问题。 – kechapito
我不行。尝试使用仅有问题代码的新草图(以及显然让代码运行所需的任何其他内容),然后查看是否得到相同的错误。用最小的例子来工作比整个事情要容易得多。 – sachleen