Прерывание (Interrupt) - это Удобно!Всем

Arduino ( Freeduino )
Прерывание (Interrupt) - это Удобно!
Всем привет!


Пины у нас другие подписаны в программе, меняем пин для управления с 3 на 10 pin digital. Обязательно меняем. Лень картинку исправлять

Расскажу о прерываниях Ардуино!

Прерывания в это просто!

Прерывание — это сообщение Ардуине, что нужно выполнить вашу подпрограмму!
Для этого используются 2е функции:

Вкл. обработку прерываний attachInterrupt(interrupt, function, mode)
Выкл. прерывание detachInterrupt(interrupt)

Начнем с обработки прерывания:
attachInterrupt(interrupt, function, mode) — Функция указывает какую функцию вызывать при Прерывании.

Параметры:
interrupt — Arduino имеют два внешних прерывания с номерами 0 и 1, находятся они на 2 и 3 цифровом входе (digital pin) соответственно. Этот параметр отвечает именно за выбор какой из пинов выбрать для прерывания.

function — указываем функцию которая будет вызываться про прерывании. Функция должна быть без параметров и не возвращать ни каких данных.

mode — Определяет 4 вида прерывания:
LOW вызов, когда на порту низкий уровень напряжения
CHANGE вызывается при изменении значения на входе
RISING вызов при изменении уровня напряжения с низкого (LOW) на высокое(HIGH)
FALLING вызов при изменении уровня напряжения с высокого (HIGH) на низкое (LOW)


/* Запускаем серво-машинку по прерыванию */

int ServoPin = 10; // управляющий выход для сервы
int in_4 = 4; // вход для первой кнопки
int in_5 = 5;  // вход для второй кнопки
int step = 100; // среднее положение сервы

volatile int state = LOW;

void setup()
{
 pinMode(ServoPin, OUTPUT);

 pinMode(in_4, INPUT);
 pinMode(in_5, INPUT);

 attachInterrupt(0, gostepM, CHANGE); // привязываем 0-е прерывание к функции gostep
 attachInterrupt(1, gostepP, CHANGE); // привязываем 1-е прерывание к функции gostep
}

void loop()
{
}

void gostepM()
{

 if(step > 700){step = 700;}
 if(step < 600){step = 600;}

 digitalWrite(ServoPin, HIGH);

 delayMicroseconds(step);

 digitalWrite(ServoPin, LOW);

 delayMicroseconds(20000-step);

 step -= 10;

 state = !state; // меняем значение на противоположное
}

void gostepP()
{
 if(step > 700){step = 700;}
 if(step < 600){step = 600;}

 digitalWrite(ServoPin, HIGH);

 delayMicroseconds(step);

 digitalWrite(ServoPin, LOW);

 delayMicroseconds(20000-step);

 step += 10;

 state = !state; // меняем значение на противоположное
}


http://arduino.cc/en/Reference/AttachInterrupt

http://compcar.ru/forum/showthread.php?t=4281&page=5
admin 02.08.2009 в 01.36 комментарии 0 0

комментарии(0)

Комментировать

Для добавления комментария авторизируйтесь.
Последние комментарии:
© 2012 pobot.ru