Новая проблемка со светодиодом
- Войдите на сайт для отправки комментариев
Сб, 08/12/2012 - 23:05
/* Fading */ int ledPin = 9; void setup() { } void loop() { for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { analogWrite(ledPin, fadeValue); delay(30); } for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { analogWrite(ledPin, fadeValue); delay(30); } }
Есть стандартный пример изменения яркости светодиода Fading. Хочется регулировать с помощью пот-ра величину максимальной яркости светодиода.
/* Fading */ int ledPin = 9; int potPin = 0; int pot; void setup() { pinMode(potPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { pot = analogRead(potPin); int maxValue; maxValue = pot; for(int fadeValue = 0 ; fadeValue <= maxValue; fadeValue +=5) { analogWrite(ledPin, fadeValue); delay(30); } for(int fadeValue = maxValue ; fadeValue >= 0; fadeValue -=5) { analogWrite(ledPin, fadeValue); delay(30); } }
Код работает при неподвижном пот-ре. Но если начинаю крутить пот-сразу глюк. Как решить проблму?
Может причина в самом переменном резисторе, а не в коде? Попробуйте подключить резистор к щупам мультиметра и понаблюдайте, как изменяется его сопротивление.
Проблема именно в коде.
Первое на что стоит обрать внимание, так это то что АЦП 10-ти битный, а ШИМ 8-ми и когда вы присваиваете maxValue = pot; то maxValue может принимать значения от 0 до 1023, а можно только от 0 до 255.
Второе. Значение максимума будет актуальным только по прохождении полного цикла, то есть изменили максимум, а он изменится только после того как светодиод полностью разгорится, полностью погаснет и опять разгорится.
Поэтому делать нужно хотябы так, замените стороки с 12 по 14 на эту
А для оперативного изменения максимума нужно делать примерно так:
Спасибо. Работает. Немного изменил код. Убрал участок угасания. Светодиод доходит до указанного максимума и выключается и цикл повторяется . Как выйти из цикла при достижении максимума с возможностью опять поменять яркость в любой момент.
Яркость достигает максимума и светодиод гаснет и цикл повторяется.
Нашёл библиотеку SoftPWM. На её основе сделал код. Теперь с помощью пот-ра изменяю максимальную яркость, а другим регулирую время зажигания и затухания. Может кому и пригодится.
Спасибо maksim.