Оптический энкодер

John2015
Offline
Зарегистрирован: 02.02.2016

Добрый вечер уважаемые форумчане!

Подскажите пожалуйста как можно реализовать программу для оптического энкодера (1000) .

Ниже приведённый код счётчик работает хорошо 20000Гц считает корректно.

На 2 пин ставишь он прибавляет на 3 пин вычитает.

Как сделать чтобы была зависимость направления вращения то есть крутим по часовой он прибавляет , а против часовой вычитает  и чтобы с такой же частотой работал?



 #define LENC  2 
 
   #define LENC2  3 
 
 unsigned long  encoder0Pos = 0;
 
 void setup() {
 
  
   
  
   pinMode(LENC, INPUT);  
   digitalWrite(LENC, HIGH);      
   attachInterrupt(0, doEncoderLW, CHANGE);  
   
   
    pinMode(LENC2, INPUT);  
   digitalWrite(LENC2, HIGH);      
   attachInterrupt(1, doEncoderLW2, CHANGE); 
   
    Serial.begin(112500);
 }
 
 void loop() {
   
  
   Serial.println(encoder0Pos);
 }
 
 
 void doEncoderLW() {
   
   if (digitalRead(LENC) == HIGH) {
     encoder0Pos++;
   }
 
 }
 
 void doEncoderLW2() {
   
   if (digitalRead(LENC2) == HIGH) {
     encoder0Pos--;
   }
 
 }
 

А в этом коде зависимость направления уже реализована но максимум только до 300Гц патом начинаются глюки  .

#define encoder0PinA  2  
#define encoder0PinB  3  
byte bytes[1] ;   

void setup()   
{     
  pinMode(encoder0PinA, INPUT);   
  digitalWrite(encoder0PinA, HIGH);      
  pinMode(encoder0PinB, INPUT);   
  digitalWrite(encoder0PinB, HIGH);   

  attachInterrupt(0, doEncoderA, FALLING);  
  attachInterrupt(1, doEncoderB, FALLING);  
  Serial.begin (115200);  
}   

void loop()  
{    
   
}  


void doEncoderA()  
{  
  if(digitalRead(encoder0PinB)==HIGH){bytes[0]=24;}else{bytes[0]=15;}   
  Serial.write( bytes,1);  
}    

  
void doEncoderB()  
{  
    if(digitalRead(encoder0PinA)==HIGH){bytes[0]=15;}else{bytes[0]=24;}  
    Serial.write( bytes,1);     
}  

 

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

потестируй эту библиотеку с параметром

#define ENCODER_OPTIMIZE_INTERRUPTS

http://www.pjrc.com/teensy/td_libs_Encoder.html

John2015
Offline
Зарегистрирован: 02.02.2016

Спасибо

Оказалась ещё когда в Serial порт выводишь некорректно работает пока на lсd не подключил