Светодиод не включается со следующим кодом
Светодиод не включается со следующим кодом. Перепробовал несколько светодиодов и дважды проверил проводку. В чем дело? Использование uno.
int ldr = A1;
int ldrVal = ldr;
int led = 6;
int lvalue = 900;
void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
delay(1000);
}
void loop() {
Serial.println(analogRead(ldrVal));
if (ldrVal > lvalue) {
digitalWrite(led, HIGH);
}
delay (50);
if (ldrVal < lvalue)
{
digitalWrite(led, LOW);
}
delay (1000);
}
@Ryan Thomas, 👍-1
Обсуждение2 ответа
Помимо неправильных отступов и неправильного именования переменных, из-за которых ваш код не только выглядит некрасиво, но и беспорядочно и плохо читабельно, у вас есть множество проблем в нескольких строках кода.
Одна из проблем заключается в том, что переменная lvalue
никогда не устанавливается, то есть ее значение остается 900
независимо от того, какое значение вы читаете с помощью analogRead()
>.
Вторая ошибка: ваш ldrVal
, который должен обозначать границу между горит и выключенным, имеет значение A1
, который, в свою очередь, является определением макроса для допустимого целого числа, но очень маленького значения (менее 20
).
Другими словами, код, который должен принимать решение о включении/выключении светодиода, постоянно сравнивает 900 и 20 без возможности изменения этих значений: неудивительно, что светодиод не меняет состояние, вы согласны?
Кстати, 50 мс
— это очень короткий временной интервал: если вы хотите, чтобы светодиод включался, а затем выключался, увеличьте задержку до 200 или более.
Ваш код неверен. analogRead(ldrVal)
не считывает значение аналогового контакта и не сохраняет его в ldrVal, это функция, результатом которой является значение аналогового контакта.
Попробуйте это изменение:
void loop() {
int newValue = analogRead(ldrVal);
Serial.println(newValue);
if (newValue > lvalue) { //Проверяем newValue, а не ldrVal
digitalWrite(led, HIGH);
}
delay (50);
if (newValue < lvalue)
{
digitalWrite(led, LOW);
}
delay (1000);
}
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Управление цифровой адресной светодиодной лентой RGB 12 В с помощью Arduino
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Мигните светодиодом 5 раз с помощью цикла for
Начните с использования хороших имен для переменных. Используйте термин «контакт» в названии переменной, которая является номером контакта. Например,ledPin и ldrPin. Не путайте значение датчика с номером контакта. Уровень, при котором включается светодиод, может называться «triggerLevel» или «switchLevel» или как-то еще. Не используйте два оператора в одной строке (например, Serial.print и AnalogRead). Используйте один и тот же стиль для текста везде. Используйте отступы текста таким же образом., @Jot
Это неверно: int ldrVal = ldr; и это: Serial.println(analogRead(ldrVal)); В состав IDE входит пример эскиза (AnalogInput.ino), который станет отличной отправной точкой., @VE7JRO