Не удалось преобразовать «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);
}
@Thomas, 👍0
Обсуждение2 ответа
Лучший ответ:
Вам следует использовать 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
Эта строка кода является источником вашей проблемы.
void loop() { if (digitalWrite(8, HIGH));
Если выражения ожидают логическое значение (истина/ложь), но если вы отметите документации для digitalWrite()
, вы увидите, что он возвращает «Ничего» (т. е. void
).
Вам необходимо использовать digitalRead()
, чтобы проверить текущее состояние контакта.
- avrdude ser_open() can't set com-state
- Питание светодиодной ленты - Сколько ампер?
- Улучшенное циклическое переключение цветов RGB.
- Не могу загрузить скетч в Arduino Nano
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Как управлять встроенными светодиодами Arduino Nano 33 BLE Sense?
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- Есть ли функция Adafruit для инвертирования цветов моего экрана для языка Arduino?
почему за этот вопрос проголосовали?, @Juraj
Потому что это ясный вопрос, на который можно ответить, с сообщением об ошибке и (относительно) минимальным воспроизведением @Juraj, @RubberDuck
Голосование за «полезное». и я согласен с текстом в пузырьке над кнопкой понижения голоса, @Juraj