Я разбиваю строку (с информацией о погоде):
1:7.34:7.54:87.62:1012.33
Что такое: тип сообщения, температура, внутренняя температура, влажность и барометрия c давление
if (rf69.available()) {
uint8_t buf[RH_RF69_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (rf69.recv(buf, &len)) {
if (!len) return;
buf[len] = 0;
Serial.print("Received [");
Serial.print(len);
Serial.print("]: ");
Serial.println((char*)buf);
Serial.print("RSSI: ");
Serial.println(rf69.lastRssi(), DEC);
char* data;
data = (char*)buf;
char separator[] = ":";
char *array[4]; //4
int i=0;
array[i] = strtok(data,separator);
if( array[i][0] == '1' && array[i][1] == 0 ) {
while( i < sizeof(array) / sizeof(*array) && array[i] != NULL) {
array[i] = strtok(NULL,separator);
Serial.println(array[i]);
i++ ;
}
}
char* t1 = array[0];
char* t2 = array[1];
char* h = array[2];
char* p = array[3];
Serial.print("Temperature Outside= "); Serial.print(t1);
Serial.print(" Temperature Enclosure= "); Serial.print(t2);
Serial.print(" Rel. Humidity = "); Serial.print(h);
Serial.print(" Pressure = "); Serial.println(p);
}
}
Правильный результат:
Received [25]: 1:7.33:7.51:87.53:1012.32
RSSI: -60
7.33
7.51
87.53
1012.32
Temperature Outside= 7.33 Temperature Enclosure= 7.51 Rel. Humidity = 87.53 Pressure = 1012.32
Но иногда мне кажется, что я получаю следующее:
Received [25]: 1:7.33:7.50:87.60:1012.33
RSSI: -60
7.33
Temperature Outside= 7.33 Temperature Enclosure= Rel. Humidity = Pressure = ⸮
Как вы видите, первоначальная дата выглядит хорошо, но она не может быть обработана в случайное время.
Я не вижу ничего очевидного, но я также не C эксперт.