728x90

# 프로그램 설명

1. SPK_PIN11으로 define 한다int 배열 scales에 낮은 부터 높은 까지의 주파수를 선언한다.

 

2. setup() 부분에서 시리얼 전송 속도를 9600bps로 설정한다. tone() 함수를 사용하므로 pinMode() 함수로 OUTPUT모드를 설정할 필요가 없다.

 

3. loop() 부분에서 Serial.available() 함수를 사용하여 터미널 에뮬레이터에서 들어온 값이 있으면 true를 반환하여 int형 변수 inputSerial.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 을 순서대로 터미널 에뮬레이터에 입력한 경우이다.

- 각 입력에 맞는 옥타브를 스피커로 출력한다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기