Сброс цикла по внешнему прерыванию

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Как сделатьть сброс цикла по внешнему прерыванию ? 

Adessit
Adessit аватар
Offline
Зарегистрирован: 12.04.2011

Рабочий кусок моего кода

 

 

#include<avr/interrupt.h>

void setup()
{
    attachInterrupt(0,switch1,CHANGE);//прерывания 

.......

}

void loop(){

.....

}

void switch1()
{

buttonState = digitalRead(swpin1);
  delayMicroseconds(300000);//типа антидребезг кнопки
  buttonPress++;//увеличиваем глобальную переменную - у меня это переход между разными вункциями проги

  if (buttonPress == 3)//простой цикл на 3 функции, у меня в loop() идёт проверка по этой переменной, но можно и втулить в цикл значения
{ 
buttonPress = 0;
}
}

 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Не совсем понятена ваша программа .

Мне нужно чтобы по команде с ИК пульта цикл моментально начинался сначала (не смотря на многочисленые delay и т.д.).

 

Adessit
Adessit аватар
Offline
Зарегистрирован: 12.04.2011

ОК! А если в функции написать просто:

void switch1()
 {

break;

}

подробнее про это тут 

но сам еще не опробовал... В теории должно работать

Adessit
Adessit аватар
Offline
Зарегистрирован: 12.04.2011

Еще можно попробовать goto

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

А если continue;
Мне кажется это больше подходит .
Завтра буду пробовать. 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Ни чего не получилось.

Придумал только : по прерыванию включить релюшку  которая разомкнет общее питание МК

а потом опять его востановит. 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Еще вопрос.

Можно ли (програмно) блокировать внешнее прерывание на какое то время .

Т.е. чтобы МК какое то время был не чувствителен к сигналу внешнего прерывания.

Modular
Offline
Зарегистрирован: 05.03.2011

 Мне кажется можно не обработку прерывания блокировать, а, например, объявить volatile булеву переменную и проверять в самом обработчике если она false, то ничего не делать. Ну или в лоб detachInterrupt

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

А можно подробнее про  detachInterrupt (ваша ссылка не грузится) ?

Modular
Offline
Зарегистрирован: 05.03.2011

 Поправил ссылку и еще раз на всякий случай detachInterrupt

фактически это обратное действие attachInterrupt

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Что то я не понял как его использовать в цикле , да к тому же на какое то время.