728x90
# 프로그램 설명
1. SPK_PIN을 11으로 define 한다. int 배열 scales에 낮은 ‘도’ 부터 높은 ‘도’ 까지의 주파수를 선언한다.
2. setup() 부분에서 시리얼 전송 속도를 9600bps로 설정한다. tone() 함수를 사용하므로 pinMode() 함수로 OUTPUT모드를 설정할 필요가 없다.
3. loop() 부분에서 Serial.available() 함수를 사용하여 터미널 에뮬레이터에서 들어온 값이 있으면 true를 반환하여 int형 변수 input에 Serial.read() 함수로 데이터를 읽어 저장하고 그 값을 터미널 에뮬레이터에 출력한다. (어떤 값을 입력했는지 보기 위해서 출력하였다.)
4. tone() 함수를 사용하여 입력한 값에 따라 스피커로 해당되는 옥타브의 주파수를 출력한다.
이 경우에 배열의 인덱스는 0부터 시작하므로 입력한 값에서 1에 대한 값을 빼주어야 원하는 옥타브의 주파수와 일치한다. 출력한 후 300ms 동안 지연시간을 갖고 noTone() 함수를 사용하여 스피커의 소리를 끈다.
5. 스피커를 GPIO 11번 단자(빨간 선)와 GND(검은 선)에 연결한다.
6. enter키를 입력하지 않아도 되기 위하여 터미널 에뮬레이터(Tera Term)를 사용하여 데이터를 입력한다.
# 코드
#define SPK_PIN 11
int scales[]={262, 294, 330, 347, 392, 440, 494, 524}; // 주파수 선언
void setup() {
Serial.begin(9600); // 시리얼 전송 속도 설정
}
void loop() {
if(Serial.available()>0){ // 들어온 데이터가 있으면
int input = Serial.read(); // 데이터를 읽어 변수 input에 저장
Serial.write(input); // 데이터 출력
tone(SPK_PIN, scales[input-'1']); // 옥타브 출력
delay(300);
noTone(SPK_PIN); // 스피커 소리 끔
}
}
# 실행 결과 (터미널 에뮬레이터 – Tera Term)
- 1~8, 1~8, 1358 을 순서대로 터미널 에뮬레이터에 입력한 경우이다.
- 각 입력에 맞는 옥타브를 스피커로 출력한다.
반응형
'전공 공부 > 아두이노프로그래밍' 카테고리의 다른 글
적외선 장애물회피센서, 만능기판에 설치한 LED (0) | 2021.01.18 |
---|---|
적외선 장애물회피센서, 내장 LED (0) | 2021.01.18 |
serialEvent() 함수를 사용하여 터미널에서 입력한 문자를 터미널 에뮬레이터로 반환하는 프로그램 (0) | 2021.01.17 |
터미널에서 소문자를 입력하면(enter를 치지 않아도 입력됨) 아두이노가 이를 받아 대문자로 변환하여 다시 터미널로 출력하는 아두이노 프로그램 (0) | 2021.01.17 |
직렬통신 (0) | 2021.01.17 |