Olá, estou com o seguinte problema:
Estou usando um encoder optico e um servo motor, estão funcionando normalmente, porém quando giro “rapidamente” (nem chega a ser tão rapido) o motor começa a ter comportamentos estranhos.
O código:
Bom, eu nunca usei a lib Servo.h, portanto não sei se tem algum erro de sintaxe no seu programa, mas provavelmente você está tendo problemas com frequência pois o Serial.print é uma função bastante lenta...
tenta usar o Serial.print apenas no final da função, faça as contas e veja se o encoder perdeu alguma coisa.
Tente antes este código, pois como já disseram a função serial.print é muito lenta e de certeza que o faz falhar pulsos do encoder.
E não percebo porque declara a variavel dentro do interrupt, assim está sempre a colocar a variavel a zero.
Testei sem usar o Serial.println() e o servo motor funcionou normal, talvez eu não tenha sido bem claro, meu problema não era ler o encoder, o problema era que quando lia o encoder os motores tinham comportamento estranho, aleatórios.
Senso, usando o static junto da variável na função void encoder () eu declaro ao programa que aquela variável não será apagada da memória quando sair da função e portanto seu valor não se alterará e assim não ira reiniciar com zero, o que não necessariamente acontece quando se cria uma variável viu Senso, a menos que ela seja global, variáveis globais quando criadas sem inicialização ficam com o valor zero, variáveis locais não necessariamente começar com o valor zero.
Por isso declarei a variável dentro da função, para que somente ela a use, e mesmo assim não perco o valor dela a cada chamada da função.
Obrigado pelas respostas e ainda consegui dar uma dica. Que bom =)