4.15 Ejemplo 13
Generación de sonido, librería de sonido...
Las señales de audio se utilizan con frecuencia cuando se necesita llamar la atención de usuario para hacer algo, confirmar que alguno de los botones se ha pulsado, avisar que se ha llegado hasta los valores mínimos o máximos etc. Pueden ser una simple señal de pitido así como melodías de una duración más larga o más corta. En este ejemplo se muestra cómo generar un sonido por medio de funciones que pertenecen a la librería Sound.
Además de estas funciones, la función Button que pertenece a la misma librería se utiliza para probar los botones de presión.
' Cabecera******************************************************
program example_13 ' Nombre de programa
sub procedure Tone1()
Sound_Play(659, 250) ' Frecuencia = 659Hz, duración = 250ms
end sub
sub procedure Tone2()
Sound_Play(698, 250) ' Frecuencia = 698Hz, duración = 250ms
end sub
sub procedure Tone3()
Sound_Play(784, 250) ' Frecuencia = 784Hz, duración = 250ms
end sub
sub procedure Melody() ' Tocar una melodía divertida 1
Tone1() Tone2() Tone3() Tone3()
Tone1() Tone2() Tone3() Tone3()
Tone1() Tone2() Tone3()
Tone1() Tone2() Tone3() Tone3()
Tone1() Tone2() Tone3()
Tone3() Tone3() Tone2() Tone2() Tone1()
end sub
sub procedure ToneA() ' Tonos utilizados en la función Melody2
Sound_Play( 880, 50)
end sub
sub procedure ToneC()
Sound_Play(1046, 50)
end sub
sub procedure ToneE()
Sound_Play(1318, 50)
end sub
sub procedure Melody2() ' Tocar Melody2
dim counter as byte
for counter = 9 to 1 step -1
ToneA()
ToneC()
ToneE()
next counter
end sub
main: ' Inicio de programa
ANSEL = 0 ' Configurar pines analógicos como digitales de E/S
ANSELH = 0
C1ON_bit = 0 ' Deshabilitar los comparadores
C2ON_bit = 0
TRISB = 0xF0 ' Configurar los pines RB7..RB4 como entradas y RB3 como salida
Sound_Init(PORTD, 3)
Sound_Play(880, 5000)
while TRUE ' Bucle infinito
if (Button(PORTB,7,1,1)) then ' Si se presiona PORTB.7 tocar Tone1
Tone1()
while (RB7_bit <> 0)
nop ' Esperar que se suelte el botón
wend
end if
if (Button(PORTB,6,1,1)) then ' Si se presiona PORTB.6 tocar Tone1
Tone2()
while (RB6_bit <> 0)
nop ' Esperar que se suelte el botón
wend
end if
if (Button(PORTB,5,1,1)) then ' Si se presiona PORTB.5 tocar Tone1
Melody2()
while (RB5_bit <> 0)
nop ' Esperar que se suelte el botón
wend
end if
if (Button(PORTB,4,1,1)) then ' Si se presiona PORTB.4 tocar Tone1
Melody()
while (RB4_bit <> 0)
nop ' Esperar que se suelte el botón
wend
end if
wend
end. ' Final de programa
Para que este ejemplo funcione apropiadamente, es necesario marcar las siguientes librerías en la ventana Library Manager antes de compilar el programa: