Проблема 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;
}

, 👍3

Обсуждение

Комментарии не предназначены для расширенного обсуждения; этот разговор был [перенесен в chat](https://chat.stackexchange.com/rooms/126307/discussion-on-question-by-alessandromrc-fader-oop-problem)., @Majenko


1 ответ


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