- Библиотеки
- Операторы
- Sketch
- Управляющие операторы
- Синтаксис
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Указатели доступа
- Битовые операторы
- Составные операторы
- Данные
- Типы данных
- Преобразование типов данных
- Область видимости переменных и квалификаторы
- Утилиты
- Цифровой ввод/вывод
- Аналоговый вход/выход
- Расширенный ввод/вывод
- Время
- Математические функции
- Тригонометрические функции
- Символы
- Случайные числа
- Биты и байты
- Внешние Прерывания
- Прерывания
- Функции передачи данных
- Функции
- Устройства
- Датчики
- Энкодер
Энкодер
Применение энкодеров с Arduino
Энкодеры часто применяются в проектах с Arduino для:
- управления меню и параметрами (замена потенциометра и кнопок);
- измерения скорости вращения двигателя;
- обратной связи в системах с шаговыми и сервоприводами;
- навигации роботов (колёсные энкодеры).
Чаще всего используются механические инкрементальные энкодеры с двумя выходами (A и B), формирующими квадратурные импульсы.
Подключение энкодера к Arduino
У стандартного механического энкодера 5 выводов:
- GND — земля;
- +VCC — питание (обычно 5 В, иногда 3.3 В);
- CLK (A) — первый выход;
- DT (B) — второй выход;
- SW — кнопка (если энкодер с нажатием).
Схема подключения (пример для Arduino Nano):
- CLK → D2 (прерывание)
- DT → D3 (прерывание)
- SW → D4 (цифровой вход)
- VCC → 5V
- GND → GND
// Подключение энкодера к Arduino
#define CLK 2 // выход A
#define DT 3 // выход B
#define SW 4 // кнопка
int counter = 0; // счётчик поворотов
int lastStateCLK; // предыдущее состояние
int currentStateCLK;
void setup() {
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
pinMode(SW, INPUT_PULLUP);
Serial.begin(9600);
lastStateCLK = digitalRead(CLK); }
void loop() {
// Считываем состояние CLK
currentStateCLK = digitalRead(CLK);
// Если изменилось — значит энкодер повернули
if (currentStateCLK != lastStateCLK) {
if (digitalRead(DT) != currentStateCLK) {
counter++; // вращение по часовой
} else {
counter--; // вращение против часовой
}
Serial.print("Позиция: ");
Serial.println(counter);
}
lastStateCLK = currentStateCLK;
// Проверяем кнопку
if (digitalRead(SW) == LOW) {
Serial.println("Нажата кнопка");
delay(200); // антидребезг }
}
Как работает скетч
- При вращении ручки энкодера генерируются импульсы на выводах CLK и DT.
- Код определяет направление вращения и изменяет переменную counter.
- В мониторе порта можно наблюдать текущую позицию.
- Кнопка (если есть) обрабатывается отдельным входом.