Не удалось преобразовать «digitalWrite(8u, 1u)» из «void» в «bool»

Я пытаюсь заставить некоторые светодиодные фонари включаться, когда я щелкаю переключателем на моем радиоуправляемом контроллере. Я подключу сигнальный провод от RC-контроллера к контакту 8. План таков: если я щелкну переключателем, светодиоды (контакты 12,11,10,9) загорятся, а если я не щелкну переключателем, загорятся светодиоды. не включится. Это Arduino nano, который будет подключаться к дрону. Я нашел еще один вопрос ЗДЕСЬ, но реальных ответов не было. Я получаю сообщение об ошибке:

статус выхода 1 не удалось преобразовать «digitalWrite(8u, 1u)» из «void» в «bool»

Как это исправить? Должен ли я написать код по-другому?

Код Arduino:

    void setup() {

  pinMode(4, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, INPUT);



}


void loop() {

  if (digitalWrite(8, HIGH));
    digitalWrite(12, HIGH);
    digitalWrite(11, HIGH);
    digitalWrite(10, HIGH);
    digitalWrite(9, HIGH); 
  else 
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);

  digitalWrite(4,HIGH);
  delay(1500);
  digitalWrite(4,LOW);
}

, 👍0

Обсуждение

почему за этот вопрос проголосовали?, @Juraj

Потому что это ясный вопрос, на который можно ответить, с сообщением об ошибке и (относительно) минимальным воспроизведением @Juraj, @RubberDuck

Голосование за «полезное». и я согласен с текстом в пузырьке над кнопкой понижения голоса, @Juraj


2 ответа


Лучший ответ:

1

Вам следует использовать digitalRead(8) вместо digitalWrite(8, HIGH). В вашем эскизе также отсутствуют фигурные скобки.

void setup(){
  pinMode(4, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, INPUT);
}

void loop(){
  if(digitalRead(8) == HIGH){
    digitalWrite(12, HIGH);
    digitalWrite(11, HIGH);
    digitalWrite(10, HIGH);
    digitalWrite(9, HIGH);
  } 
  else{
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);
  }
  digitalWrite(4,HIGH);
  delay(1500);
  digitalWrite(4,LOW);
}

Использование delay() заблокирует скетч от каких-либо других действий и должно быть заменено таймером millis(). Посмотрите пример BlinkWithoutDelay в IDE.

,

Могу ли я просто сделать еще один voidloop() и заставить его мигать? Тогда это не будет мешать оператору if., @Thomas

У вас может быть только 1 voidloop(). Существует несколько доступных библиотек, использовать которые проще, чем писать собственный код, например https://www.avdweb.nl/arduino/timing/virtualdelay. Эта библиотека позволяет использовать синтаксис, аналогичный функции Delay(), и не является блокирующей., @VE7JRO


1

Эта строка кода является источником вашей проблемы.

void loop() {

  if (digitalWrite(8, HIGH));

Если выражения ожидают логическое значение (истина/ложь), но если вы отметите документации для digitalWrite(), вы увидите, что он возвращает «Ничего» (т. е. void).

Вам необходимо использовать digitalRead(), чтобы проверить текущее состояние контакта.

,