Энкодер + attachInterrupt

Kresnik
Offline
Зарегистрирован: 16.08.2014

Понадобилось мне тут использовать энкодер, да не просто так а через прерывание! нечего толкового на просторах глобальной я не нарыл (дадада, плохо искал) вот и решил делать сам с нуля... ну почти с нуля))) и дабы труды мои не пропали и возможно принесли кому-нибудь пользу решил явить их миру =3
код возможно кривой, но делает ровно то что мне от него нужно, + я вообще ландшафтный архитектор =Р
ЗЫ есть вопросы - буду рад ответить! советы приветствуются.

ЗЗЫ центральный контакт я повесил на +5V через 10кО.

 

int pin_A=2;
int pin_B=7;
volatile int per=1;
unsigned char encoder_A;
unsigned char encoder_B;
unsigned long currentTime;
unsigned long loopTime;


void setup ()
{
  pinMode(7, INPUT);
  pinMode(2, INPUT);
  Serial.begin(9600);
  attachInterrupt(0,ogo,FALLING);
}
void loop()
{}
void ogo()
{
  currentTime = millis();
  if(currentTime >= (loopTime + 150))
  {
  encoder_B = digitalRead(pin_B);
  if (encoder_B == 1)
  {
    if(per < 5)
   {
     per++;
     printToSerial();
   }
   else if(per == 5)
   {
     per = 1;
     printToSerial();
   }
  }
  else
  {
    if(per > 1)
   {
     per--;
     printToSerial();
   }
   else if(per == 1)
   {
     per = 5;
     printToSerial();
   }
  }
  }
  loopTime = currentTime; 
}
void printToSerial(){

 Serial.print("Per = ");
 Serial.println(per);
}

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

зачем центральный контакт я повесил на +5V через 10кО ?

подтягивать внутренними резисторами надо пины 7 и 2, да плохо искали, тут на форуме есть 5...6 способов обработки сигналов энкодера