-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathevent.c
More file actions
44 lines (38 loc) · 2.78 KB
/
event.c
File metadata and controls
44 lines (38 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//event.c
// Программа включает светодиод
// при обнаружении события на порту P1_13.
// Светодиод подключён к порту P1_03
// Компиляция командой: gcc -o event event.c -lrt -lbcm2835
// Запуск: sudo ./event
#include <stdio.h>
#include <bcm2835.h>
#define PIN RPI_V2_GPIO_P1_03 // определяем порт для подключения светодиода
#define PIN_IN RPI_V2_GPIO_P1_13 // определяем порт для чтения
int main(int argc, char **argv)
{
// bcm2835_set_debug(1); // раскомментировать для отладки.
// если включена отладка, то реального доступа к GPIO не будет
if (!bcm2835_init()) // инициализация GPIO
return 1; // аварийное завершение программы, если инициализация не удалась
// выдаёт на выходе код 1
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); // устанавливаем порт P1_03 на вывод
bcm2835_gpio_fsel(PIN_IN, BCM2835_GPIO_FSEL_INPT); // устанавливаем порт P1_13 на ввод
bcm2835_gpio_set_pud(PIN_IN, BCM2835_GPIO_PUD_UP); // включаем подтяжку порта к +3.3. в
bcm2835_gpio_len(PIN_IN); // включить обнаружение низкого уровня
bcm2835_gpio_write(PIN, HIGH); // устанавливаем порт P1_03 в 1, светодиод не горит
printf("Ждём нажатия на кнопку!\n");
while(1) { // повторяем все действия, заключённые в скобках
// пока не будет нажата кнопка.
if(bcm2835_gpio_eds(PIN_IN)) // если обнаружено нажатие на кнопку
{
bcm2835_gpio_set_eds(PIN_IN); // очищаем флаг eds, установив его значение в 1
bcm2835_gpio_write(PIN, LOW); // устанавливаем порт в 0, светодиод горит
printf("Кнопка нажата.\n");
// return 0; // выход из цикла
}
delay(500); // жидать 500 мс
bcm2835_gpio_write(PIN, HIGH);
}
return (bcm2835_close()); // нормальный выход из программы
// выдаёт на выходе код 0
}