Raspberry Pi:Примеры/Обработка прерываний: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
 
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 2: Строка 2:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


{{Черновик}}
 


=Обработка прерываний=
=Обработка прерываний=
Строка 12: Строка 12:
Обработка прерывания выполняется функцией add_event_detect():
Обработка прерывания выполняется функцией add_event_detect():


<syntaxhighlight lang="python"  enclose="div">
<syntaxhighlight lang="python" >
GPIO.add_event_detect(18, GPIO.FALLING, callback=my_callback)  
GPIO.add_event_detect(18, GPIO.FALLING, callback=my_callback)  
</syntaxhighlight>
</syntaxhighlight>
Строка 43: Строка 43:
===Без устранения эффекта дребезга===
===Без устранения эффекта дребезга===


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
import RPi.GPIO as GPIO
import RPi.GPIO as GPIO
import time
import time
Строка 64: Строка 64:
===С устранением эффекта дребезга===
===С устранением эффекта дребезга===


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
import RPi.GPIO as GPIO
import RPi.GPIO as GPIO
import time
import time

Текущая версия от 13:16, 18 июня 2023

Проверка/Оформление/Редактирование: Мякишев Е.А.



Обработка прерываний

Данный пример демонстрирует как отреагировать на некоторое событие без проверки состояния выводов.

Программа ведет прямой временной отсчет, который прерывается специальным сообщением, выводимое на экран при нажатии кнопки.

Обработка прерывания выполняется функцией add_event_detect():

GPIO.add_event_detect(18, GPIO.FALLING, callback=my_callback)

Первый аргумент функции это BCM номер вывода, для которого определяется прерывание, второй аргумент определяет фронт сигнала(спадающий - GPIO.FALLING или возрастающий - GPIO.RISING), третий аргумент это функция обратного вызова, которая будет вызвана при нажатии кнопки.

Функция обработки прерывания не прекращает выполнения цикла, он выполняется отдельным потоком.

Нажатие кнопки всегда сопровождается эффектом дребезга контактов(при нажатии кнопки уровень сигнала изменяется не мгновенно,а импульсно, скачкообразно, создавая эффект многократного быстрого нажатия кнопки). Чтобы программа проигнорировала паразитные всплески сигнала, в функцию GPIO.add_event_detect() добавляется специальный аргумент, bouncetime, представляющий время учета дребезга, выраженного в миллисекундах.

Необходимое оборудование

Схема

Будьте осторожны при обращении с портами GPIO вашего Raspberry Pi. Помните входы и выходы GPIO расссчитаны на напряжение +3,3В


Кнопка подключается к 6-му и 12-му выводу GPIO Raspberry Pi.

Все манипуляции по подключению производите только при отключенном питании платы Raspberry Pi


Код

Без устранения эффекта дребезга

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

def my_callback(channel):
    print('You pressed the button')

GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(18, GPIO.FALLING, callback=my_callback) 

i = 0
while True:
    i = i + 1
    print(i)
    time.sleep(1)

С устранением эффекта дребезга

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

def my_callback(channel):
    print('You pressed the button')

GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(18, GPIO.FALLING, callback=my_callback, bouncetime = 100) 

i = 0
while True:
    i = i + 1
    print(i)
    time.sleep(1)

См.также

Внешние ссылки