1

Тема: ENCODER

#define CLK 8
#define DT  9

bool enc_a,enc_b,enc_old_a;
int enc_data, enc_data_old;

void setup(){
  Serial.begin(9600);
  TCCR2B |= (1 << WGM22)|(1 << CS20)|(1 << CS21); 
  TIMSK2 |= (1 << OCIE2A); 
  OCR2A = 250; // 1 ms
}

void loop(){
  if(enc(1) != enc_data_old){enc_data_old = enc(1);
  Serial.println(enc(1));
  }
  }

int enc(bool byte_s){
  switch(CLK){
    case 2: enc_a = ((PIND >> 2) & 1);break;
    case 3: enc_a = ((PIND >> 3) & 1);break;
    case 4: enc_a = ((PIND >> 4) & 1);break;
    case 5: enc_a = ((PIND >> 5) & 1);break;
    case 6: enc_a = ((PIND >> 6) & 1);break;
    case 7: enc_a = ((PIND >> 7) & 1);break;
    case 8: enc_a = ((PINB >> 0) & 1);break;
    case 9: enc_a = ((PINB >> 1) & 1);break;
   case 10: enc_a = ((PINB >> 2) & 1);break;
   case 11: enc_a = ((PINB >> 3) & 1);break;
   case 12: enc_a = ((PINB >> 4) & 1);break;
   case 13: enc_a = ((PINB >> 5) & 1);break;}_delay_us(500);  
  switch(DT){
    case 2: enc_b = ((PIND >> 2) & 1);break;
    case 3: enc_b = ((PIND >> 3) & 1);break;
    case 4: enc_b = ((PIND >> 4) & 1);break;
    case 5: enc_b = ((PIND >> 5) & 1);break;
    case 6: enc_b = ((PIND >> 6) & 1);break;
    case 7: enc_b = ((PIND >> 7) & 1);break;
    case 8: enc_b = ((PINB >> 0) & 1);break;
    case 9: enc_b = ((PINB >> 1) & 1);break;
   case 10: enc_b = ((PINB >> 2) & 1);break;
   case 11: enc_b = ((PINB >> 3) & 1);break;
   case 12: enc_b = ((PINB >> 4) & 1);break;
   case 13: enc_b = ((PINB >> 5) & 1);break;}
   if((!enc_a) && (enc_old_a)){
    if(enc_b) {enc_data++;}   
     else {enc_data--;}}   
    enc_old_a = enc_a;
 if(byte_s == 0){enc_data = 0;}
    return enc_data;
}

ISR (TIMER2_COMPA_vect){enc(1);}

Без Serial
Скетч использует 650 байт (2%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 15 байт (0%) динамической памяти, оставляя 2033 байт для локальных переменных. Максимум: 2048 байт.

Пустой скетч 444 байт

итого 206 байт

2

Re: ENCODER

#define CLK 8
#define DT  9

bool enc_a,enc_b,enc_old_a;
int enc_data, enc_data_old;

void setup(){
  Serial.begin(9600);
  TCCR2B |= (1 << WGM22)|(1 << CS20)|(1 << CS21); 
  TIMSK2 |= (1 << OCIE2A); 
  OCR2A = 250; // 1 ms
  pinMode(CLK,INPUT);
  pinMode(DT,INPUT);
}

void loop(){
  if(enc(1) != enc_data_old){enc_data_old = enc(1);
  Serial.println(enc(1));
  }
  }

int enc(bool byte_s){
  enc_a = digitalRead(CLK); 
  _delay_us(500); 
  enc_b = digitalRead(DT);
  
   if((!enc_a) && (enc_old_a)){
    if(enc_b) {enc_data++;}   
     else {enc_data--;}}   
    enc_old_a = enc_a;
 if(byte_s == 0){enc_data = 0;}
    return enc_data;
}

ISR (TIMER2_COMPA_vect){enc(1);}

Без Serial
Скетч использует 1000 байт (3%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 15 байт (0%) динамической памяти, оставляя 2033 байт для локальных переменных. Максимум: 2048 байт.

Пустой скетч 444 байт
Итого 556 байт

3

Re: ENCODER

Библиотека - Данный контент доступен только зарегистрированным пользователям.


#include <ENC.h>

int data_old;

ENC enc(8,9);

void setup(){
  Serial.begin(9600);
}

void loop(){
  if(enc.data(1) != data_old){
    data_old = enc.data(1);
    Serial.println(enc.data(1));
  }
}

ISR (TIMER2_COMPA_vect){enc.data(1);}