Now Reading [
Raspberry PI 2
] News

Lập trình raspberry pi trên linux - bài 2 - Lập trình GPIO cho đèn LED và LED 7 đoạn


Trong bài này tôi sẽ hướng dẫn cách sử dụng các chân GPIO của Raspberry Pi để điều khiển các thiết bị (đèn Led) cũng như nhận tín hiệu đầu vào (nút bấm)
1. Tải và cài đặt thư viện bcm2835
  • Bước 1: Vào thư mục Desktop:
cd /home/pi/Desktop/ 
  • Bước 2: Tạo một thư mục Programming:
mkdir Programming
  • Bước 3: Vào thư mục Programming:
cd Programming
  • Bước 4: download thư viện “bcm2835-1.49”
wget http://www.airSpayce.com/mikem/bcm2835/bcm2835-1.49.tar.gz
  • Bước 5: giải nén file “bcm2835-1.49.tar.gz”
tarzxvf bcm2835-1.49.tar.gz
  • Bước 6: vào thư mục vừa giải nén xong “bcm2835-1.49”
cd bcm2835-1.49
  • Bước 7: Chạy configure:
sudo ./configure
  • Bước 8: chạy makefile cho thư viện:
make
  • Bước 9: Cài đặt makefile vừa tạo ra:
sudo make install

2. Lập trình output ra LED cơ bản.
Phần này hướng dẫn cách lập trình GPIO để điều khiển nhấp nháy đèn Led.
  • Bước 1: Thoát khỏi thư mục “bcm2835-1.49” và tao một thư mục “blink”:
cd ..
mkdir blink
  • Bước 2: Vào thư mục blink vừa được tạo và tạo một chương trình có tên là“$blink.c”:
cd /blink
sudo nano blink.c
Chương trình blink.c
#include <bcm2835.h>
// Blinks on RPi Plug P1 pin 11 (which is GPIO pin 17)
#define PIN RPI_V2_GPIO_P1_11
int main(int argc, char **argv)
{
// If you call this, it will not actually access the GPIO
// Use for testing
// bcm2835_set_debug(1);
if (!bcm2835_init())
return 1;
// Set the pin to be an output
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);
// Blink
while (1)
{
// Turn it on
bcm2835_gpio_write(PIN, HIGH);
// wait a bit
bcm2835_delay(500);
// turn it off
bcm2835_gpio_write(PIN, LOW);
// wait a bit
bcm2835_delay(500);
}
bcm2835_close();
return 0;
}
  • Bước 3: biên dịch chương trình “c” sẽ tạo ra file “blink
gcc –o blink blink.c -l bcm2835
  • Bước 4: Chạy file vừa được biên dịch xong :
sudo ./blink

3. Lập trình Input chân GPIO
  • Các bước thực hiện tạo file.c cũng như quy trình biên dịch giống như trong phần 2 lập trình Output ra LED(nháy LED).
  • Bước 1: Tạo một thư mục có tên là input
mkdir input
  • Bước 2: Vào thư mục input và tạo một chương trình có tên là “input.c”
cd /input
sudo nano input.c
Chương trình input.c
#include <bcm2835.h>
#include <stdio.h>
// Input on RPi pin GPIO 15
#define PIN RPI_GPIO_P1_15
int main(int argc, char **argv)
{
// If you call this, it will not actually access the GPIO
// Use for testing
// bcm2835_set_debug(1);
if (!bcm2835_init())
return 1;
// Set RPI pin P1-15 to be an input
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_INPT);
// with a pullup
bcm2835_gpio_set_pud(PIN, BCM2835_GPIO_PUD_UP);
// Blink
while (1)
{
// Read some data
uint8_t value = bcm2835_gpio_lev(PIN);
printf("read from pin 15: %d\n", value);
// wait a bit
delay(500);
}bcm2835_close();
return 0;}
  • Bước 3: biên dịch chương trình “blink.c” sẽ tạo ra file “blink”
gcc –o input input.c -l bcm2835
  • Bước 4: Chạy file vừa được biên dịch xong :

LẬP TRÌNH ĐIỀU KHIỂN LED 7 THANH

Mình sẽ hướng dẫn cách sử dụng GPIO để điều khiển Led 7 thanh, một ứng dụng rất quen thuộc với người học và làm điện tử.
1. Cấu tạo và cách tạo mã ra led 7 thanh
1.1. Cấu tạo


Cấu tạo leb 7 thanh

Led 7 thanh gồm 8 led đơn được nối với nhau tương ứng 7 đoạn và 1 dấu chấm.​
Nhìn vào sơ đồ nguyên lý ta thấy 8 led đơn được nối chung với nhau. Nếu các chân Anode(cực dương) được nối chung với nhau và nối với dương nguồn thì ta được led 7 thanh loại Anode chung.Tương tự led 7 thanh loại Cathode các chân được nối chung với nhau và nối với âm nguồn.
1.2. Tạo mã led 7 thanh
Ở đây ta tìm hiểu cách tạo mã led 7 thanh loại Anode . Loại Cathode cũng tương tự.​ Vì led 7 thanh loại Anode được nối chung cực dương nên led sẽ sáng tương ứng bit đầu vào mức logic 0 và led sẽ tắt tương ứng mức logic 1 (5V)​.
Như vậy ta sẽ có bảng mã như sau:
// Tạo mảng gồm 10 phần tử để chứa mã các chữ số từ 0->9 vừa tạo ra ở trên
uint8_t  chuso[10]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
2. Lập trình hiển thị ra LED 7 thanh
  • Các bước thực hiện việc tạo chương trình và biên dịch giống như các bước thực hiện ở bài 3 trong output và input GPIO.

  • Bước 1: Tạo một thư mục có tên là led7thanh
mkdir led7thanh
  • Bước 2: Vào thư mục led7thanh và tạo một chương trình có tên là “led7thanh.c”
$cd /led7thanh$sudo nano led7thanh.c
Chương trình hiển thị ra LED 7 thanh
#include <bcm2835.h>#define PINA RPI_V2_GPIO_P1_11#define PINB RPI_V2_GPIO_P1_12#define PINC RPI_V2_GPIO_P1_13#define PIND RPI_V2_GPIO_P1_15#define PINE RPI_V2_GPIO_P1_16#define PINF RPI_V2_GPIO_P1_18#define PING RPI_V2_GPIO_P1_22#define PINH RPI_V2_GPIO_P1_29//0xC0 = 0b1100 0000
uint8_t chuso[10]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
int main(int argc, char **argv)
{
if (!bcm2835_init())
return 1;
// Set the pin to be an output
bcm2835_gpio_fsel(PINA, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PINB, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PINC, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PIND, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PINE, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PINF, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PING, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PINH, BCM2835_GPIO_FSEL_OUTP);
// Display to LED 7 segment
while (1)
{
//Display number 0
bcm2835_gpio_write(PINA, HIGH);
bcm2835_gpio_write(PINB, HIGH);
bcm2835_gpio_write(PINC, LOW);
bcm2835_gpio_write(PIND, LOW);
bcm2835_gpio_write(PINE, LOW);
bcm2835_gpio_write(PINF, LOW);
bcm2835_gpio_write(PING, LOW);
bcm2835_gpio_write(PINH, LOW);
//Delay 2s
bcm2835_delay(2000);
//Display number 1
bcm2835_gpio_write(PINA, HIGH);
bcm2835_gpio_write(PINB, HIGH);
bcm2835_gpio_write(PINC, HIGH);
bcm2835_gpio_write(PIND, HIGH);
bcm2835_gpio_write(PINE, HIGH);
bcm2835_gpio_write(PINF, LOW);
bcm2835_gpio_write(PING, LOW);
//Delay 2s
bcm2835_delay(2000);
}
bcm2835_close();
return 0;
}
:) :( ;) :D :-/ :x :P :-* =(( :-O X( :7 B-) #:-S :(( :)) =)) :-B :-c :)] ~X( :-h I-) =D7 @-) :-w 7:P 2):) :!! \m/ :-q :-bd ^#(^

Post a Comment