Прошу помощи как новичок, который ранее максимум собирал какие-то простые готовые гайверовские проекты
Суть такова, есть двухканальный led драйвер с возможностью регулировки яркости и цветовой температуры с пульта 433 все бы ничего, но он имеет ужасный свист на 7кгц, были попытки это исправить физически, эффекта не дало, был проведен частичный реверс инжиниринг и выяснилось, что схема там такая - приемник 433-> -мк с затертой маркировкой → выход шима на управляющие ноги двух драйверов, в связи с простотой схемы была предпринята попытка заменить родной контроллер на arduino nano с разогнанным шимом через какой-то регистр до 30кгц +, что гарантированно увело бы писк и свист за слышимый диапазон, сама замена прошла успешно, но встал вопрос восстановления функционала пульта, т.е. бинд кнопок и их функий, сам процесс идет, но встала проблема, родной пульт (а заменить его не просто, тк обычный приемник на 433 его не ловит, в пульте какой-то кварц на ~13мгц) имеет одну упоротую особенность, за одно нажатие он отсылает 2 одинаковых кода, то есть одно нажатие код воспринимает как два, попытки отфильтровать это добавив задержку не увенчались успехом тк управление становилось тормознутым либо был режим стробоскопа, нужно каким-то образом заставить 2 последних одинаковых полученных значения воспринимать как одно, но я без понятия как это сделать с чем и прошу помощи
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
int pwm_y = 0;
int pwm_w = 0;
int pwm_y_last = 255;
int pwm_w_last = 255;
float k_temp[6]={0.0,0.1,0.25,0.5,0.75,1.0};
int i_y = 5;
int i_w = 5;
int max_bright = 255;
void setup() {
TCCR2B = 0b00000001;
mySwitch.enableReceive(0); // Указываем пин для приема сигнала rc-switch
pinMode(3, OUTPUT); // Пины шима
pinMode(11, OUTPUT);
Serial.begin(9600); //
}
void loop() {
if (mySwitch.available()) {
long value = mySwitch.getReceivedValue();
Serial.print("Received value: ");
Serial.println(value); // Выводим принимаемые значения в монитор порта
if (pwm_y == 0 && pwm_w == 0) //Проверяем, что панель выключена
{
if (value == 6127871) // Кнопка Вкл
{
pwm_y = pwm_y_last;
pwm_w = pwm_w_last;
}
}
else //Если панель уже работает
{
switch (value) {
case 6127617: // Кнопка Выкл
if (pwm_y != 0 || pwm_w != 0)
{
pwm_y_last = pwm_y;
pwm_w_last = pwm_w;
}
pwm_y = 0;
pwm_w = 0;
break;
case 6127616: // Кнопка Вверх яркость
max_bright = min(max_bright+255/10,255);
pwm_y = max_bright*k_temp[i_y];
pwm_w = max_bright*k_temp[i_w];
break;
case 6127629: //Кнопка Вниз яркость
max_bright = max(max_bright-255/10,25);
pwm_y = max_bright*k_temp[i_y];
pwm_w = max_bright*k_temp[i_w];
break;
case 6127625: // Кнопка Влево теплее
if (i_w == 5 && i_y < 5)
{
i_y += 1; }
else if (i_w <= 5 && i_y == 5 && i_w - 1 >= 0)
{
i_w -= 1; }
pwm_y = max_bright*k_temp[i_y];
pwm_w = max_bright*k_temp[i_w];
break;
case 6127637: //Кнопка Вправо холоднее
if (i_y == 5 && i_w < 5)
{
i_w += 1; }
else if (i_y <= 5 && i_w == 5 && i_y - 1 >= 0)
{
i_y -= 1; }
pwm_y = max_bright*k_temp[i_y];
pwm_w = max_bright*k_temp[i_w];
break;
/*case 6127622: // Кнопка Луна пресет заменить
pwm_w -= 36;
pwm_w = max(pwm_w, 255); //
break;
case 6127626: // Кнопка Солнце пресет заменить
pwm_w -= 36;
pwm_w = max(pwm_w, 255); //
break;
case 6127638: // Кнопка Ct- только холодный
pwm_y = 0;
pwm_w = 255; //
break;
case 6127636: // Кнопка Ct+ только теплый
pwm_y = 255;
pwm_w = 0; // */
}
}
mySwitch.resetAvailable();
}
analogWrite(11, pwm_y); // Управляем ШИМ-сигналом для теплого
analogWrite(3, pwm_w); // Управляем ШИМ-сигналом для холодного
}