Светодиодный диммер не гаснет
Я пытаюсь заставить светодиод перейти от нулевой яркости к максимальной и обратно по циклу, и я столкнулся с проблемой, которую не могу решить. Светодиод будет плавно переходить на максимальную яркость, как и должно быть, но затем он упадет до нуля и загорится снова... Почему?
int blue_led=10;
void setup() {
pinMode(blue_led,OUTPUT);
}
void loop() {
int voltage=0;
for(int i=0;i<=255;i+1){
analogWrite(blue_led,voltage);
voltage=voltage+1;
delay(8);
}
int volts=255;
for(int i=0;i<=255;i+1){
analogWrite(blue_led,volts);
volts=volts-1;
delay(8);
}
}
1 ответ
Лучший ответ:
Ваш цикл for() должен заканчиваться либо на "i=i+1", либо на "i++", либо на "i +=1". В вашем коде вы просто говорите i+1, что на самом деле не влияет на «i». Так что первый цикл продолжается бесконечно, а переменная «напряжение» (которое не должно превышать 255) продолжает уходить в «недопустимый» диапазон. Arduino, вероятно, преобразует недопустимые значения в 0. В конце концов, поскольку «напряжение» — это всего лишь 2-байтовое целое число, оно, наконец, снова станет 0. Это произойдет за 65536 * 8 мс, что должно составлять около 8,7 минут. Но я не думаю, что это то, чего ты хочешь. ;-)
- Мигните светодиодом 5 раз с помощью цикла for
- Как повторить другое действие внутри цикла?
- Сделать световые вспышки, пока шаговый двигатель постоянно движется.
- Arduino включение/затухание 5 светодиодов, схема действия
- Переменная, которая содержит введенные пользователем данные, не очищается сама по себе, поэтому программа работает только один раз.
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Остановить мигание светодиодов
i
можно было бы использовать вместоvoltage
иvolts
, не так ли? Я имею в виду, максимальное напряжение 255?, @brasofiloКонечно, можно использовать «i», потому что 255 действительно является максимально допустимым значением для контактов ШИМ. Но опять же, «i» в коде OP никогда не превысит «0», пока цикл for() не будет исправлен. Вот полезная статья об этом... https://www.allaboutcircuits.com/projects/using-the-arduinos-analog-io/, @Randy
Я понимаю. Я только что внес изменения, и все работает отлично! Спасибо!, @ThisUsernameHasBeenTaken
Спасибо за объяснение, Рэнди. @ThisUsernameHasBeenTaken, если ответ решил вашу проблему, вы можете пометить его как принятый (см. [справочный центр](https://arduino.stackexchange.com/help/someone-answers)), @brasofilo
Только что сделал :) Спасибо, @ThisUsernameHasBeenTaken
Также обратите внимание, что использование задержки, как правило, является плохой идеей. (Ваш код зависает до тех пор, пока не истечет время задержки, поэтому ваш Arduino не сможет делать что-либо еще во время этой паузы.) Вы должны привыкнуть к написанию кода, который записывает текущее значение
millis()
и ожидает, пока оно увеличится до желаемое конечное значение. Поищите в Google «Arduino мигает без задержки» для объяснения этого., @Duncan C