# 버튼을 누르면 부저에서 소리내기
목표 : 푸쉬버튼을 누르면 부저에서 소리내기
준비물 : 아두이노보드, 브래드보드, USB케이블, 부저 1개. 푸쉬버튼 1개, 10k옴 저항 1개, 점퍼케이블
입출력 설명
입력 : 푸쉬버튼 값(디지털 값, on/off, 1/0)
처리 : 푸쉬버튼의 현재 값을 읽어(digitalRead), 값이 1이면 led를 켜고 그렇지 않으면 led를 끈다.
출력 : 부저 (아날로그 값, 음)
## 회로도
부저의 -극(검정색 선)은 GND에 연결한다.
부저의 +극(빨간색 선)은 디지털 13번 핀에 연결한다.
푸쉬버튼의 위쪽 다리는 +극(5.5V)에 연결한다.
푸쉬버튼의 아래쪽 다리는 10K옴 저항을 이용하여 -극에 연결하고, 그 사이에 디지털 2번 핀과 연결한다.
## 프로그램 순서도
## 코드 (Sketch)
// 버튼을 누르면 소리내기
int pushbuttonPin = 2;
int buzzerPin = 7;
void setup(){
pinMode(pushbuttonPin, INPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
int val = digitalRead(pushbuttonPin);
if(val == 1){
tone(buzzerPin, 242);
Serial.println("Push!");
} else {
noTone(buzzerPin);
}
}
## 시뮬레이션
## 디버깅
1) 회로 확인하기
- 부저의 +와 –극이 제대로 연결되었는가?
- 코드에서 사용한 핀 번호와 실제로 사용한 하드웨어 핀 보드가 동일한가?
- 버튼의 각 핀에 맞게 연결했나요?
2) 코드 확인하기
- 핀 번호를 각 변수에 제대로 입력했는가?
# 음계 정보
도 C4 (242)
레 D4 (294)
미 E4 (330)
파 F4 (349)
솔 G4 (392)
라 A4 (440)
시 B4 (494)
도 C5 (523)
# 버튼을 누르면 도레미파솔라시도 순서대로 부저에서 소리내기
## 코드 (Sketch)
int pushbuttonPin = 2;
int buzzerPin = 13;
int melody[] = {242, 294, 330, 349, 392, 440, 494, 523};
int index = 0;
void setup(){
pinMode(pushbuttonPin, INPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
if(digitalRead(pushbuttonPin) == 1){
tone(buzzerPin, melody[index]);
index = index + 1;
delay(1000);
if(index > 8) {
index = 0;
}
Serial.println("Push!");
} else {
noTone(buzzerPin);
}
}
# 전자 키보드 만들기
목표 : 푸쉬버튼을 누르면 소리가 나는 간단한 전자 키보드 만들기
준비물 : 아두이노 키트, 푸쉬버튼, 10k옴 저항, 피에조
입출력 설명
입력 : digitalRead
출력 : 5음계, 솔(G4), 라(A4), 도(C5), 레(D5), 미(E5) 를 출력
## 하드웨어
## 코드 (Sketch)
void setup(){
for(int i = 8; i < 13; i++){
pinMode(i, INPUT);
}
pinMode(7, OUTPUT);
}
void loop(){
if(digitalRead(12) == 1){
sol();
}
if(digitalRead(11) == 1){
ra();
}
if(digitalRead(10) == 1){
Do();
}
if(digitalRead(9) == 1){
re();
}
if(digitalRead(8) == 1){
mi();
}
}
void sol(){
digitalWrite(7, HIGH);
delayMicroseconds(1276);
digitalWrite(7, LOW);
delayMicroseconds(1276);
}
void ra(){
digitalWrite(7, HIGH);
delayMicroseconds(1137);
digitalWrite(7, LOW);
delayMicroseconds(1137);
}
void Do(){
digitalWrite(7, HIGH);
delayMicroseconds(955);
digitalWrite(7, LOW);
delayMicroseconds(955);
}
void re(){
digitalWrite(7, HIGH);
delayMicroseconds(852);
digitalWrite(7, LOW);
delayMicroseconds(852);
}
void mi(){
digitalWrite(7, HIGH);
delayMicroseconds(759);
digitalWrite(7, LOW);
delayMicroseconds(759);
}
## 시뮬레이션