공부중
[Arduino] RGB LED, PWM 본문
728x90
1. 이론
RGB LED
2. RGB LED 실습
#define LED_R 11
#define LED_G 10
#define LED_B 9
void setup() {
// Serial.begin(9600);
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
}
void loop() {
digitalWrite(LED_R, 255);
digitalWrite(LED_G, 145);
digitalWrite(LED_B, 98);
}
3. LGB LED 랜덤 출력
// 변수 선언
long randNumber1;
long randNumber2;
long randNumber3;
#define LED_R 11
#define LED_G 10
#define LED_B 9
void setup() {
// 시리얼 통신 시작
Serial.begin(9600);
// 핀 모드 설정
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
}
void loop() {
// 무작위 숫자 생성
randNumber1 = random(0, 256); // 0에서 255 사이의 값을 생성
randNumber2 = random(0, 256);
randNumber3 = random(0, 256);
// LED에 무작위 밝기 적용
analogWrite(LED_R, randNumber1);
analogWrite(LED_G, randNumber2);
analogWrite(LED_B, randNumber3);
// 생성된 무작위 수 출력
Serial.print(randNumber1);
Serial.print('/');
Serial.print(randNumber2);
Serial.print('/');
Serial.print(randNumber3);
Serial.println('/');
// 500 밀리초 동안 대기
delay(500);
}
4. 조도 센서로 밝기 제어
// 조도 센서로 밝기 제어
int pins_LED[] = {9, 10, 11}; // 예시로, PWM이 가능한 핀 번호를 지정
void setup() {
Serial.begin(9600);
}
void loop() {
int ADC_value = analogRead(A0); // ADC 값
int PWM_value = ADC_value >> 2; // PWM 값
// int PWM_value = ADC_value / 4; // 위와 동일. ADC 값을 4로 나누어 0-255 범위로 조정
Serial.print("ADC value: ");
Serial.print(ADC_value);
Serial.print(", PWM value: ");
Serial.println(PWM_value);
for(int i = 0; i < 3; i++){
analogWrite(pins_LED[i], PWM_value);
}
delay(1000);
}
2칸 >>(비트 쉬프트 연산)을 하는 이유, 즉, 4로 나누는 이유 : 아날로그가 표현하는 값은 0~1023의 값을 표현하는데, PWM은 0~255의 값을 표현하기 떄문이다.
5. PWM 신호를 사용하여 단음 재생
부저 연결
int piezo = 9; // 피에조 부저가 연결된 핀 번호
int sw = 8; // 버튼이 연결된 핀 번호
int numTones = 8; // 연주할 톤의 개수
int tones[] = {261, 294, 330, 349, 392, 440, 494, 523}; // 각 톤에 해당하는 주파수
void setup() {
pinMode(piezo, OUTPUT); // 피에조 핀을 출력으로 설정
pinMode(sw, INPUT_PULLUP); // 버튼 핀을 내부 풀업 저항을 사용한 입력으로 설정
}
void loop() {
if (digitalRead(sw) == LOW) { // 버튼이 눌렸을 때
for (int i = 0; i < numTones; i++) { // 모든 톤을 연주
tone(piezo, tones[i]); // 피에조 부저에서 톤 출력
delay(500); // 각 톤을 500ms 동안 연주
}
noTone(piezo); // 모든 톤 연주 후 부저 끄기
}
}
6. 부저를 사용해서 노래 만들기
말할 수 없는 비밀 시크릿 secret 앞부분 열심히 만들어봤다.
너무 열심해 해서 영상까지 찍었다.
int piezo = 9; // 피에조 부저가 연결된 핀 번호
int sw = 8; // 버튼이 연결된 핀 번호
int numTones = 50; // 연주할 톤의 개수
int tones[] = {
247, // 낮은 시
330, // 미
370, // 파#
392, // 솔
494, // 시
440, // 라
392, // 솔
370, // 파#
392, // 솔
370, // 파#
440, // 라
523, // 높은 도
0,
494, // 시
440, // 라
370, // 파#
392, // 솔
494, // 시
659, // 높은 미
0,
440, // 라
330, // 미
392, // 솔
370, // 파#
440, // 라
587, // 높은 레
0,
294, // 레
392, // 솔
370, // 파#
392, // 솔
370, // 파#
330, // 미
392, // 솔
523, // 높은 도
0,
440, // 라
494, // 시
523, // 높은 도
587, // 높은 레
494, // 시
392, // 솔
0,
330, // 미
523, // 높은 도
494, // 시
440, // 라
392, // 솔
440, // 라
494 // 시
};
void setup() {
pinMode(piezo, OUTPUT); // 피에조 핀을 출력으로 설정
pinMode(sw, INPUT_PULLUP); // 버튼 핀을 내부 풀업 저항을 사용한 입력으로 설정
}
void loop() {
if (digitalRead(sw) == LOW) { // 버튼이 눌렸을 때
for (int i = 0; i < numTones; i++) { // 모든 톤을 연주
tone(piezo, tones[i], 500); // 피에조 부저에서 톤 출력, 500ms 동안 지속
delay(500); // 다음 톤 전에 대기
}
noTone(piezo); // 모든 톤 연주 후 부저 끄기
}
}
728x90
'프로그래밍 > Arduino' 카테고리의 다른 글
[Arduino] 모터 (0) | 2025.01.25 |
---|---|
버스 공공데이터 활용 (0) | 2025.01.25 |
[Arduino] 초음파 센서 (0) | 2025.01.24 |
[Arduino] 온습도 센서(DHT11) (0) | 2025.01.23 |
[Arduino] 조도센서 CDS 실습 (0) | 2025.01.23 |