Эмулятор энкодера

Нет ответов
Avinsis
Offline
Зарегистрирован: 08.08.2018
Прошу помощи с написанием скетча для данной приблуды.
Гравировальный станок MDX650. Сдох валкодер. Стоял 100 щелчков на оборот.(как я понял спец заказ производителя был, ибо максимум видел на 48).
Временно поставил на 24 щелчка, но работа стала просто адом, колесо приходится крутить как сумашедший.
Ничего проще не придумал, как купить на алике маховичек на 5 вольт.
Фотку прилагаю. На нем 4 пина. +5 GND A B
Вот такого плана стоит валкодер в гравере.
Помогите накидать скетч, что бы это все работало.
Подключил маховик к ардуинке, загрузил этот скетч:


int pin_DT = 2;   // пин 2 подключаем к DT енкодера
int pin_CLK = 3;         // пин 3 подключаем к CLK енкодера
int pos_encoder = 0; // Первоначальная позиция енкодера равна 0
int Last;                       // Тут всегда будет лежать предыдущие значение положения енкодера
int DT;
boolean left;
void setup() {
   pinMode (pin_DT,INPUT);
   pinMode (pin_CLK,INPUT);
   Last = digitalRead(pin_DT); // Считываем значение на выходе DT и запоминаем его
   Serial.begin (9600);
}
void loop() {
   DT = digitalRead(pin_DT);
   if (DT != Last){ // Сравниваем фактическое положение с предыдущим, если они не равны то енкодер изменил положение
         if (digitalRead(pin_CLK) != DT) {  // Если значение с pin_CLK не равно значению с pin_DT, то значит вращение было НАПРАВО ->
           pos_encoder++;
           left = false;
         } else { // Если значение с pin_CLK  равно значению с pin_DT, то значит вращение было НАЛЕВО <-
           left = true;
           pos_encoder--;
         }
         Serial.print ("Napravlenie vrasheniya: ");
         if (!left){
           Serial.println("NAPRAVO ->");
         }else{
           Serial.println("NALEVO  <-");
         }
         Serial.print("Polozhenie: ");  
         Serial.println(pos_encoder);
   }
   Last = DT;
}

 

При счете врет в 2 раза, т.е. за один оборот насчитывает 200. Пробовал вращать очень быстро в обе стороны, не ошибается.