Слишком мало аргументов для нескольких условий оператора 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);
Спасибо за это. Я удалил неуместный }, но он все равно выдает сообщение об ошибке «слишком мало аргументов»., @ajf444
@ajf444: digitalWrite()
принимает 2 аргумента (номер контакта и логическое значение) — ваши вызовы передают только один., @JRobert
Оператор digitalWrite в операторе if требует значения для записи. Похоже, вы имели в виду digitalRead, поскольку вы сравниваете результат с чем-то, а другое условие — digitalRead.
if ((digitalWrite(blueLEDPin) == HIGH) && (digitalRead(leverR) == HIGH)) {
против
if ((digitalRead(blueLEDPin) == HIGH) && (digitalRead(leverR) == HIGH)) {
Я хочу, чтобы arduino заставил синий светодиод мигать. Только когда он мигает и нажата кнопка, красный светодиод активируется. Я думаю, это означает, что мне нужен digitalWrite для blueLEDPin и digitalRead для рычагаR, @ajf444
В любом случае, digitalWrite необходимо 2 параметра: один для пина и один для значения. digitalWrite также ничего не возвращает, поэтому вы не можете проверить, равно ли оно чему-либо., @that it guy
Могу ли я настроить другой вывод Arduino в качестве входного канала, соответствующего выходу, создаваемому синим светодиодом?, @ajf444
Это ваша функция 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);}
}
@ajf444, пожалуйста, взгляните на это и дайте мне знать, если у вас возникнут вопросы., @J Duke
Более лаконичный способ записи ledStateBlue if/else будет таким: ledStateBlue = !ledStateBlue; (и аналогично для ledStateRed), @J Duke
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Пожалуйста, включите в свой вопрос полное сообщение об ошибке., @Craig
В функции 'void loop()': 24:31: ошибка: слишком мало аргументов для функции 'void digitalWrite(uint8_t, uint8_t)', @ajf444
Я получаю следующую ошибку:
testSE:22: error: expected unqualified-id before 'if'
. Пожалуйста, включите ошибку, которую вы получаете (скопируйте и вставьте ее). Перед вашимif
есть лишний}
, @Greenonline