ШИМ-управление, как остановить мерцание светодиода?
Необходимо управлять яркостью светодиода с помощью кнопок и потенциометра. Кнопка А: Увеличение
Кнопка B: уменьшить/уменьшить
Потенциометр: увеличение и уменьшение
Однако это должно происходить в одной цепи и результаты должны отображаться на ЖК-дисплее.
Если я сделаю это отдельно, то есть кнопки без потенциометра и наоборот, я выиграю в тот момент, когда объединим их. У меня мерцает при работе с кнопками из-за потенциометра.
Альтернативные исследования:https://www.instructables.com/id/Smooth-Potentiometer-Input/
Код ниже
#include <LiquidCrystal.h>
#include <Wire.h>
// ---------------------------------------------------------------- ------------
int LED1 = 9;
int ButtonLeft = 8;
int ButtonRight = 7;
int brightness = 0;
// ---------------------------------------------------------------- ------------
byte buttonState1 = 0;
byte lastButtonState1 = 0;
byte buttonState2 = 0;
byte lastButtonState2 = 0;
unsigned long switchMillis;
// ---------------------------------------------------------------- ------------
int potValue1 = 0;
int potValue2 = 0;
int potPin= A0;
int readValue;
int writeValue;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// ---------------------------------------------------------------- ------------
void setup() {
lcd.begin(16, 2);
pinMode (potPin, INPUT);
pinMode(LED1,OUTPUT);
pinMode(ButtonLeft,INPUT);
pinMode(ButtonRight, INPUT);
lcd.clear ();
}
// ---------------------------------------------------------------- ------------
void loop(){
if (millis() - switchMillis >= 5)
{
switchMillis = millis();
checkSwitches();
}
readValue = analogRead(potPin);
writeValue = (255./1023.) * readValue;
analogWrite(LED1, writeValue);
potValue1 = analogRead(potPin) / 10;
potValue2 = potValue1 / 1.02;
lcd.setCursor(0,0);
lcd.print("Potent=");
lcd.print(potValue1);
lcd.print("%");
delay(100);
lcd.print(" ");
delay(1);
}
void checkSwitches() {
analogWrite(LED1, brightness);
delay(10);
buttonState1 = digitalRead(ButtonLeft);
if(buttonState1 == HIGH){
brightness--;
if(brightness < 0){
brightness = 0;
}
}
buttonState2 = digitalRead(ButtonRight);
if(buttonState2 == HIGH){
brightness++;
if(brightness > 255){
brightness = 255;
}
}
lcd.setCursor (0,1);
lcd.print ("Brightness=");
lcd.print (brightness);
lcd.print (" ");
}
@Boi G, 👍0
Обсуждение1 ответ
Ваш код не имеет особого смысла.
Вы устанавливаете для светодиода два разных значения яркости, которые не имеют ничего общего друг с другом: яркость горшка и яркость кнопок. Вы регулируете светодиод с помощью переключателей только раз в 5 мс. Таким образом, светодиод будет мигать между двумя разными значениями яркости.
Что вы от него хотите? Как вы хотите управлять яркостью на основе входных данных как от потенциометра, так и от переключателей? (Какова связь между кнопками и горшком? Должен ли ввод кнопки изменять максимальное/минимальное значение потенциометра вверх и вниз? Должно ли удерживать кнопку нажатой изменять яркость на 1 значение за определенную единицу времени? Скажем, 2 увеличения/уменьшения в секунду?)
Опишите пользовательский интерфейс, которого вы хотите добиться, а затем подумайте, как это сделать в коде.
«Опишите пользовательский интерфейс, которого вы хотите достичь, а затем подумайте, как бы вы это сделали в коде». +1., @VE7JRO
Привет, Дункан, мерцание возникает только при добавлении горшка, если я запустил код без горшка, все работает соответственно. Это мой второй код, я мог бы представить вам первый, но проблема все равно возникает. Даже если я удалил раздел switchMillis в коде. Еще до того, как мне сказали, Arduino не мог понять, что делать, потому что у меня не было состояний кнопок, но я добавил их, но безуспешно. Суть в том, что мне нужно управлять яркостью светодиода с помощью потенциометра и кнопок, каждую из которых я могу делать по отдельности, но я не знаю, как сделать все это в одном и том же коде., @Boi G
@BoiG, можешь ли ты описать нам, как именно взаимодействуют кнопки и горшок? Если я уменьшу банк, а затем воспользуюсь кнопкой увеличения, что *должно* произойти? Если я потом увеличу банк? Что, если я нажимаю кнопку на максимуме, а затем поднимаю горшок? Потом отступить? Непонятно, чего вы на самом деле пытаетесь достичь., @RubberDuck
Вы пытаетесь что-то построить и не имеете четкого представления о том, что это такое. Вам необходимо четко и детально определить, что вы хотите сделать, а затем продумать, как добиться этого в коде. Мы не сможем вам помочь, если вы не будете четко представлять себе, как вы хотите, чтобы вела себя ваша программа., @Duncan C
- Как регулировать светодиод на плате?
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Светодиод с кнопочным управлением Arduino со сборкой AVR
- Светодиод Arduino PWM с замиранием в сборке
- Ускорение двигателя постоянного тока с помощью ШИМ
Это похоже на то, как если бы два игрока играли в одиночную игру, оба нажимали кнопки на одном и том же контроллере. Конечно, игровой персонаж делает странные движения. PS, я думаю, здесь более уместно было бы использовать поворотный энкодер., @Gerben