-
Notifications
You must be signed in to change notification settings - Fork 0
/
button.c
38 lines (32 loc) · 2.33 KB
/
button.c
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
//button.c
// Программа мигает светодиодом 1 раз в секунду
// и завершается при нажатии на кнопку.
// Светодиод подключён к порту P1_03
// Кнопка подключена к портам P1_05 и P1_07.
// Компиляция командой: gcc -o button button.c -lrt -lbcm2835
// Запуск: sudo ./button
#include <bcm2835.h>
//#define PIN RPI_GPIO_P1_03 // для RPi ревизии v1
#define PIN RPI_V2_GPIO_P1_03 // определяем порт для подключения светодиода
#define PIN_OUT RPI_GPIO_P1_05 // определяем порт для записи
#define PIN_IN RPI_GPIO_P1_07 // определяем порт для чтения
int main()
{
if (!bcm2835_init()) // инициализация GPIO
return 1; // аварийное завершение программы, если инициализация не удалась
// выдаёт на выходе код 1
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); // устанавливаем порт P1_03 на вывод
bcm2835_gpio_fsel(PIN_OUT, BCM2835_GPIO_FSEL_OUTP); // устанавливаем порт P1_05 на вывод
bcm2835_gpio_fsel(PIN_IN, BCM2835_GPIO_FSEL_INPT); // устанавливаем порт P1_07 на ввод
bcm2835_gpio_set_pud(PIN_IN, 1); // включаем подтяжку порта PIN_IN к "0"
bcm2835_gpio_write(PIN_OUT, HIGH); // устанавливаем порт PIN_OUT в состояние "1"
while(!bcm2835_gpio_lev(PIN_IN)) { // повторяем все действия, заключённые в скобках
// пока не будет нажата кнопка.
bcm2835_gpio_write(PIN, LOW); // устанавливаем порт в 0, светодиод горит
bcm2835_delay(500); // ждём 500 мс
bcm2835_gpio_write(PIN, HIGH); // устанавливаем порт в 1, светодиод не горит
bcm2835_delay(500); // ждём 500 мс
}
return (bcm2835_close()); // нормальный выход из программы
// выдаёт на выходе код 0
}