首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Arduino上实时获取GPS Sim800模块RTC时间

如何在Arduino上实时获取GPS Sim800模块RTC时间
EN

Stack Overflow用户
提问于 2020-10-04 07:00:49
回答 2查看 655关注 0票数 0

你好,我想要在Arduino上的实时GPS Sim800模块RTC时间而不用库,我可以使用库来实现它,但是没有库,正确的数据只在1分钟内就来了,而其他的则是垃圾。

请告诉我能帮我实现这个目标的代码

使用代码,我做了以下事情

代码语言:javascript
复制
#include <SoftwareSerial.h>
SoftwareSerial gsm(10, 11);
String Buffer;
String inData;

int i;
int *year, *month, *day, *hour, *minute, *second;

void setup() {
  Serial.begin(9600);
  gsm.begin(9600);
  delay(5000);
}

void loop() {
Ansh:
  delay(500);
  gsm.println("AT+CCLK?\r\n");
  while (gsm.available()) {
    char recieved = gsm.read();
    inData += recieved;
    delay(100);

    // Process message when new line character is recieved
    if (recieved == '\n')
    {
      Serial.print("Arduino Received: ");
      Serial.println(inData);

      if (inData.substring(1, 5) == "+CCLK") {
        Serial.println("Hello");
      }

      // You can put some if and else here to process the message juste like that:

      if (inData == "+++\n") { // DON'T forget to add "\n" at the end of the string.
        Serial.println("OK. Press h for help.");
      }


      inData = ""; // Clear recieved buffer
      goto Ansh;
    }

    /* Buffer = Buffer.substring(Buffer.indexOf("\"") + 1, Buffer.lastIndexOf("\"") - 1);
      year = Buffer.substring(0, 2).toInt();
      month = Buffer.substring(3, 5).toInt();
      day = Buffer.substring(6, 8).toInt();
      hour = Buffer.substring(9, 11).toInt();
      minute = Buffer.substring(15, 17).toInt();
      second = Buffer.substring(18, 20).toInt();
    */
  }/*
  Serial.println(*hour);
  delay(100);
  Serial.println(*minute);
  delay(100);
  Serial.println(*second);
  delay(100);
*/
}

但是我没有得到实时输出,但是在一个正确的输出之后,它返回垃圾,如下所示

12:22:38.960 -> Arduino收到:+CCLK:"20/10/04,12:22:31+22“12:22:38.960 -> 12:22:39.672 -> Arduino收到: 12:22:39.672 -> 12:22:40.596 -> Arduino收到: OK 12:22:40.596 -> 12:40.596 -> 12:42.339-> Arduino收到: AT+CCLK?

12:22:42.339 -> 12:22:44.362 -> Arduino收到:+CCAT+CCLK?

12:22:44.362 -> 12:22:46.067 -> Arduino收到: AT+CCLK?

12:22:46.067 -> 12:22:22:50.344 -> -> Arduino:+CCLK:“20/10/04,12 CCLK+CAT+CCLK?

12:22:50.344 -> 12:22:52.043 -> Arduino收到: AT+CCLK?

12:22:52.043 -> 12:22:54.082 -> Arduino收到:+CCAT+CCLK?

12:22:54.082 -> 12:22:55.822 -> Arduino收到: AT+CCLK?

12:22:55.822 -> 12:23:00.064 -> -> Arduino收到:+CCLK:“20/10/04,12:22:49 22+CCLK?

12:23:00.098 -> 12:23:01.791 -> Arduino收到: AT+CCLK?

12:23:01.791 -> 12:23:03.810 -> Arduino收到:+CCAT+CCLK?

12:23:03.845 -> 12:23:05.552 -> Arduino收到: AT+CCLK?

12:23:05.552 -> 12:23:23:09.803 -> -> Arduino收到:+CCLK:“20/10/04,12:22:58 22+CCLK?

12:23:09.838 -> 12:23:11.544 -> Arduino收到: AT+CCLK?

12:23:11.544 -> 12:23:13.563 -> Arduino收到:+CCAT+CCLK?

12:23:13.563 -> 12:23:15.290 -> Arduino收到: AT+CCLK?

12:23:15.290 -> 12:23:23:19.557 -> -> Arduino收到:+CCLK:"20/10/04,12:23:08AT+CCLK?

12:23:19.557 -> 12:23:21.278 -> Arduino收到: AT+CCLK?

如果我从代码中删除延迟,那么我将收到以下输出

12:34:56.406 -> Arduino接收:(⸮⸮SCC⸮⸮CL?⸮)

1-⸮

AT+CCLK?

AT+CCL~Q⸮-j 12:34:56.473 -> 12:34:56.541 -> Arduino收到:⸮5⸮⸮AT+CCLK?

⸮⸮⸮~⸮⸮1⸮j⸮b-⸮

AT+CCLK?

AT+C⸮~⸮⸮1-j⸮5⸮⸮(⸮i 1-⸮

AV 1-j 12:34:56.607 -> 12:34:56.913 -> Arduino收到:⸮5⸮⸮J⸮jj⸮j AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CK5Q⸮1⸮j⸮5⸮⸮AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CCLK⸮Q⸮Zj⸮5⸮⸮(⸮⸮1-⸮

1 -> j⸮j⸮5j⸮ը(⸮CCP i 1-⸮5Q⸮⸮j⸮jj⸮ը(j⸮jQb⸮⸮E⸮jj⸮(⸮⸮1-⸮5Q⸮Zj⸮5⸮⸮(⸮⸮(j⸮jQ⸮ը(⸮Zj去处1 j j5j j1 1-j 12:34:57.184⸮12:34:57.252 -> Arduino接收:5 D j1-jj)

AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CCLK?

1-⸮

AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CCL~Q⸮-j 12:34:57.354 -> 12:34:57.561 -> Arduino收到:⸮5⸮⸮AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CCLK?J AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+C⸮⸮5Q⸮⸮⸮Ԋi⸮j⸮(Q⸮⸮j⸮jj⸮ը(⸮CCP⸮i⸮j⸮ը(⸮CC⸮⸮⸮K?⸮+CCLK?

AT+C⸮Q⸮Zj⸮5⸮⸮(Q⸮-j 12:34:57.763 -> 12:34:57.763 -> Arduino接收:⸮5⸮⸮E⸮jj⸮j AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CCLK?

AT+CCLK?

-> 12:34:57.866 -> Arduino收到: 12:34:57.905 -> 12:34:57.905 -> Arduino收到: OK 12:34:57.968 -> 12:34:57.968 -> Arduino收到: AT+CCLK?

12:34:57.968 -> 12:34:57.968 -> Arduino收到:+CCLK:"20/10/04,12:34:54+22“12:34:58.037 -> 12:34:58.037 -> Arduino收到: 12:34:58.070 -> 12:34:58.070 -> Arduino收到: OK 12:34:58.070 -> 12:34:58.070 -> Arduino接收: AT+CCK⸮⸮'I⸮)j⸮H(⸮5⸮ꨨH⸮)⸮Қ⸮)⸮Қ)-> 12:34:58.138 -> Arduino接收: 12:34:58.172 -> 12:34:58.172 -> Arduino接收: OK A+⸮1-⸮jRb⸮⸮Ҫ⸮Z⸮⸮j 12:34:58.207 -> 12:34:58.207 -> Arduino接收:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-04 10:59:39

试试这个:

代码语言:javascript
复制
#include <SoftwareSerial.h>

SoftwareSerial gsm(10, 11);
String inData;

void setup() {
    Serial.begin(9600);
    gsm.begin(9600);
    delay(5000);
}

void loop() {

    inData = "";

    gsm.println("AT+CCLK?");
    delay(500);

    while (gsm.available()) {
        inData += char(gsm.read());
    }

    Serial.print("Arduino Received: ");
    Serial.println(inData);

    delay(500);
}
票数 1
EN

Stack Overflow用户

发布于 2020-10-04 12:37:34

@Danny_ds

while (gsm.available()) { inData += char(gsm.read()); }

如果GSM没有机会在您之前提供的500 is暂停期间填充缓冲区,将比填充速度更快地清空传入缓冲区。

缓冲区也只有64字节深,在9600字节处,您可以在这500毫秒内接收480个字符。这意味着,如果答案超过64个字节,您将失去其他一切。

所以简单地说,你不能保证看到完整的答案。

正确的方法是等待完整的答案,如文档中所描述的(通常在答案的末尾有一个"OK\r\n“),或者先得到超时。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64191949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档