[아두이노] [강좌] 24. tone()/noTone() 함수 (1) - 함수 설명

189478d8a4225ef359a8672222675c9b.jpg 

(이번 강좌에서는 그림이나 사진이 하나도 없길래 그냥 넣어 봄)


이번 시간에는 아두이노에서 편리한 기능으로 제공하는 tone() 함수와 noTone() 함수에 대해 알아보자. tone() 함수는 아두이노가 얼마나 친절한지 보여주는 대표적인 함수이다.



moon_and_james-2 

 

 

tone() 함수는 지정한 핀으로 50% 듀티비의 PWM 파형을 출력하는 함수이다그럼 analogWrite() 함수와 뭐가 다른가바로주파수를 조절할 수 있다는 점이다


(듀티비를 조절할 수 없으니, 엄밀히 따지면 PWM 파형은 아니군.)

 

analogWrite() 함수의 경우 듀티비를 조절할 수 있었지만 주파수는 약 490Hz 또는 980Hz로 고정되어 있었다그래서 모터 등을 제어하기 위해 사용된다고도 했었고. (너무 오래 되서 기억이 가물가물..)

 

그런데 펄스 신호로 제어되는 모듈 중에는 듀티비를 이용해 제어하는 방법 말고 주파수 변화에 의해 제어되는 모듈도 있다대표적인 것이 바로 부저(Buzzer). 주파수에 따라 부저음의 높낮이가 달라진다음파와 같은 원리지.


듀티비와 주파수의 개념이 헷갈리면 안된다. 주파수는 1초에 몇 번의 파형(HIGH,LOW를 한 번 반복하는)이 만들어지는가를 뜻하고, 듀티비는 한 주기 내에서 HIGH의 비율을 나타낸다. 

어려운 내용이 아니므로 일단 함수 설명부터 보자.

 

 

 

tone(pin, frequency)

tone(pin, frequency, duration)


 

 매개 변수

 

 pin : 파형을 출력할 핀 번호

 

 frequency : 출력할 파형의 주파수(Hz 단위)

 

 duration : 출력 시간(밀리초 단위). 지정하지 않으면 noTone() 함수가 호출될 때까지 출력됨.





쉽다이렇게 쉬울 수가.

 

핀 번호랑 주파수만 정해주면 된다심지어 출력 시간까지 정할 수 있다너무 친절해서 눈물이ㅜㅜ

 

tone() 함수에는 아두이노의 모든 핀을 사용할 수 있다. frequency 값은 31 이하로는 설정할 수 없고, frequency 변수의 타입이 unsigned int 형이라 최대 65535Hz까지밖에 설정할 수 없다이만큼 크게는 실제로 써 본 적이 없어서 정확한 주파수가 나올 지 모르겠지만나오니까 unsigned int 형으로 정해뒀겠지?

 

duration 값은 지정할 수도 있고지정하지 않을 수도 있다지정하지 않을 경우에도 noTone() 함수를 이용해서 출력을 중단할 수 있지만실제로 사용하다 보면 알 것이다출력 시간을 결정할 수 있다는 것이 얼마나 편리한 기능인지를ㅋㅋㅋㅋㅋㅋ

 

(200ms 부저 울리고 300ms 쉬고다시 울리고를 10번 반복하는 기능을 만들 때시리얼 통신을 위해 delay() 함수를 쓸 수 없을 때출력 시간을 설정할 수 없다면 얼마나 복잡한 소스가 탄생할 지 생각하기만 해도 무섭ㅜㅜ)

 

 

 

noTone(pin)



 매개 변수

 

 pin : 파형 출력을 중단할 핀 번호.





noTone() 함수는 파형 출력을 중단시킨다매개 변수의 pin 번호는 반드시 tone() 함수로 파형이 출력 중인 번호여야 한다안 그러면 아무 동작도 안 함.

 

 

참 편리한 tone() 함수지만 한가지 아쉬운 점은 있다바로 여러 핀을 동시에 사용할 수 없다는 것즉 부저 2개 이상을 동시에 소리 나게 할 수 없다는 것이다.

 

2개 이상 사용할 수는 있다동시가 아니라 연속해서 사용할 수 밖에 없다뭔가 헷갈리노.

 


예를 들어,


 tone(11, 500);

 delay(1000);

 noTone(11);

 tone(12, 500);

 delay(1000);

 noTone(12); 

 

이렇게는 가능하지만,


 tone(11, 500);

 tone(12, 500);

 delay(1000);

 noTone(11);

 noTone(12); 

 


이렇게는 사용할 수 없다는 것이다.

 

 

아두이노 홈페이지의 tone()에 대한 설명을 보면 여러 개의 핀으로 tone() 함수를 이용해 파형을 출력하고 싶다면출력되던 핀에 noTone() 함수로 출력을 멈춘 후 다음 핀으로 파형을 출력할 수 있다고 되어 있다.

 

만일 위 경우처럼 noTone() 함수로 출력을 중단하지 않고 다시 tone() 함수를 사용하게 된다면 나중에 사용된 tone() 함수는 무시된다, 11번 핀으로밖에 파형이 출력되지 않는다는 말.

 

 

또 아두이노 메가(Mega 2560/ADK) 이 외의 보드에서는 tone() 함수를 사용할 경우 3번 핀과 11번 핀을 analogWrite() 함수에 사용할 수 없다. tone() 함수는 타이머를 이용해 파형을 출력하는데우노(Uno) 등 대부분의 아두이노 보드에서는 3번과 11번 핀으로 PWM을 출력하기 위해 사용하는 타이머와 tone() 함수에서 사용하는 타이머가 같기 때문메가는 타이머가 많아서 서로 방해하지 않는다.

 


역시 메가 킹왕brown_and_cony-76

 

 

tone() 함수에서 duration 값을 지정했고지정한 시간이 지나 파형 출력이 중단되었다면 다시 noTone() 함수로 파형 출력을 중단하지 않아도 다른 핀으로 파형을 출력할 수 있다.

 

 

 

간만에 이렇게 쉽고짧고간단한 강좌가ㅜㅜ

 

다음 강좌에서는 tone() 함수와 noTone() 함수를 이용해서 부저로 멜로디를 출력하는 실습을 함께 진행해보자.

 

부저가 없다면… 어쩌지?? ;;;

 

 

에라그래도 실습해보자바바이.

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
38 아두이노 [강좌] 30. I2C 통신 (2) - Wire 함수 알아보기 icon 양재동메이커 03-20 22,228
37 아두이노 [강좌] 29. I2C 통신 (1) - I2C 통신이란 무엇인가 icon 양재동메이커 03-20 26,640
36 아두이노 [강좌] 28. 시간 관련 함수 (3) - MsTimer2 라이브러리 icon 양재동메이커 03-20 18,261
35 아두이노 [강좌] 27. 시간 관련 함수 (2) - BlinkWithoutDelay 예제 icon 양재동메이커 03-20 12,936
34 아두이노 [강좌] 26. 시간 관련 함수 (1) - delay() / millis() icon 양재동메이커 03-20 18,544
33 아두이노 [강좌] 25. tone()/noTone() 함수 (2) - 부저 실습 icon 양재동메이커 03-20 13,036
32 아두이노 [강좌] 24. tone()/noTone() 함수 (1) - 함수 설명 icon 양재동메이커 03-20 14,587
31 아두이노 [강좌] 23. Interrupt(인터럽트) (3) - 인터럽트 함수 알아보기 icon 양재동메이커 03-20 13,735
30 아두이노 [아두이노 강좌] 22. Interrupt(인터럽트) (2) - 스위치로 LED 켜고 끄기 예제 icon 양재동메이커 03-20 20,951
29 아두이노 [강좌] 21. Interrupt(인터럽트) (1) - 인터럽트란 무엇인가 icon 양재동메이커 03-16 13,289
28 아두이노 [아두이노 강좌] 20. String (3) - 유용한 함수들 icon 양재동메이커 03-16 20,986
27 아두이노 [강좌] 19. String (2) - String() 생성자와 + 연산 icon 양재동메이커 03-16 11,336
26 아두이노 [강좌] 18. String (1) - 문자형(char) 배열과 String icon 양재동메이커 03-16 21,210
25 아두이노 [강좌] 17. Serial 통신(3) - 유용한 기능들 icon 양재동메이커 03-15 15,341
24 아두이노 [강좌] 16. Serial 통신(2) - 시리얼 통신 함수 알아보기 icon 양재동메이커 03-15 19,683
23 아두이노 [강좌] 15. Serial 통신(1) - 시리얼 통신이란 무엇인가 icon 양재동메이커 03-15 18,013
22 아두이노 [강좌] 14. analogRead()/analogWrite() 실습 - 조도 센서 + LED icon 양재동메이커 03-15 11,534
21 아두이노 [강좌] 13. analogWrite() 실습 - LED 밝기 조절하기(Fade 예제) icon 양재동메이커 03-15 11,810
20 아두이노 [강좌] 12. 아날로그 기능(2) - analogWrite() 함수 icon 양재동메이커 03-14 13,193
19 아두이노 [강좌] 11. analogRead() 함수 실습 - 습도 센서 icon 양재동메이커 03-14 11,303