Работа с прерываниями Мега2560
- Войдите на сайт для отправки комментариев
Чт, 11/01/2018 - 21:05
Друзья добрый день!
Подскажите, странная штука (хотя чудес не бывает).
Есть у меня кусок кода который занимается обработкой работы энкодера, но поменяв с 328 на 2560 он работать перестал. Испытания я проводил на 328меге, а реальное устройство 2560.В общем встрял я , а квалификации решить данный вопрос не хватает. Помогите пожалйста..
#include <Rotary.h>
Rotary r = Rotary(2, 3);
void setup() {
Serial.begin(9600);
PCICR |= (1 << PCIE2);
PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
sei();
}
void loop() {
}
ISR(PCINT2_vect) {
unsigned char result = r.process();
if (result == DIR_NONE) {
// do nothing
}
else if (result == DIR_CW) {
Serial.println("ClockWise");
}
else if (result == DIR_CCW) {
Serial.println("CounterClockWise");
}
}
del
Сам делаю проект на меге. И с энкодером наигрался знатно.
У Вас все очень просто. Достаточно воспользоваться простым примером из сайта ардуино:
И конечно же не забываем о номерах ножек на которых взможны прерывания и номерах прерываний:
Mega2560
2
3
21
20
19
18
Siegurd, у ТС вариант именно на PCINT. Опять же, обычных прерываний может банально не хватить: если сиспользовать по паре на каждый энкодер, то их общее количество окажется сильно ограниченным (я, например, использую 5 штук).