Нужно же было писать в какой функции Вы хотели вставить switch. Я то подумал, что Вы предлагаете в прерывании его вставить. В главном цикле loop этот кусок кода всего лишь демонстрация, он потом выбрасывается от туда
Поэтому в нормальной программе если используется глобальная переменная как enc_state и в обработчике, и в основном теле программы, то код, который изменяет значение переменной в основной части лупа (обнуляет) должен быть закрыт DISABLE_INT() / ENABLE_INT() в противном случае даже в такой простой программе, все может легко сбиваться. То, что работает - подозреваю дело времени.
Так для этого есть специальный тип переменных volatile. Про swich вообще жесть, Вы похоже не в курсе как он работает и стоит ли его применять в этом случие. Прежде чем судить о правильности кода, лучше почитайте основы програмирования
if (comb == 7 && lastcomb == 3 && btn_press) //Если было отпускание кнопки, то проверяем ее предыдущее состояние
{
if (millis() - timer > btn_long_push) // проверяем сколько прошло миллисекунд
{
enc_state=4; // было длинное нажатие
} else {
enc_state=3; // было нажатие
}
btn_press=0; //обнулить статус кнопки
}
Можно так же добавить обработку очень длинных нажатий
Я всего одним энкодером выбираю нужный мне режим светильника, регулирую яркость, регулирую температуру цвета и еще длинным нажатием могу выключить светильник. На потенциометре сможете это все сделать?
Если в мышь установить потенциометр вместо энкодера, то он умрет через 1 неделю интенсивного использования. Для исключения дребезга контактов программно нужна задержка и немного дополнительного кода. И это все равно не избавит от ошибок. Слишком Вы упрощаете. Если посмотреть на библиотеку analogRead повнимательней, да еще добавить обработку всех считанных показаний потенциометра, то быстрее не получится. Тем более при каждом чтении на АЦП программно выдерживается пауза, для того что бы входной конденсатор разрядился
Сейчас догадываюсь почему так получилось.
Я соединил одинаковые по цвету провода. черный-черный, коричневый-коричневый
Теперь смотрим на окна гостиной и видим, что выводы у рольставней правый и левый, а это означает, что у них при таком подключении будет вращение в разные стороны. Я когда реле подключал столкнулся с этой делемой.
Теперь Вы можете последовать моему опыту и подключить рольставни через реле
Каким образом? Проводка под напряжением только в момент поднятия и опускания.
Да и нужны они мне только для комфортного сна, так как так их можно автоматичеки открывать и закрывать по будильнику. В Москве летом в 4 утра уже светло
Еще решением может быть отключением прерывания и последующим включением после полной обработки. Например так:
ISR (PCINT1_vect) //Обработчик прерывания от пинов A1, A2, A3
{
uint8_t comb = bitRead(PINC, 3) << 2 | bitRead( PINC, 2)<<1 | bitRead(PINC, 1);
PCICR = 0b00000000; // PCICR |= (1<<PCIE1); Выключить прерывание PCINT1
INTstate=1;
}
Нужно же было писать в какой функции Вы хотели вставить switch. Я то подумал, что Вы предлагаете в прерывании его вставить. В главном цикле loop этот кусок кода всего лишь демонстрация, он потом выбрасывается от туда
Так для этого есть специальный тип переменных volatile. Про swich вообще жесть, Вы похоже не в курсе как он работает и стоит ли его применять в этом случие. Прежде чем судить о правильности кода, лучше почитайте основы програмирования
У меня в прерывании обрабатывается вот так:
Можно так же добавить обработку очень длинных нажатий
Все подвержено износу. Но вот колесики на мышках годами живут, а там инкрементальный энкодер
А Вы сначала сравните мой код с гайверовским, а потом напишите результат. Я проверял его код, работает крайне нестабильно
Я всего одним энкодером выбираю нужный мне режим светильника, регулирую яркость, регулирую температуру цвета и еще длинным нажатием могу выключить светильник. На потенциометре сможете это все сделать?
На видео настольная лампа электронщика с энкодером. В течении 1 недели смонтирую видео про него и выложу
Если в мышь установить потенциометр вместо энкодера, то он умрет через 1 неделю интенсивного использования.
Для исключения дребезга контактов программно нужна задержка и немного дополнительного кода. И это все равно не избавит от ошибок.
Слишком Вы упрощаете. Если посмотреть на библиотеку analogRead повнимательней, да еще добавить обработку всех считанных показаний потенциометра, то быстрее не получится. Тем более при каждом чтении на АЦП программно выдерживается пауза, для того что бы входной конденсатор разрядился
Сам сделал. Кольцо ws2812 на 45 светодиодов
Подключил через Tuya
Я соединил одинаковые по цвету провода. черный-черный, коричневый-коричневый
Теперь смотрим на окна гостиной и видим, что выводы у рольставней правый и левый, а это означает, что у них при таком подключении будет вращение в разные стороны. Я когда реле подключал столкнулся с этой делемой.
Теперь Вы можете последовать моему опыту и подключить рольставни через реле
Да и нужны они мне только для комфортного сна, так как так их можно автоматичеки открывать и закрывать по будильнику. В Москве летом в 4 утра уже светло
Только ценник в несколько раз выше
А раскачивание полученного маятника не учитываете? Он же сразу не может стабилизироваться.
Вот доказательства из видео