Энкодер + 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 способов обработки сигналов энкодера