Проблемы сравнения строк (Arduino) - PullRequest
0 голосов
/ 27 января 2019

У меня проблемы со сравнением строк.

Я получаю от mqtt несколько сообщений, я хочу сохранить последнее значение для каждой темы (ключ)

Я показал соответствующие частимоего эскиза.

#define MAX_SENSORS 6

// таблица темы и значения

char sensor_data[MAX_SENSORS][2][20]; 

инициализация таблицы

void init() {
....
  for (int i=0;i<MAX_SENSORS;i++) // initialize table
  {
    strcpy(sensor_data[i][0],"?");
    strcpy(sensor_data[i][1],"");
  }

}

Сообщение, полученное здесь

void callback(char* topic, byte* b_payload, unsigned int length) {
  // Convert byte* b_payload to string
  for (int i = 0; i < length; i++) {
    payload[i]=(char)b_payload[i];
  };
  payload[length]='\0';

  for (int i = 0; i < MAX_SENSORS; i++)
  {

Почему это (отладочная отладка) не работает?

    if (sensor_data[i][0]=="?") { 
      Serial.print("*");
    }

Оригинал

    if (sensor_data[i][0]==topic) { // Slot matching topic found
      strcpy(sensor_data[i][1],payload);
      Serial.printf(" Slot %d",i); 
      break;
    } else if (sensor_data[i][0]=="?") {  // Empty slot found, store topic here
      strcpy(sensor_data[i][0],topic);
      strcpy(sensor_data[i][1],payload);
      Serial.printf(" New  %d",i); 
      break;
    } 
  }
  Serial.println();
}

Все это, вероятно, происходит из-за того, что я запутался между строками и массивами символов?

edit Задание

  strcpy(sensor_data[i][0],topic);
  strcpy(sensor_data[i][1],payload);

, кажется, присваивает

concat(topic,payload) to sensor_data[i][0].

1 Ответ

0 голосов
/ 27 января 2019

Все это, вероятно, происходит из-за того, что я запутался между строками и массивами символов?

Похоже на это.C-строки (char * и char []) несопоставимы с ==, класс arduino String.Преобразуйте левую часть сравнения в String или используйте strcmp для сравнения строк.

if (String(sensor_data[i][0])=="?") { 
if (strcmp(sensor_data[i][0], "?") == 0) { 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...