Обработчик энкодера для Ардуино

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 15 ноября 2020, 14:57

На примере модуля энкодера для Ардуино создадим обработчик. Мне он понравился более чем другие. В данном примере будем убавлять/прибавлять яркость светодиода.

phpBB [media]

Обработчик энкодера для Ардуино.png
Обработчик энкодера для Ардуино
Обработчик энкодера для Ардуино.png (95.75 КБ) 833 просмотра

Код: Выделить всё

** Для управлением яркостью LED используется энкодер Sparkfun
*/
 
int brightness 
= 120;       // яркость LED, начинаем с половины
int fadeAmount = 10;        // шаг изменения яркости LED
unsigned long currentTime;
unsigned long loopTime;
const int pin_A = 12;       // pin 12
const int pin_B = 11;       // pin 11
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
 
void setup
()  {
  Serial.begin(9600);  
  
// declare pin 9 to be an output:
  pinMode(9, OUTPUT);         // устанавливаем pin 9 как выход
  pinMode(pin_A, INPUT);
  pinMode(pin_B, INPUT);
  currentTime = millis();
  loopTime = currentTime; 
} 
 
void loop
()  {
  Serial.println(brightness); // вывод в Serial порт
  currentTime = millis();
  if(currentTime >= (loopTime + 5)){ // проверяем каждые 5мс (200 Гц)
    encoder_A = digitalRead(pin_A);     // считываем состояние выхода А энкодера 
    encoder_B = digitalRead(pin_B);     // считываем состояние выхода B энкодера    
    if((!encoder_A) && (encoder_A_prev)){    // если состояние изменилось с положительного к нулю
      if(encoder_B) {
        // выход В в полож. сост., значит вращение по часовой стрелке
        // увеличиваем яркость, не более чем до 255
        if(brightness + fadeAmount <= 255) brightness += fadeAmount;               
      
}   
      else 
{
        // выход В в 0 сост., значит вращение против часовой стрелки     
        // уменьшаем яркость, но не ниже 0
        if(brightness - fadeAmount >= 0) brightness -= fadeAmount;               
      
}   
 
    
}   
    encoder_A_prev 
= encoder_A;     // сохраняем значение А для следующего цикла 
     
    analogWrite
(9, brightness);   // устанавливаем яркость на 9 ножку
    
    loopTime 
= currentTime;
  }                       
}
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Программирование»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 5 гостей