Подключение оптического энкодера (Quatro-модуль)

В наше время оптические энкодеры широко используются во многих областях электроники и робототехники. Они применяются в устройствах для определения положения вала двигателя, системах управления скоростью, принтерах, станках с ЧПУ и т.д.
Вот и мы научим наш контроллер работать с оптическим датчиком положения вала двигателя, что может позволить реализовать больше интересных и практичных электронных и робототехнических устройств.
Для начала соберем схему и посмотрим, как же работает этот датчик.

#define DIG 3
#define ANALOG A2
int dig = 0;

void setup() {
  pinMode(DIG, INPUT);
  pinMode(ANALOG, INPUT);
  Serial.begin(9600);
}

void loop() {
  dig = digitalRead(DIG);
  Serial.print("A:");
  Serial.print(analogRead(ANALOG));
  Serial.print(",  D:");
  Serial.println(dig);
  delay(100);
}

Теперь по вращаем черно-белый диск и посмотрим как меняются значения в окне «Монитор порта».
Мы видим что на черном поле аналоговый канал стремятся к цифре 1023, при этом цифровой к нулю. А на белом поле аналоговый канал стремится к нулю, а цифровой к единице.
По сути этот датчик работает, как, ранее рассмотренный, датчик линии TCRT5000. Но благодаря узкой направленности длины волны датчика, он позволяет засекать черно-белые границы на больших скоростях, что позволит нам сделать ваше устройство наиболее точным и практичным.
Разобравшись в принципе работы оптического энкодера, мы обучим светодиодный модуль загораться на белом поле и затухать на черном.

#define ENCODER_PIN 3
#define LED_PIN 10
int state = 0; // переменная для чтения состояния энкодера

void setup() {
pinMode(ENCODER_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
}

void loop() {
state=digitalRead(ENCODER_PIN);
if (state == HIGH) { //Если выход энкодера в высоком логическом состоянии
digitalWrite(LED_PIN, HIGH); //включаем светодиод
}
else {
digitalWrite(LED_PIN, LOW);
}
}

Тут мы можем увидеть, как пульсирует светодиод в зависимости от скорости вращения черно-белого диска.

Задание на самостоятельное выполнение.

Установи пару оптических энкодеров, на своего колесного робота и обучи его выполнять повороты на углы 30, 90, 150 и 270 градусов.
Подсказка.
Есть два основных способа считывать сигнал с цифрового входа микроконтроллера: по опросу и по прерыванию. В первом случае система считывает сигнал каждый раз внутри основного цикла программы (как в данном примере). Основным недостатком этого метода является то, что трудно вести обработку других сигналов во время опроса. Но с использованием прерываний основной цикл освобождается от части кода с опросом, и система может спокойно заниматься другими делами, пока на вход не придет сигнал. С поступлением сигнала, основные работы будут приостановлены, система войдет в прерывание для считывания импульса, затем выйдет, восстановив предыдущую работу. Так что, если вам не хватает быстродействия, то воспользуйтесь прерываниями.