Остановить переменные при переходе через диапазон значений (Arduino C ++ и джойстик) - PullRequest
0 голосов
/ 26 июня 2019

Я управляю ШИМ двумя блоками CC-PS, каждый из которых управляет одним светодиодом (один теплый CCT, один холодный CCT) в диапазоне от 16 до 240, используя джойстик в качестве пользовательского интерфейса.Когда свет включается или выключается, а затем снова включается, значение ШИМ по умолчанию для обоих равно 128. Генератором ШИМ является Adafruit Metro Mini (Arduino), но это скорее проблема логики кода.

Что работает с кодом ниже, так это смешивание между теплым (слева) и холодным (справа) или между ярким (вверх) и темным (вниз), если джойстик наклонен строго влево/ вправо (х) или строго вверх / вниз (у).В этих двух случаях значения ШИМ не переворачиваются согласно операторам if, даже если джойстик остается наклоненным.Он действует как «+» - переключатель, если бы он был механически ограничен.Пока все хорошо.

Однако, если кто-то, например, наклонил джойстик влево для слегка более теплого света (ШИМ 176/80), а затем хочет от него ярче и наклонил джойстик вверх (и удерживает егоэто наклонено), значения ШИМ не «останавливаются» на 240/144 (они должны).То же самое относится и к любому другому квадранту.

Как бы мне пришлось усилить / изменить операторы if, чтобы "остановить" значения ШИМ от увеличения / уменьшения по желанию?

Я надеюсь, что ШИМПриведенная ниже матрица значений визуализирует проблему лучше, чем я могу ее объяснить в устной форме.

void changeBrightness()
{
  if (lightOn)
  {
    readJoystick();
    if (joyX < triggerLow) // Joystick tilted left
    {
      if ((leftPWM < 240) || (rightPWM > 16))
      {
        leftPWM += deltaPWM;
        rightPWM -= deltaPWM;
        setPWM(leftPWM, rightPWM);
      }
    }
    if (joyX > triggerHigh) // Joystick tilted right
    {
      if ((leftPWM > 16) || (rightPWM < 240))
      {
        leftPWM -= deltaPWM;
        rightPWM += deltaPWM;
        setPWM(leftPWM, rightPWM);
      }
    }
    if (joyY > triggerHigh) // Joystick tilted up
    {
      if ((leftPWM < 240) || (rightPWM < 240))
      {

        leftPWM += deltaPWM;
        rightPWM += deltaPWM;
        setPWM(leftPWM, rightPWM);
      }
    }
    if (joyY < triggerLow) // Joystick tilted down
    {
      if ((leftPWM > 16) || (rightPWM > 16))
      {
        leftPWM -= deltaPWM;
        rightPWM -= deltaPWM;
        setPWM(leftPWM, rightPWM);
      }
    }
  }
  else
  {
    setPWM(0, 0); // Turn the light off
  }
}

PWM value matrix

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...