Я не могу правильно получить строку, которую я отправил через nrf
Я использую Arduino Uno и nrf24l01. контролировать данные датчиков. Но это сообщение, которое получает master:
⸮
это мой подчиненный код.
void monitoring() {
delay(10);
radio.stopListening();
int soilMoisture = analogRead(A5);
int light = analogRead(A4);
float temp = analogRead(A3);
temp = temp * 0.48828125;
int ltemp = int(temp);
String message = String(soilMoisture) + "," + String(light) + "," + String(ltemp);
Serial.println(message);
delay(200);
radio.write(&message, sizeof(message));
delay(50);
radio.startListening();
delay(10);
}
а вот и мой мастер-код.
while (1) {
if (radio.available()) {
char message[32] = "";
radio.read(&message, sizeof(message));
delay(500);
Serial.println(message);
}
@alireza, 👍1
1 ответ
Лучший ответ:
▲ 1
Удалите & в строке мастер-кода измените
radio.read(message, sizeof(message));
в
radio.read(message, sizeof(message));
message
— это массив, поэтому либо вы должны передать адрес первого символа (&message[0]
), либо просто передать message
.
Еще одна проблема заключается в отправке строки в подчиненном коде (с использованием типа String
). Этот тип все равно лучше не использовать, но, вероятно, вам придется преобразовать его в массив символов того же типа, что и в мастер-коде.
Для этого можно использовать функцию StringToCharArray
, см. StringToCharArray. р>
,
@Michel Keijzers
Смотрите также:
- Получить массив символов с помощью модуля SIM900
- Состояние цифрового вывода Arduino не передается через NRF24L01, тогда как состояние аналогового вывода передается, почему?
- Ошибка: значение void не проигнорировано, как должно быть = radio.read(&Irms, sizeof(float));
- avrdude ser_open() can't set com-state
- Float печатается только 2 десятичных знака после запятой
- Очень простая операция Arduino Uno Serial.readString()
- ошибка: espcomm_upload_mem failed при загрузке скетча
- Как преобразовать строку в массив байтов
Большое спасибо, @alireza