[아두이노] [강좌] 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
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
118 아두이노 ESP32 Analog Inputs (ADC) +4 icon 양재동메이커 02-12 16,137
117 아두이노 TIP : Serial의 Port가 Open 시점 확인 icon 양재동메이커 01-21 12,990
116 아두이노 ESP32 Boot Mode icon 양재동메이커 12-28 12,835
115 아두이노 아두이노 에러 리스트(Arduino Error list) icon 양재동메이커 11-24 17,818
114 아두이노 ESP32 main.cpp +1 icon 양재동메이커 11-19 13,181
113 아두이노 ESP32 EEPROM 와 IR Remote icon 양재동메이커 08-06 13,074
112 아두이노 Learn ESP32 icon 양재동메이커 06-25 12,655
111 라즈베리 파이 라즈베리 파이 (Raspberry Pi) 기초 icon 양재동메이커 06-19 14,149
110 라즈베리 파이 (동영상 강의) 라즈베리 파이 강좌 Link icon 양재동메이커 06-17 13,248
109 STM32 / MBED [MED] Switch debouncing icon HellMaker 12-30 15,226
108 기타 [타이젠] 아두이노의 16x2 LCD Display라이브러리 LiquidCrystal_I2C의 타이젠 포팅 icon 양재동메이커 09-15 14,803
107 기타 [타이젠] GPIO의 디지탈 출력과 입력 인터럽트의 C++ Class 제작 icon 양재동메이커 09-12 14,280
106 마이크로비트 서보 모터 icon HellMaker 09-03 14,098
105 마이크로비트 아날로그 온도센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 14,605
104 마이크로비트 터치센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 13,719
103 마이크로비트 디지털 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 12,900
102 마이크로비트 리니어 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 12,455
101 마이크로비트 불꽃 감지 센서 (마이크로 비트 센서 활용) icon HellMaker 08-26 12,793
100 마이크로비트 로터리 엔코더 (마이크로 비트 센서 활용) icon HellMaker 08-25 12,899
99 마이크로비트 2컬러 LED(3mm) (센서 활용) icon HellMaker 08-22 12,901