Подскажите по прерываниям.

pmaster
Offline
Зарегистрирован: 23.05.2011

Пока не пришли ардуинки, набираюсь опыта в VBB3

так вот, или он глючит, или я уже не знаю. 

вот простейший пример

 


int pin = 13;
volatile int state = LOW;

void setup()
{
	pinMode(pin, OUTPUT);              
	attachInterrupt(0, blink, CHANGE); 
	ISR(INT0_vect);
}

void loop()
{
	digitalWrite(pin, state);         
}

void blink()
{
	state = !state;                   
}

и он в симуляторе не работает.
 

pmaster
Offline
Зарегистрирован: 23.05.2011

во первых ругается на attachInterrupt(0, blink, CHANGE);

и как ни странно на state = !state;  

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

Начните пример прерывания с кнопкой) можете затулить в блинк кнопку при нажатии на которорую меняется стате, а не просто сразу)

pmaster
Offline
Зарегистрирован: 23.05.2011

так это и есть этот пример. и в vbb3 он не работает. вот и хочу узнать, пользовался кто нить этим симулятором и небыло ли таких траблов?

 

Max
Offline
Зарегистрирован: 08.03.2011

 А там часом не описка во второй строчке, можно ли HIGH LOW хранить в переменной типа int, да еще потом к int применять логическую операцию отрицания в 18ой строке?

Max
Offline
Зарегистрирован: 08.03.2011

 Я был неправ. Переменная хранится, операция работает. И вообще код работает, проверил на Arduino Diecimila.

pmaster
Offline
Зарегистрирован: 23.05.2011

спасибо. значит эмуль глючный. 

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

Сегодня первый раз игрался с прерываниями, че-то мутно, но в финале добил.

Подтянул встроенные резисторы

digitalWrite(swpin1, HIGH);

Так как у меня теперь мега2560, то прерывание выбрал 2, на 21 контакте

attachInterrupt(2,switch1,CHANGE);

Функция switch1 на три нажатия состояния кнопки, на четвертом нажатии сброс на первое значение

void switch1()
{

buttonState = digitalRead(swpin1);
delayMicroseconds(30000000);
buttonPress++;

if (buttonPress == 3)
{ 
buttonPress = 0;
}
}