Слишком мало аргументов для нескольких условий оператора if
Я использую Arduino Uno. Я пытаюсь зажечь только красный светодиод, когда горит синий светодиод и нажата кнопка. Однако я продолжаю получать сообщение об ошибке, в котором указано слишком мало аргументов в моем операторе if. Я не знаю, может быть, я просто что-то упускаю из виду в своем коде.
Код выглядит следующим образом:
int redLEDPin=7;
int blueLEDPin=3;
int redLEDOn=2000;
int redLEDOff=1000;
int blueLEDOn=2000;
int blueLEDOff=1000;
int leverR=2;
void setup() {
pinMode(redLEDPin, OUTPUT);
pinMode(blueLEDPin, OUTPUT);
pinMode(leverR, INPUT);
}
void loop() {
digitalWrite(blueLEDPin, HIGH);
delay(blueLEDOn);
digitalWrite(blueLEDPin, LOW);
delay(blueLEDOff);
}
if ((digitalWrite(blueLEDPin) == HIGH) && (digitalRead(leverR) == HIGH)) {
digitalWrite(redLEDPin, HIGH);
delay(redLEDOn);
digitalWrite(redLEDPin, LOW);
delay(redLEDOff);
}
else
{
digitalWrite(redLEDPin, LOW);
}
}
@ajf444, 👍0
3 ответа
Ваш оператор if находится за пределами функции loop().
Удалите }
после delay(blueLEDOff);
Оператор digitalWrite в операторе if требует значения для записи. Похоже, вы имели в виду digitalRead, поскольку вы сравниваете результат с чем-то, а другое условие — digitalRead.
if ((digitalWrite(blueLEDPin) == HIGH) && (digitalRead(leverR) == HIGH)) {
против
if ((digitalRead(blueLEDPin) == HIGH) && (digitalRead(leverR) == HIGH)) {
Это ваша функция loop()
:
void loop() {
digitalWrite(blueLEDPin, HIGH);
delay(blueLEDOn);
digitalWrite(blueLEDPin, LOW);
delay(blueLEDOff);
}
Ваш оператор if()
находится за пределами вашего цикла. Проверьте ваши скобки. В Arduino IDE, если вы поместите курсор справа от скобки, он выделит, какая скобка ей соответствует.
Большая правка:
Чтобы мигать двумя светодиодами одновременно, нужно избавиться от задержек. Пожалуйста, прочтите об использовании функции millis(): https://learn.adafruit.com/multi-tasking-the-arduino-part-1/using-millis-for-timing
Я не знаю, как объяснить это кратко, поэтому привожу код (обратите внимание, что время включения и выключения светодиодов одинаковое — если вы хотите, чтобы они светились дольше, чем выключены, вы можете поработать над этой частью):
int redLEDPin=7;
int blueLEDPin=3;
int redLEDOn=2000; //не используется
int redLEDOff=250;
int blueLEDOn=2000;
int blueLEDOff=1000; //не используется
int leverR=2;
// следующие переменные необходимы для синхронизации и отслеживания состояния светодиода:
long previousMillisBlue = 0;
long previousMillisRed = 0;
bool ledStateBlue = LOW;
bool ledStateRed = LOW;
void setup() {
pinMode(redLEDPin, OUTPUT);
pinMode(blueLEDPin, OUTPUT);
pinMode(leverR, INPUT_PULLUP); //Я использую внутренний подтягивающий резистор
}
void loop() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillisBlue > blueLEDOn)
{
previousMillisBlue = currentMillis;
if (ledStateBlue == LOW)
{ledStateBlue = HIGH;}
else
{ledStateBlue = LOW;}
digitalWrite(blueLEDPin, ledStateBlue);
}
//так как мы отслеживаем ledStateBlue выше, мы можем ссылаться на него здесь
if(digitalRead(leverR) == HIGH && ledStateBlue)
{
if(currentMillis - previousMillisRed > redLEDOff)
{
previousMillisRed = currentMillis;
if (ledStateRed == LOW)
{ledStateRed = HIGH;}
else
{ledStateRed = LOW;}
digitalWrite(redLEDPin, ledStateRed);
}
}
else
{digitalWrite(redLEDPin, LOW);}
}
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату