라즈베리 파이, WiringPi를 이용한 GPIO 제어
WiringPi 설치하기전 Git 설치
sudo apt-get install git-core
라즈베리 파이 업데이트
sudo apt-get update
sudo apt-get upgrade
Git을 통해 WiringPi 내려받기
git clone git://git.drogon.net/wiringPi
다운로드 완료 후, 빌드 수행
cd wiringPi
./build
gpio 유틸리티 실행
GPIO 확장보드의 28과 29핀을 쓸 것. (BCM 20, 21)
라즈베리파이 GPIO (General purpose input/output)
74HC08N, Quad 2-input AND gate
#include <wiringPi.h>
#include <stdio.h>
#define A 28
#define B 29
int main(void)
{
wiringPiSetup();
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
while(1)
{
printf("A = Lo, B = Lo: Out = ?\n");
digitalWrite(A,LOW);
digitalWrite(B,LOW);
delay(1000);
printf("A = Lo, B = Hi: Out = ?\n");
digitalWrite(A,LOW);
digitalWrite(B,HIGH);
delay(1000);
printf("A = Hi, B = Lo: Out = ?\n");
digitalWrite(A,HIGH);
digitalWrite(B,LOW);
delay(1000);
printf("A = Hi, B = Hi: Out = ?\n");
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
delay(1000);
}
return 0;
} |
컴파일시 -lwiringPiDev 붙여줘야 함
pi@raspberrypi:~/wiringPi $ gcc -o Gpio GPIO_RPi.c -l wiringPi
실행
pi@raspberrypi:~/wiringPi $ sudo ./Gpio
실행결과
AND GATE이므로 28,29핀에 HIGH 신호가 들어올 때(4번째 PRINTF문) 불이 켜지는 것을 볼 수 있다.
digitalWrite(A,HIGH); digitalWrite(B,HIGH);
LED없이 출력값 보기
#include <wiringPi.h>
#include <stdio.h>
#define IN 27
#define A 28
#define B 29
int main(void)
{
wiringPiSetup();
pinMode(IN,INPUT);
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
while(1)
{
printf("A = Lo, B = Lo: Out = ");
digitalWrite(A,LOW);
digitalWrite(B,LOW);
if(digitalRead(IN))
{
printf("Hi\n");
}
else
{
printf("Lo\n");
}
delay(1000);
printf("A = Lo, B = Hi: Out = ");
digitalWrite(A,LOW);
digitalWrite(B,HIGH);
if(digitalRead(IN))
{
printf("Hi\n");
}
else
{
printf("Lo\n");
}
delay(1000);
printf("A = Hi, B = Lo: Out = ");
digitalWrite(A,HIGH);
digitalWrite(B,LOW);
if(digitalRead(IN))
{
printf("Hi\n");
}
else
{
printf("Lo\n");
}
delay(1000);
printf("A = Hi, B = Hi: Out = ");
digitalWrite(A,HIGH);
digitalWrite(B,HIGH);
if(digitalRead(IN))
{
printf("Hi\n");
}
else
{
printf("Lo\n");
}
delay(1000);
}
return 0;
} |
위 소스 if 문에 대한 설명
1 == digitalRead(IN)) // 1은 참을 의미, 디지털 신호가 들어올 때.
1 =! digitalRead(IN)) // 1이 아닐때는 왼쪽과 같이 소스를 짤 수 있음.
결과 : 두 핀 모두 HIGH일 때, Hi라는 문장이 출력된다.
printf("A = Hi, B = Hi: Out = ");digitalWrite(A,HIGH); digitalWrite(B,HIGH); if(digitalRead(IN)) { printf("Hi\n"); }
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
20160427_장진웅_업무일지_디지털 제어_기본 논리회로 실험2 (0) | 2016.04.27 |
---|---|
20160426_장진웅_업무일지_디지털 제어_기본 논리회로 실험1 (0) | 2016.04.27 |
20160425_장진웅_업무일지_디지털 제어_회로 기초 이론 (0) | 2016.04.27 |
20160426_김도관_업무일지_디지털제어_RPi GPIO 제어 (2) | 2016.04.27 |
20160425_김도관_업무일지_디지털제어_회로 기초 (0) | 2016.04.26 |
2016-04-25_조재찬_업무일지_디지털제어-회로 기초 (0) | 2016.04.25 |
20160421_장진웅_업무일지_공장내Network_일대일통신6_멀티채팅2, 패킷보기 (1) | 2016.04.21 |
20160420_장진웅_업무일지_공장내Network_일대일통신5_멀티채팅 (1) | 2016.04.20 |