Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

главная:модули:encoder [2019/08/16 15:39]
smartadmin создано
главная:модули:encoder [2019/08/16 15:53] (текущий)
smartadmin
Строка 24: Строка 24:
  
 ==== Ресурсы для загрузки ==== ==== Ресурсы для загрузки ====
-* [[http://​files.smartelements.ru/​know_libs/​encoder.zip|Скачать (encoder)]]+  ​* [[http://​files.smartelements.ru/​know_libs/​encoder.zip|Скачать (encoder)]] 
 + 
 +===== Примеры подключения и использования ===== 
 +==== Вывод значений на экран ==== 
 +**Задача:​** Вывести значения поворота и факты нажатия кнопки в монитор Serial-порта. 
 + 
 +^ Что нужно ​                                                                                                              ​^ ​ Кол-во,​ шт  ^ 
 +| [[https://​smartelements.ru/​collection/​kontrollery/​product/​kontroller-smart-uno|Контроллер Smart UNO]]                  |  1           | 
 +| [[https://​smartelements.ru/​collection/​shildy/​product/​sensor-shield|Sensor Shield]] ​                     |  1           | 
 +| [[https://​smartelements.ru/​collection/​moduli/​product/​modul-enkodera|Модуль энкодера]] ​                     |  1           | 
 +| [[https://​smartelements.ru/​collection/​provoda-i-kabeli/​product/​nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]] |  5           | 
 + 
 + 
 +**Схема подключения:​** 
 + 
 + 
 +**Скетч для загрузки:​** 
 +<file Arduino>​ 
 +#include <​Encoder.h>​ //​подключение библиотеки для работы с энкодером 
 + 
 +const int pinA = 5; //​вывод подключения контакта А 
 +const int pinB = 6; //​вывод подключения контакта В 
 +const int BUT = 7; //​вывод подключения контакта D 
 + 
 +Encoder myEnc(pinA, pinB); //​объявление объекта для работы с энкодером 
 + 
 +long oldPosition ​ = -999; //​переменная для хранения старой позиции 
 +boolean lastButton = HIGH; //​прошлое положение кнопки 
 + 
 + 
 +void setup() { 
 +  Serial.begin(9600);​ //​инициализация монитора порта 
 +  Serial.println("​Basic Encoder Test:"​);​ //​вывод в монитор надписи 
 +
 + 
 +void loop() { 
 +  lastButton = digitalRead(BUT);​ 
 +  long newPosition = myEnc.read();​ //​чтение новой позиции 
 +  if (newPosition != oldPosition) { //если она отлична от старой 
 +    oldPosition = newPosition;​ //​запомнить её 
 +    Serial.println(newPosition);​ //​вывести в монитор 
 +  } 
 + 
 +  if (digitalRead(BUT) == LOW && lastButton == HIGH) { //​проверка нажатия на кнопку 
 +    Serial.println("​Button has been pressed!"​);​ //​вывод сообщения 
 +  } 
 +
 +</​file>​ 
 + 
 +==== Управление RGB-светодиодом ==== 
 +**Задача:​** С помощью модуля энкодера будем управлять RGB - светодиодом. Алгоритм работы следующий,​ при вращении вала энкодера по часовой стрелке увеличивается яркость очередного цвета (красный,​ зелёный,​ синий),​ при вращении против часовой стрелки яркость свечения цвета уменьшается. Цвета переключаются с помощью встроенной кнопки. 
 + 
 +^ Что нужно ​                                                                                                              ​^ ​ Кол-во,​ шт  ^ 
 +| [[https://​smartelements.ru/​collection/​kontrollery/​product/​kontroller-smart-uno|Контроллер Smart UNO]]                  |  1           | 
 +| [[https://​smartelements.ru/​collection/​shildy/​product/​sensor-shield|Sensor Shield]] ​                     |  1           | 
 +| [[https://​smartelements.ru/​collection/​moduli/​product/​modul-enkodera|Модуль энкодера]] ​                     |  1           | 
 +| [[https://​smartelements.ru/​collection/​moduli/​product/​modul-rgb-svetodioda-3|Модуль RGB светодиода]] ​       |  1           | 
 +| [[https://​smartelements.ru/​collection/​provoda-i-kabeli/​product/​nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]] |  9           | 
 + 
 + 
 +**Схема подключения:​** 
 + 
 + 
 +**Скетч для загрузки:​** 
 +<file Arduino>​ 
 +#include <​Encoder.h>​ //​подключение библиотеки для работы с энкодером 
 + 
 +const int pinA = 5; //​вывод подключения контакта А 
 +const int pinB = 6; //​вывод подключения контакта В 
 +const int BUT = 7; //​вывод подключения контакта D 
 +const int pinsRGB [] = {9, 10, 11}; //​выводы подключения RGB-светодиода 
 + 
 +Encoder myEnc(pinA, pinB); //​объявление объекта для работы с энкодером 
 + 
 +long oldPosition ​ = -999; //​переменная для хранения старой позиции 
 +int colors [] = {0, 0, 0}; //​переменная для хранения значений цветов 
 +int color_index = 0; //​индекс номера цвета в массиве 
 +boolean lastButton = HIGH; //​прошлое положение кнопки 
 + 
 + 
 +void setup() { 
 +  pinMode(BUT,​ INPUT); //​установка режима вывода кнопки 
 +
 + 
 +void loop() { 
 +  lastButton = digitalRead(BUT);​ //​чтение текущего положения кнопки 
 +  long newPosition = myEnc.read();​ //​чтение новой позиции 
 +   
 +  if (newPosition != oldPosition) { //если она отлична от старой 
 +    if (oldPosition != -999) { //​начальная позиция не интересует 
 +      //​увеличить яркость текущего цвета 
 +      colors[color_index] = constrain(newPosition - oldPosition + colors[color_index],​ 0, 255); 
 +    } 
 +    oldPosition = newPosition;​ //​запомнить новую позицию 
 +  } 
 + 
 +  if (digitalRead(BUT) == LOW && lastButton == HIGH) { //​проверка нажатия на кнопку 
 +    color_index++;​ //​увеличить индекс номера цвета 
 +    if (color_index == 3) { //если он стал равен 3 
 +      color_index = 0; //​сбросить к 0 (красный цвет) 
 +    } 
 +  } 
 +   
 +  lightLED(); //​зажечь RGB - светодиод 
 +
 + 
 +void lightLED() { 
 +  for (int i = 0; i < 3; i++) { //​зажигание каждого цвета 
 +    analogWrite(pinsRGB[i],​ colors[i]); //с соответствующей яркостью 
 +  } 
 +
 +</​file>​