RF24, если операторы не читаются должным образом, даже если значение «if» неверно, оно все равно следует за соответствующим кодом.
Мой код принимает значения с пульта дистанционного управления и передает его состояние. Сейчас состояния — это всего лишь 1 и 0, включено или выключено, и запись ведется через последовательный монитор на передающем Arduino. На принимающем радиочастотном модуле я не могу заставить операторы if работать правильно
Код передатчика:
const char a[] = "1";
const char b[] = "0";
void loop() {
if (Serial.available ( ) > 0)
{
char state = Serial.read(); // считываем значение с пульта
if (state >= 0)
{
digitalWrite (7, HIGH); //включение светодиода на макетной плате передачи для сравнения с макетной платой приема
radio.write(&a, sizeof(a)); //сообщаем другому Arduino, что значение равно 1
}
if (state < 0)
{
digitalWrite(7,LOW);
radio.write(&b,sizeof(b)); //сообщаем другому значению arduino 0
}
}
Код получателя:
void loop()
{
if (radio.available())
{
char state[32] = {0};
radio.read(&state, sizeof(state));
Serial.println(state);
int a = state;
if (a = 1);
{
digitalWrite(7,HIGH);
Serial.println("do something");
}
if (a = 0);
{
digitalWrite(7,LOW);
Serial.println("do nothing");
}
}
получение последовательного монитора
1
do something
do nothing
0
do something
do nothing
0
do something
do nothing
и мой свет на принимающем Arduino не горит, почему он печатает оба утверждения? A равно 1, но он печатает значение, которое должно быть напечатано, когда a также равно 0, я так запутался
@Bradbut, 👍-3
Обсуждение1 ответ
Лучший ответ:
if (a = 1);
{
digitalWrite(7,HIGH);
Serial.println("do something");
}
Здесь есть две основные проблемы. В C++ вы проверяете равенство ==
, а не =
.
Во-вторых, установка точки с запятой после if
завершает область действия if
.
Это должно читаться:
if (a == 1)
{
digitalWrite(7,HIGH);
Serial.println("do something");
}
char state[32] = {0};
radio.read(&state, sizeof(state));
Serial.println(state);
int a = state;
state
— это массив. Если вы присвоите это a
, вы получите тот же массив в другой переменной. Этот массив не будет равен нулю или единице.
Возможно, вы имели в виду:
int a = state [0];
- Задержка связи основного узла RF24Mesh
- Serial.parseInt() занимает больше времени, чем хотелось бы
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
- Float печатается только 2 десятичных знака после запятой
- Arduino как USB HID
- Serial1' was not declared in this scope
напечатайте
sizeof(state)
также... это то, что вы ожидаете?, @jsotolaесли (а = 1); {
...если (а = 0); {
У вас там четыре опечатки. Как минимум два из них будут вам показаны, если вы повысите уровень предупреждения в настройках IDE., @timemageНачните с простого кода, который, как известно, работает, например: https://forum.arduino.cc/t/simple-nrf24l01-2-4ghz-transceiver-demo/405123/2.
Serial.read()
возвращает отрицательное значение (-1), если данные недоступны, но вы уже проверили их доступность перед вводом команды. Опубликованный вами код в любом случае плохо отформатирован и неполный., @6v6gt@timemage Не могли бы вы дать ответ? Комментарий предназначен для разъяснения вопроса., @Nick Gammon
@6v6gt Ваш комментарий не запрашивает дополнительную информацию по вопросу., @Nick Gammon
@NickGammon Короче говоря: нет. Вы демонстрируете, что не понимаете цели моего комментария., @timemage