Как отследить направление движения переключателя
- Войдите на сайт для отправки комментариев
Ср, 01/04/2020 - 01:06
Здравствуйте, помогите разобраться:
Есть переключатель, схема на рисунке, переключатель представляет собой крутилку из подрулевого управления магнитолой старого авто, что то типа энкодера. Есть желание оживить, с кнопками все получилось, а вот с этой крутилкой что то ни как.
Замыкание контактов получаю, это не сложно, а вот направление вращения получить у меня не хватает мозгов.
Вот и вопрос, как отслеживать факт вращения влево, вправо?

У вас всего шесть возможных вариантов переключения. Можно их все описать шестью условиями.
Для плюса:
Если было А, а стало В, то плюсуем.
Если было В, а стало С, то плюсуем.
Если было С, а стало А, то плюсуем .
Для минуса аналогично, но в обратную сторону.
Nosferatu, спасибо, в принципе все получилось:
// Получаею положение переключателя if (Ellow <= middle + delta && Ellow >= middle - delta) { // A if (millis() - timerC > del / 3) { timerC = millis(); if (Ellow <= middle + delta && Ellow >= middle - delta) { portA = true; A = true; // Serial.println("ellow>>>"); } } } else portA = false; if (Green <= middle + delta && Green >= middle - delta) { // B if (millis() - timerC > del / 3) { timerC = millis(); if (Green <= middle + delta && Green >= middle - delta) { portB = true; B = true; // Serial.println("green>>>"); } } } else portB = false; if (Blue <= middle + delta && Blue >= middle - delta) { // C if (millis() - timerC > del / 3) { timerC = millis(); if (Blue <= middle + delta && Blue >= middle - delta) { portC = true; C = true; // Serial.println("blue>>>"); } } } else portC = false; // Получаю направление вращения if (millis() - timerD > del / 5) { timerD = millis(); if (!portA && A && portB) { //Serial.println("A>>>"); riht = true; A = false; } if (!portB && B && portC) { //Serial.println("B>>>"); riht = true; B = false; } if (!portC && C && portA) { //Serial.println("C>>>"); riht = true; C = false; } if (!portA && A && portC) { //Serial.println("A<<<"); left = true; A = false; } if (!portB && B && portA) { //Serial.println("B<<<"); left = true; B = false; } if (!portC && C && portB) { //Serial.println("C<<<"); left = true; C = false; } } else { riht = false; left = false; } if (riht){ Serial.println(">>+++>>"); } if (left){ Serial.println("<<---<<"); }