반응형
라즈베리파이 GPIO를 이용하여 숫자 표시기인 FND에 원하는 숫자를 표시해보자. FND는 공통 애노드 형과 공통캐소드 형이 있다. 쉽게 구별하는 방법은 Anode 형은 성적이 좋은 A급이니까 + 로 생각하여 공통 단자에 VCC를 연결한다고 생각하고 Cathod 형은 성적이 좋지 않으면 받는 C 니까 - 라고 생각하여 공통 단자에 GND가 연결된다고 생각하면 기억하기 쉽다.
아래는 공통 애노드형과 공통 캐소드형 FND 에서 숫자를 표시하는 방법을 보여준다. 사실 위에 말한 내용만 기억하면 설명이 필요 없다. 애노드 형은 공통 단자가 VCC 이므로 숫자를 만들 때 해당하는 led 신호선에 LOW를 출력하여 숫자를 만들고, 반대로 캐소드 형은 공통 단자가 GND 이므로 해당하는 segment led 신호선에 HIGH를 출력하면 불이 들어온다. 원리만 알면 쉽다. 그렇다고 아들에게 산수를 가르치거나 와이프에게 운전을 가르치려고 시도하면 안 된다. ^^
단일 FND를 라즈베리파이에 연결할 경우 아래 연결도를 참고한다.
소스코드는 아래와 같다.
#include <wiringPi.h>
#define FND_SEL_S0 4
#define FND_DB_A 6
#define FND_DB_B 12
#define FND_DB_C 13
#define FND_DB_D 16
#define FND_DB_E 19
#define FND_DB_F 20
#define FND_DB_G 26
#define FND_DB_DP 21
#define A_BIT 0x01
#define B_BIT 0x02
#define C_BIT 0x04
#define D_BIT 0x08
#define E_BIT 0x10
#define F_BIT 0x20
#define G_BIT 0x40
#define DP_BIT 0x80
#define FND_DB_PIN_NUM 8
const int FndNumberTable[10] = {
A_BIT | B_BIT | C_BIT | D_BIT | E_BIT | F_BIT , // '0'
B_BIT | C_BIT , // '1'
A_BIT | B_BIT | D_BIT | E_BIT | G_BIT, // '2'
A_BIT | B_BIT | C_BIT | D_BIT | G_BIT, // '3'
B_BIT | C_BIT | F_BIT | G_BIT, // '4'
A_BIT | C_BIT | D_BIT | F_BIT | G_BIT, // '5'
C_BIT | D_BIT | E_BIT | F_BIT | G_BIT, // '6'
// A_BIT | B_BIT | C_BIT , // '7'
0x27,
A_BIT | B_BIT | C_BIT | D_BIT | E_BIT | F_BIT | G_BIT, // '8'
A_BIT | B_BIT | C_BIT | F_BIT | G_BIT, // '9'
};
const int FndPinTable[8] = {
FND_DB_A, FND_DB_B, FND_DB_C, FND_DB_D,
FND_DB_E, FND_DB_F, FND_DB_G, FND_DB_DP
};
int main (void)
{
if (wiringPiSetupGpio() == -1)
return 1;
int i;
pinMode(FND_SEL_S0, OUTPUT); //Fnd Sel Pin OUTPUT Set
for(i = 0; i<FND_DB_PIN_NUM; i++) {
pinMode(FndPinTable[i], OUTPUT); //Fnd Data Pin OUTPUT Set
}
while(1)
{
digitalWrite(FND_SEL_S0, LOW);
for( i = 0; i<FND_DB_PIN_NUM; i++) {
if(FndNumberTable[7] & (1<<i)) {
digitalWrite(FndPinTable[i], HIGH);
}
else {
digitalWrite(FndPinTable[i], LOW);
}
delay(1);
}
}
return 0;
}
아래 소스코드를 상세히 설명한다.
Program Source | Description |
#include <wiringPi.h> | GPIO access library 헤더파일 선언 |
#define FND_SEL_S0 4 | FND_SEL 포트 S0 핀 정의 |
#define FND_DB_A 6 #define FND_DB_B 12 #define FND_DB_C 13 #define FND_DB_D 16 #define FND_DB_E 19 #define FND_DB_F 20 #define FND_DB_G 26 #define FND_DB_DP 21 |
FND_DB 포트 A~DP 핀 정의 |
#define A_BIT 0x01 #define B_BIT 0x02 #define C_BIT 0x04 #define D_BIT 0x08 #define E_BIT 0x10 #define F_BIT 0x20 #define G_BIT 0x40 #define DP_BIT 0x80 |
FND 각 핀의 비트 값 정의 |
#define FND_DB_PIN_NUM 8 | FND_DB 포트 핀 개수 |
const int FndNumberTable[10] = { A_BIT | B_BIT | C_BIT | D_BIT | E_BIT | F_BIT , B_BIT | C_BIT , A_BIT | B_BIT | D_BIT | E_BIT | G_BIT, A_BIT | B_BIT | C_BIT | D_BIT | G_BIT, B_BIT | C_BIT | F_BIT | G_BIT, A_BIT | C_BIT | D_BIT | F_BIT | G_BIT, C_BIT | D_BIT | E_BIT | F_BIT | G_BIT, A_BIT | B_BIT | C_BIT , A_BIT | B_BIT | C_BIT | D_BIT | E_BIT | F_BIT | G_BIT, A_BIT | B_BIT | C_BIT | F_BIT | G_BIT, }; |
FND의 각 비트 조합으로 표현가능한 숫자 배열 선언 |
const int FndPinTable[8] = { FND_DB_A, FND_DB_B, FND_DB_C, FND_DB_D, FND_DB_E, FND_DB_F, FND_DB_G, FND_DB_DP }; |
FND 핀 테이블 |
int main (void) | |
{ | |
if (wiringPiSetupGpio() == -1) return 1; |
Wiring Pi의 GPIO를 사용하기 위한 설정 |
pinMode(FND_SEL_S0, OUTPUT); | Fnd Sel Pin OUTPUT Set |
int i; for(i = 0; i< FND_DB_PIN_NUM; i++) { pinMode(FndPinTable[i], OUTPUT); } |
Fnd Data Pin OUTPUT Set |
while(1) { |
|
digitalWrite(FND_SEL_S0, LOW); | FND_SEL 포트 S0 핀에 LOW 신호 출력 |
for( i = 0; i< FND_DB_PIN_NUM; i++) { if(FndNumberTable[5] & (1<<i)) { digitalWrite(FndPinTable[i], HIGH); } else { digitalWrite(FndPinTable[i], LOW); } delay(1); } } |
숫자 5에 해당하는 FND의 LED를 점등하기 위하여 각 비트에 차례로 HIGH/LOW 신호를 출력 |
return 0; } |
컴파일과 실행 명령어는 아래와 같다.
컴파일 명령어 | gcc –o fnd fnd.c -lwiringPi | 실행파일명을 fnd로 설정하여 컴파일한다. |
실행 | sudo ./fnd | 프로그램을 실행한다. |
반응형
'개발자 > 라즈베리파이4' 카테고리의 다른 글
AIoT 지능형 사물인터넷 혹은 사물 지능 융합기술이란? (0) | 2022.11.07 |
---|---|
Raspberry Pi Pico 윈도우에서 개발하기 (1) | 2022.10.26 |
mysqli_real_connect(): (HY000/1045): Access denied for user 'phpmyadmin'@'localhost' (using password: YES) (1) | 2022.09.05 |
라즈베리파이 i2c lcd display 제어 (1) | 2022.09.02 |
라즈베리파이 FAN 제어 실습 코드 (1) | 2022.08.30 |
라즈베리파이 부저 제어 (0) | 2022.08.29 |
라즈베리파이 음성 녹음 재생 모듈 (1) | 2022.08.26 |
Raspberry Pi PICO 사용 방법 (1) | 2022.08.02 |
더욱 좋은 정보를 제공하겠습니다.~ ^^