반응형
소프트박스 라즈베리파이 RGB LED 실습 코드
보드에서 사용된 RGB LED 이미지
라즈베리파이와 연결도를 Fritzing 으로 그린 이미지
아래는 단순한 RGB Test 코드
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #include <signal.h> //Signal 사용 헤더파일 #include <unistd.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> //exit() 사용 헤더파일 #include <wiringPi.h> #define RGBLEDPOWER 24 //BCM_GPIO 19 #define RED 4 //27 #define GREEN 3 //28 #define BLUE 7 //29 void sig_handler(int signo); // SIGINT 사용 마지막 종료 함수 int main (void) { signal(SIGINT, (void *)sig_handler); //시그널 핸들러 함수 if (wiringPiSetup () == -1) { fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno)); return 1 ; } pinMode(RGBLEDPOWER, OUTPUT); pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); int i; for (i =0; i<10 ;i++) { digitalWrite(RGBLEDPOWER, 1); digitalWrite(RED, 1); digitalWrite(BLUE, 0); digitalWrite(GREEN, 0); delay(1000); digitalWrite(RED, 0); digitalWrite(BLUE, 1); digitalWrite(GREEN, 0); delay(1000); digitalWrite(RED, 0); digitalWrite(BLUE, 0); digitalWrite(GREEN, 1); delay(1000); } digitalWrite(GREEN, 0); return 0 ; } void sig_handler(int signo) { printf("process stop\n"); digitalWrite(RED, 1); digitalWrite(GREEN, 1); digitalWrite(BLUE, 1); digitalWrite(RGBLEDPOWER, 0); //Off exit(0); } |
출력신호를 PWM 방식으로 구현하여 1,650만 가지 색이 나오도록 한 소스 코드 잘 보면 프로그램이 제대로 만든 것 같지 않다. 실행해 보면 LED 가 한쪽 색으로 나온다. 무언가 다른 변화를 주어서 많은 색깔 변화를 즉각적으로 볼 수 있었으면 좋겠다. 약 30~90 단계 정도로.
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include <signal.h> //Signal 사용 헤더파일 #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> //exit() 사용 헤더파일 #include <wiringPi.h> #include <softPwm.h> #include <wiringPi.h> //#define RGBLEDPOWER 24 //BCM_GPIO 19 #define RED 4 // BCM_GPIO 16 - OUT #define GREEN 3 // BCM_GPIO 20 - OUT #define BLUE 7 // BCM_GPIO 21 - OUT void Bpluspinmodeset(void); void setRGB(int r, int g, int b); void sig_handler(int signo); // SIGINT 핸들러 함수 int main (void) { if(wiringPicheck()) printf("Fail"); Bpluspinmodeset(); signal(SIGINT, (void *)sig_handler); int i; digitalWrite(RGBLEDPOWER, 1); while(1) { int i = 0, j = 0, k=0; printf("RGB LED Various Color"); softPwmCreate(RED, 0, 255); softPwmCreate(GREEN, 0, 255); softPwmCreate(BLUE, 0, 255); for (i = 0; i <= 250; i=i+10){ for (j = 0; j <= 250; j=j+10){ for (k = 0; k <= 250; k=k+10){ setRGB(i,j,k); delay(50); printf("R:%d G:%d B:%d\n", i, j, k); } } } setRGB(0,0,0);//clear LED delay(50); } return 0 ; } int wiringPicheck(void) { if (wiringPiSetup () == -1) { fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno)); return 1 ; } } void Bpluspinmodeset(void) { pinMode(RGBLEDPOWER, OUTPUT); pinMode (RED, OUTPUT); pinMode (GREEN, OUTPUT); pinMode (BLUE, OUTPUT); } void setRGB(int r, int g, int b) { softPwmWrite(RED, 255-r); softPwmWrite(GREEN, 255-g); softPwmWrite(BLUE, 255-b); } void sig_handler(int signo) // ctrl-c 로 종료시 실행되는 함수 { printf("process stop\n"); digitalWrite(RED, 0); digitalWrite(GREEN, 0); digitalWrite(BLUE, 0); digitalWrite(RGBLEDPOWER, 0); //Off exit(0); } |
반응형
'소프트박스 라즈파이' 카테고리의 다른 글
가장 간단한 라즈베리파이 개발 환경 구성할 때 주의할 점 (0) | 2019.10.12 |
---|---|
Raspberry Pi3 B+ 에서 DHT11 온도습도 센서 프로그램 (0) | 2019.10.11 |
도약 창업챌린지 강의 파일 링크 (0) | 2019.10.07 |
라즈베리파이 DC 모터 실습코드 (0) | 2019.01.19 |
라즈베리파이 부저 스피커 실습 소스코드 (0) | 2019.01.19 |