проблема с внешними прерываниями
- Войдите на сайт для отправки комментариев
Ср, 19/08/2020 - 00:47
подскажите пожалуйста а то уже вторую ночь сижу не пойму
вот настроил прерывание -
volatile bool inter = false;
void func(){
inter = true;
}
void setup() {
Serial.begin(115200);
attachInterrupt(0, func, RISING);
interrupts();
}
вот отслеживаю событие -
void loop() { if(inter == true){ inter = false; noInterrupts(); //тут что то делаем interrupts(); } }
вообщем стоит хоть раз сработать прерыванию как цикл становится вечным. если повторно не разрешать прерывания то срабатывает один раз, а мне нужно что бы на каждое прерывание было одно действие
если нужно действие на каждое прерывание, то это действие лучше совершать прямо в обработчике. Однако в этом случае позаботьтесь о том, чтобы действие было быстрое и, как минимум, завершалось до следующего прерывания.
По вашему коду не понятно, зачем вы включаете-выключаете прерывания в ЛУПе.
Откуда берётся Ваше прерывание? Физически?
Кстати, код написан неправильно, но к описанному Вами эффекту это приводить не должно.
физически подключенное устройство его инициализирует. а что не правильного в коде?
физически подключенное устройство его инициализирует
Секрет какое? Тогда сами разбирайтесь со своей проблемой. Откуда мне знать, что там за устройство? Например, у него дребезг бывает? И много таких вопросов.
а что не правильного в коде?
Между строками №№ 2 и 3 может произойти ещё одно прерывание, которое Вы пропустите.
дребезга нет. устройство специфичное так что никакого представления оно не даст
если сделать так -
все работает идеально
если сделать так -
то все. цикл. такое ощущение что прерывание не отключаются и реагирует на на мои посылки
если сделать так -
то все. цикл. такое ощущение что прерывание не отключаются и реагирует на на мои посылки
Что-то ничего похожего на это в первом посте не было. Здесь-то понятно в строке 15 Вы поднимаете новое прерывание. Зачем - это Вам виднее, но Вы его поднимаете, как раз по RISING. Если Вам и впрямь нужно это делать, то Вы должны почистить флаг прерывания после строки 15. Тогда никакого цикла не будет.
А то, что "не отключаются", так с чего им отключаться, если Вы их не отключаете?
огромное спасибо