Прекъсвания на Arduino, Блог за компютри и компютърни технологии
По-голямата част от информацията може да бъде намерена на страниците на arduino.cc по пътя ще добавя връзки, където намерих информацията. Нека да преминем към прекъсванията. Когато основната програма е сравнително малка, всички събития могат да се обработват в цикъла на основната програма, но какво ще стане, ако програмата е голяма? Ако размерът му е набор от линии и дори със закъснения във времето? В този случай е възможна ситуация, при която натискането на външни бутони може да не се обработи или ще трябва да държите бутона натиснат дълго време. Но какво ще стане, ако това не е бутон, а външно устройство? За преодоляване на тези трудности е необходимо да се използват прекъсвания - веднага щом бъде извикано прекъсване, основният програмен цикъл ще бъде спрян и микроконтролерът ще започне да изпълнява кода на функцията, която съответства на прекъсването, и след завършване програмата ще продължи да се изпълнява там, където е била спряна преди това.
Има щифтове на платките на Arduino, които се използват за сигнализиране на прекъсване. Таблицата по-долу показва номерата на прекъсванията и съответните им щифтове на платката.
За да работите с прекъсвания, не е необходимо да включвате никакви библиотеки - всички те вече са включени автоматично. Синтаксис:
Параметри: interrupt - номерът на прекъсването, което се извиква (0, 1 и т.н.). функция - името на функцията, която ще бъде извикана при задействане на прекъсването.Важно: Тази функция не трябва да получава параметри при стартиране или да връща никакви стойности! режим — режим. Възможни стойностиНИСКО, ПРОМЯНА, ПАДВАНЕ, РАЗВИВАНЕ
Режимът определя как да се интерпретира сигналът на щифта, отговорен за прекъсванията, в който случай да се извика манипулаторът.LOW - режимът, в който се извиква прекъсването, когато стойността на контакта е нула.Извиканата функция ще се изпълнява отново и отново, докато условието е вярно. Този режим е много различен от следващите, той е предназначен за постоянна работа, останалите - за единична.

В основния цикъл на програмата на екрана се показват нули, но когато на входа за прекъсване се подаде сигнал LOW (бутонът е освободен), на екрана се извеждат единици. Т.е. Натискането на бутона спира повтарящите се прекъсвания и стартира основния програмен цикъл.
CHANGE - прекъсване се извиква, когато сигналът се промени от LOW на HIGH и обратно. Функцията се изпълнява само веднъж при всяка промяна на сигнала.

Вероятно прекъсването ще трябва да се изпълни само веднъж и следователно следващите две прекъсвания ще бъдат най-търсените.RISING - прекъсване се извиква, когато стойността се промени от LOW на HIGH. Еднократно извикване на функция за всеки преход, който удовлетворява извикването.

FALLING - прекъсване се извиква, когато стойността се промени от HIGH на LOW. Еднократно извикване на функция за всеки преход, който удовлетворява извикването.

Сигналът за прекъсване е външен за Arduino. Може да се сравни с компютърната периферия. Използвах бутон за демонстрацията и мисля, че това е много често срещан начин за задействане на прекъсване.
Теорията свършва дотук. Да преминем към практиката.
Светодиодът, свързан към платката, постепенно увеличава яркостта на сиянието, след което се нулира и всичко се повтаря. Натискането на бутона ще фиксира текущата яркост за 3 секунди.
Бутонът е свързан съгласно първата схема, посочена по-горе. Следователно той има всички описани недостатъци.
Друга важна функция е свързана с прекъсванията.
Деактивира извикването на конкретно прекъсване. Може да се използва, когато трябва да извършите някакво действие, без да спирате за прекъсвания.
P.s. Докато пишат тази статия, те донесоха Schmidt тригери, регистри и други логически схеми. 🙂
Добър ден, Владимир!! Мога ли да ви задам въпрос относно бутоните - Имаше проблем с връзката - Проект с NV 9 Bill Validator - Бутонът отказва да отговори в хардуера )) - това очевидно е свързано по някакъв начин attachInterrupt (функция за броене на импулси от банкноприемника) - програмата се компилира, но бутонът не работи - Благодаря ви - Поздрави Zaza
Благодаря ви за статията! Кажете ми, защо не можете просто да изпратите сигнал от бутона до щифта, без да свързвате допълнителна логика? Pin в крайна сметка, контролерът също ще работи при определено ниво на сигнала, като логика ...