我的接收数据是正确的,但是不能保存到新的变量中

My receiving data is correct, but it can't save in the new variable

为什么d值不等于我得到的数据?

我尝试让nodemcu获取NTP时间并发送给Arduino UNO。 Arduino 从 nodemcu 接收数据,然后将它们排列成 char 数据。目前一切顺利。

但是,当我设置新的字符保存数据时,我打印的值总是显示snark标记。

我该如何解决?

这是Arduino UNO代码

#include <SoftwareSerial.h>
SoftwareSerial s(5,6);

void setup() {
  // Initialize Serial port
  Serial.begin(9600);
  s.begin(9600);
  while (!Serial) continue;
}
int k=0;
void seting(char d){
  if(k==0){
    Serial.print("get = ");
    Serial.println(d);
    Serial.println("set Y");
  }else if(k==1){
    Serial.print("get = ");
    Serial.println(d);
    Serial.println("set M");
  }else if(k==2){
    Serial.print("get = ");
    Serial.println(d);
    Serial.println("set D");
  }else if(k==3){
    Serial.print("get = ");
    Serial.println(d);
    Serial.println("set WD");
  }else if(k==4){
    Serial.print("get = ");
    Serial.println(d);
    Serial.println("set H");
  }else if(k==5){
    Serial.print("get = ");
    Serial.println(d);
    Serial.println("set min");
  }else if(k==6){
    Serial.print("get = ");
    Serial.println(d);
    Serial.println("set sec");
  }else{
    k=0;
  }k++;
}

int i = 0;
char data[4];

void loop() {
  while(s.available()){

    char x = s.read();
    if(isdigit(x)){
      data[i]=x;
      i++;
    }
    else{
      Serial.print("data=");
      Serial.println(data);
      seting(data);

      memset(data,0,sizeof(data));
      i=0;
    }
  }
}

这里是nodemcu代码

#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <SoftwareSerial.h>
SoftwareSerial s(D6,D5);

const char *ssid     = "dlink-0C00";
const char *password = "yjjri18598";

const long utcOffsetInSeconds = 28800;//TW+8,8*60*60
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

String formattedDate;
String dayStamp;
String timeStamp;

//Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "asia.pool.ntp.org", utcOffsetInSeconds);

void setup(){
  Serial.begin(9600);
  s.begin(9600);
  WiFi.begin(ssid, password);

  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
  }

  timeClient.begin();
}


void loop() {
  timeClient.update();


  formattedDate = timeClient.getFormattedDate();
  int splitT = formattedDate.indexOf("T");
  dayStamp = formattedDate.substring(0, splitT);
  Serial.print("DATE: ");
  Serial.print(dayStamp);
  s.print(dayStamp);
  s.print("/");
  Serial.print(", ");
  Serial.println(daysOfTheWeek[timeClient.getDay()]);
  s.print(timeClient.getDay());
  s.print("/");
  /*timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-1);
  Serial.print("TIME:");
  Serial.println(timeStamp);*/
  int hour = timeClient.getHours();
  int minute = timeClient.getMinutes();
  int second = timeClient.getSeconds();
  Serial.print("TIME:");
  Serial.print(hour);
  s.print(hour);
  Serial.print(":");
  s.print(":");
  Serial.print(minute);
  s.print(minute);
  Serial.print(":");
  s.print(":");
  Serial.println(second);
  s.print(second);
  //s.write(timeStamp);
  s.write("/");
  delay(1000);
}

传递给函数 seting() 的参数是 char data[4];char 数组指针,这可能是您的输出不正确的原因。在 Arduino 代码中,尝试更改: void seting(char d){void seting(char *d){ 因为传递给 seting() 的数据是一个数组: char data[4];

同时修改您的 println(d) 以使用 k 作为输入参数 dprintln(d[k]) 的索引。如果这样可以解决问题,您可能需要将 char data[4] 的大小调整为 char data[7],以便可以使用 k 对其进行索引,这似乎从 0 变为 [=25] =] 根据发布的 Arduino 代码。