Проблема Fader OOP
Этот код работает, и он может исчезать три светодиода без каких-либо проблем, очевидно, вы даже можете добавить их больше : )
// Определение контактов
const int button1 = 13;
const int button2 = 12;
const int button3 = 11;
const int redled = 2;
const int greenled = 3;
const int blueled = 4;
// Timing States
unsigned long ElapsedLoopTime;
unsigned long Now;
class LED
{
// Параметры
unsigned long ParamStartFeed = 300;
unsigned long ParamDebounce = 50;
float ParamMinLux = 25.5;
float ParamMaxLux = 255.0;
float ParamFeedRamp;
// Контакты
int led;
int buttonpin;
// Переменные состояния
bool INDownFront;
bool LastINValue;
bool LedStatus;
float Lux = 127.0;
bool Direction = true;
unsigned long LastPressed;
bool INStatus;
bool Pressed;
float Delta;
public:
void Initialize(int pin, int ledpin)
{
led = ledpin;
buttonpin = pin;
pinMode(led, OUTPUT);
pinMode(buttonpin, INPUT);
LastINValue = digitalRead(buttonpin);
LastPressed = millis();
ElapsedLoopTime = millis();
}
void Execute(float ParamFeedRamp)
{
INStatus = digitalRead(buttonpin);
INDownFront = LastINValue && !INStatus;
Pressed = ((Now - LastPressed) > ParamStartFeed) && INStatus;
if (INDownFront && (Now - LastPressed < ParamStartFeed) && (Now - LastPressed > ParamDebounce))
{
LedStatus = !LedStatus;
}
if (!INStatus) LastPressed = Now;
LastINValue = INStatus;
if (Pressed && LedStatus)
{
Delta = (ParamMaxLux - ParamMinLux) * ElapsedLoopTime / ParamFeedRamp;
if (Direction)
{
Lux += Delta;
}
else
{
Lux -= Delta;
}
if (Lux > 255) {
Lux = 255;
Direction = false;
}
if (Lux < 25) {
Lux = 25;
Direction = true;
}
}
analogWrite(led, Lux * LedStatus);
}
};
LED ledblue;
LED ledgreen;
LED ledred;
void setup()
{
Serial.begin(115200);
ledred.Initialize(button3, redled);
ledgreen.Initialize(button2, greenled);
ledblue.Initialize(button1, blueled);
}
void loop()
{
Now = millis();
ledred.Execute(3000); // 3000мс
ledgreen.Execute(3000); // 3000мс
ledblue.Execute(3000); // 3000мс
ElapsedLoopTime = millis() - Now;
}
@alessandromrc, 👍3
Обсуждение1 ответ
Я действительно не знаю о
// Pins
byte led;
byte buttonpin;
но, может быть, вы можете попробовать
// Контакты
int led;
int buttonpin;
Я изменил их на целые числа, но скорость работы программы не изменилась, но я видел, что если я изменю положение Now и ElaspedLoopTime в основном цикле, он станет быстрее, но не полностью работает, @alessandromrc
Я не согласен с тем, что это не ответ. Это похоже на ответ. Просто так получилось, что я не решил эту проблему., @Nick Gammon
@NickGammon Я все исправил прямо сейчас, поэтому я изменил название на [Решаемая], это мой первый раз на форуме, так что я действительно не знаю, могу ли я закрыть вопрос или нет, @alessandromrc
@alessandromrc Например, см. https://meta.stackexchange.com/questions/116101/is-it-ok-to-add-solved-to-the-title-of-a-question, @Dave Newton
@DaveNewton Спасибо!, @alessandromrc
У меня есть учебник, похожий на этот: https://www.instructables.com/How-to-Create-an-Arduino-Library/, @Austin
- Как убедиться, что импульсы ШИМ Arduino сдвинуты по фазе?
- Светодиод Arduino PWM с замиранием в сборке
- Отрегулируйте расчет времени после изменения частоты Timer0
- AnalogWrite никогда не выводит ненулевое напряжение
- «Вручную» генерация ШИМ-сигнала
- Светодиодная панель ESP32 с регулируемой яркостью и MOSFET
- Затемнение этого светодиода ~ 30 В с помощью ШИМ, что мне нужно?
- Кнопка переключения переключает между операторами обращения с разблокированием кнопки
Комментарии не предназначены для расширенного обсуждения; этот разговор был [перенесен в chat](https://chat.stackexchange.com/rooms/126307/discussion-on-question-by-alessandromrc-fader-oop-problem)., @Majenko