Энкодер + attachInterrupt
- Войдите на сайт для отправки комментариев
Вс, 15/02/2015 - 00:31
Понадобилось мне тут использовать энкодер, да не просто так а через прерывание! нечего толкового на просторах глобальной я не нарыл (дадада, плохо искал) вот и решил делать сам с нуля... ну почти с нуля))) и дабы труды мои не пропали и возможно принесли кому-нибудь пользу решил явить их миру =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);
}
зачем центральный контакт я повесил на +5V через 10кО ?
подтягивать внутренними резисторами надо пины 7 и 2, да плохо искали, тут на форуме есть 5...6 способов обработки сигналов энкодера