Как отследить направление движения переключателя

Fire
Offline
Зарегистрирован: 26.10.2018

Здравствуйте, помогите разобраться:

Есть переключатель, схема на рисунке, переключатель представляет собой крутилку из подрулевого управления магнитолой старого авто, что то типа энкодера. Есть желание оживить, с кнопками все получилось, а вот с этой крутилкой что то ни как.

Замыкание контактов получаю, это не сложно, а вот направление вращения получить у меня не хватает мозгов.

Вот и вопрос, как отслеживать факт вращения  влево, вправо? 

 

Nosferatu
Offline
Зарегистрирован: 04.11.2012

У вас всего шесть возможных вариантов переключения. Можно их все описать шестью условиями.

Для плюса:

Если было А, а стало В, то плюсуем.

Если было В, а стало С, то плюсуем.

Если было С, а стало А, то плюсуем .

Для минуса аналогично, но в обратную сторону.

Fire
Offline
Зарегистрирован: 26.10.2018

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("<<---<<");
  }