/* (C)2020 ООО "ЛИК", http://lic.com.ua PWM КОНТРОЛЛЕР ДЛЯ УПРАВЛЕНИЯ СВЕТОДИОДНЫМИ ЛЕНТАМИ Схема: http://lic.com.ua/article20.htm Входа для подключения выключателей: A0,A1,A2,A3 PWM-выхода для подключения силового MOSFET транзистора: 9,6,5,3 */ const int pins_in_count=4; //Входа для подключения выключателей int pins_in[pins_in_count] = {A0,A1,A2,A3}; const int pins_out_count=4; //Выхода PWM, управляющий группой света int pins_out[pins_out_count] = {9,6,5,3}; int pins_state[pins_in_count]; //Массив для хранения текщего состояния группы света: вкл/выкл int pins_pwm[pins_in_count]; //Массив для хранения текщего состояния уровня яркости группы света int pins_dir[pins_in_count]; //Массив для хранения текщего состояния направления изменения яркости int pins_old_state[pins_in_count]; //Массив для хранения предыдущего состояния группы света //Опрашиваем состояния входов на предмет обнаружения нажатия клавиши выключателя void ReadInputPins() { unsigned long PressTime = 0; int d=0; for (int i=0; i50)and(dt<200)) { //Было короткое нажатие, переключаем состояние выхода pins_state[i] = not pins_state[i]; if (pins_state[i]==0) { analogWrite(pins_out[i],0); Serial.println("LED("+String(i)+"), OFF!"); } else { if (pins_pwm[i]==0) pins_pwm[i] = 100; analogWrite(pins_out[i],int(2.55*pins_pwm[i])); Serial.println("LED("+String(i)+"), ON! PWM="+String(pins_pwm[i])); } } else { //Было длинное нажатие, изменяем уровень яркости while (d == LOW) { d = digitalRead(pins_in[i]); pins_pwm[i] += pins_dir[i]; if ((pins_pwm[i]>100)or((pins_pwm[i]<0))) { pins_dir[i] = (-1) * pins_dir[i]; pins_pwm[i] += pins_dir[i]; } analogWrite(pins_out[i],int(2.55*pins_pwm[i])); delay(10); Serial.println("LED("+String(i)+"), STATE="+String(pins_state[i])+", PWM="+String(pins_pwm[i])); } pins_dir[i] = (-1) * pins_dir[i]; } } pins_old_state[i] = d; } } void setup() { Serial.begin(9600); Serial.println("START PROGRAMM!"); //Инициализация входов к которым подключены клавиши выключателей for (int i=0;i