Привожу два примера прерываний.
Ниже пример кода для Arduino, прерывание по таймеру
В этом примере процедура flash_led будет выполнятся каждый раз по истечению 0,5 сек.
PHP код:
//Выполнение процедуры по прерыванию таймеру.
#include <MsTimer2.h>
static boolean output = HIGH;
void flash_led() //обработчик прерывания
{
digitalWrite(13, (output==HIGH) ? output=LOW : output=HIGH);
}
void setup() {
pinMode(13, HIGH);
MsTimer2::set(500, flash_led); // 500ms период
MsTimer2::start(); //включить таймер
}
void loop()
{
//.....
}
Еще один пример работы аппаратного прерывания.
В данном примере при изменении напряжения на ножке D2
каждый раз будет выполнятся процедура int_on
Таких входов в Arduino всего 2 (D2,D3)
И несколько вариантов настройки событий
LOW - to trigger the interrupt whenever the pin is low,
CHANGE - to trigger the interrupt whenever the pin changes value
RISING - to trigger when the pin goes from low to high,
FALLING - for when the pin goes from high to low.
PHP код:
#define PinA 2
static boolean output = HIGH;
void setup()
{
pinMode(PinA, INPUT);
digitalWrite(PinA, HIGH); // подключить подтягивающий резистор
attachInterrupt(0, int_on, CHANGE); // настроить прерывание interrupt 0 на pin 2
}
void loop()
{
//........
}
// обработка прерывания
void int_on()
{
digitalWrite(13, (output==HIGH) ? output=LOW : output=HIGH);
}