문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
cublocapp:an31005:index [2017/10/16 01:30] Comfile Technology |
cublocapp:an31005:index [2017/10/16 01:32] (현재) Comfile Technology |
||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | ====== AN31005 - 사운드(경고음)발생 ====== | ||
+ | 간단한 키 터치 음에서부터, 동작 개시음, 비상경보 음을 발생시키는 방법에 대하여 알아보겠습니다. | ||
+ | |||
+ | 큐블록에서 PWM 채널을 이용해서 소리를 만드는 방법과 일반 I/O 포트를 이용해서 소리를 만드는 방법이 있습니다. | ||
+ | |||
+ | 소리를 발생시키는 소자로 PIEZO 또는 스피커를 사용합니다. 스피커를 사용할 때에는 아래와 같이 콘덴서하나를 직렬로 연결해주세요. | ||
+ | |||
+ | {{ :cublocapp:an31005:speaker.png?nolink |}} | ||
+ | |||
+ | |||
+ | CB220/CB280 에서 I/O 포트 5 번은 PWM 0 번 채널이므로 간단하게 Freqout 명령만으로 소리를 만들 수 있습니다. | ||
+ | |||
+ | <code xbasic> | ||
+ | Const Device = CB280 | ||
+ | Low 5 | ||
+ | Freqout 0,5236 '440Hz 의 주파수를 발생 | ||
+ | Delay 500 '일정시간을 유지 | ||
+ | Pwmoff 0 '파형출력 멈춤 | ||
+ | </code> | ||
+ | |||
+ | <html><center> | ||
+ | <iframe width="560" height="315" src="https://www.youtube.com/embed/R6fqjPk3kpk" frameborder="0" allowfullscreen></iframe> | ||
+ | </center></html> | ||
+ | |||
+ | Freqout 명령과 Delay 명령만으로 간단한 음 (키터치음, 시작음)정도는 발생시킬 수 있습니다. | ||
+ | |||
+ | <code xbasic> | ||
+ | Const Device = CB280 | ||
+ | Low 5 | ||
+ | Freqout 0,4403 | ||
+ | Delay 200 | ||
+ | Freqout 0,3703 | ||
+ | Delay 200 | ||
+ | Freqout 0,3114 | ||
+ | Delay 200 | ||
+ | Freqout 0,2202 | ||
+ | Delay 200 | ||
+ | Pwmoff 0 | ||
+ | </code> | ||
+ | |||
+ | <html><center> | ||
+ | <iframe width="560" height="315" src="https://www.youtube.com/embed/lezn64LwhUw" frameborder="0" allowfullscreen></iframe> | ||
+ | </center></html> | ||
+ | |||
+ | 이 기능을 이용하여 음악을 연주할 수 있는 프로그램을 작성해 보았습니다. | ||
+ | |||
+ | ^ 옥타브 4 ^^^^^^^ 옥타브 5 ^^^^^^^ | ||
+ | |라 |시 |도 |레 |미 |파 |솔 |라 |시 |도 |레 |미 |파 |솔| | ||
+ | |A |B |C |D |E |F |G |H |I |J |K |L |M |N| | ||
+ | |||
+ | 한 음을 2 개의 캐릭터로 표현하는데, 옥타브에 따라서 다른 알파벳으로 음계를 적어주고, 이어서 숫자로 된 음길이를 적어줍니다. 음 길이 숫자가 클수록 음의 길이도 길어지게 됩니다. | ||
+ | |||
+ | <code xbasic> | ||
+ | Const Device = cb280 | ||
+ | Dim PLAYSTR As String | ||
+ | Low 5 | ||
+ | PLAYSTR = "G5E3E3G3E3C5" | ||
+ | PLAY 0,PLAYSTR | ||
+ | |||
+ | Do | ||
+ | Loop | ||
+ | End | ||
+ | Sub PLAY(CH As Byte,NOTE As String) | ||
+ | Dim PL As Byte | ||
+ | Dim CHAR As Byte | ||
+ | Const Integer PLAYTABLE = (5236,4665,4403,3923,3495,3299,2939, | ||
+ | 2618,2333,2202,1961,1747,1649,1469,0) | ||
+ | For PL=1 To Len(NOTE) Step 2 | ||
+ | CHAR = Asc(Mid(NOTE,PL,1)) - &H41 | ||
+ | Freqout CH,PLAYTABLE(CHAR) | ||
+ | CHAR = Asc(Mid(NOTE,PL+1,1)) - &H30 | ||
+ | Delay CHAR*100 | ||
+ | Next | ||
+ | Pwmoff CH | ||
+ | End Sub | ||
+ | </code> | ||
+ | |||
+ | * 위 소스 프로그램을 선택한뒤 ctrl+c로 카피해서, CUBLOC STUDIO에 ctrl+v하면 소스를 그대로 카피할 수 있습니다. | ||
+ | |||
+ | <html><center> | ||
+ | <iframe width="560" height="315" src="https://www.youtube.com/embed/EcrbGYni0wQ" frameborder="0" allowfullscreen></iframe> | ||
+ | </center></html> | ||
+ | |||
+ | PLAYSTR = "G5E3E3G3E3C5" | ||
+ | | ||
+ | 바로 이부분에 음정과 길이를 적어주었습니다. 여러분의 이 부분을 다른 걸로 한번 바꿔보세요. 그러면 다른 음악(?)을 즐길수도 있을 것입니다. | ||
+ | |||
+ | |||
+ | [[cublocapp:index|큐블록 어플리케이션 노트]] |