Здравствуйте.
Подключил энкодер к ардуино, попробовал библиотеку
Button.h все работает.
Хочу энкодером заменить 2 кнопки громкости на навигаторе. Кнопки замыкаются на землю.
Если я правильно понял, необходимо чтобы на пинах ардуино был низкий уровень при вращении энкодера.
К примеру, при вращении влево pinMode(6, OUTPUT) был низкий уровень, вправо pinMode(7, OUTPUT) низкий уровень.
Помогите с примером скетча.
Попробовал со светодиодом, работает
► Показать
#include <TimerOne.h>
#include <Button.h>
Button encoderA (2, 4); // сигнал A
Button encoderB (8, 4); // сигнал B
Button encoderButton(10, 40); // кнопка
long pos=0; // пооложение энкодера
void setup() {
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
Serial.begin(9600); // инициализируем порт, скорость 9600
Timer1.initialize(250); // инициализация таймера 1, период 250 мкс
Timer1.attachInterrupt(timerInterrupt, 250); // задаем обработчик прерываний
}
void loop() {
// сброс положения
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
if( encoderButton.flagClick == true ) {
encoderButton.flagClick= false;
pos= 0;
}
Serial.println(pos); // вывод положения
}
// обработчик прерывания 250 мкс
void timerInterrupt() {
encoderA.filterAvarage(); // вызов метода фильтрации
encoderB.filterAvarage(); // вызов метода фильтрации
encoderButton.filterAvarage(); // вызов метода фильтрации
// обработка сигналов энкодера
if( encoderA.flagClick == true ) {
encoderA.flagClick= false;
if( encoderB.flagPress == true) {
// против часовой стрелки
pos--;
digitalWrite(6, LOW);
}
else {
// по часовой стрелке
pos++;
digitalWrite(7, LOW);
}
}
}