#PICAXE 08M2
'#################################################################################
'########################## Programme Musique #############################
'#################################################################################
'######################## Configuration ########################
' B_ pour Broche, c'est le nom ou est branché le composant
' E_ pour Etat, c'est la valeur de la broche
' V_ pour variable, c'est l'endroit ou est enregistrer la valeur de la broche
Symbol B_ordre = C.4
symbol V_ordre = b1
'variable pour la sirene pompierUS b2,b4,b5,b20,b21, w9 ,w10
dirsC = %00011010 'declare les broches C.1, C.3 et C.4 en sortie
'######################## Initialisation ########################
pwmout 2,off 'On eteint le son
'#################################################################################
'########################## Programme Principal ############################
'#################################################################################
do
readadc B_ordre,V_ordre ' Lecture de l'action à realiser
if V_ordre <> b3 then ' Verifie si y'as un changement
b3 = b3+128 ' rajoute la valeur du gyro pour l'enlever de la verification si on allume le gyro
if V_ordre <> b3 then
b3 = b3 - 256 ' Soustrait la valuer du gyor ( 2x128 ) pour verifier si l'on a eteint le gyro
if V_ordre <> b3 then
restart 1 ' Si y'as eu un changement sans prendre en compte le gyro alors on redemarre la tcahe son
end if
end if
end if
b3 = V_ordre
loop
'############################
' les SONs
Start1:
pwmout 2,off ' On eteint le son
do
'##### KLAXON #####
if V_ordre=64 or V_ordre=192 then ' Si appui sur klaxon
do
pwmout pwmdiv16, 2, 143, 460 ' Le klaxon doit durer tant que la valeur est recu
loop ' on boucle tant que le bouton est appuyé
end if
'##### Sirene 1 : pompierUS #####
if V_ordre=8 or V_ordre=136 then ' Si la sirene seule(1) ou avec gyro(17) est selectionée
b2=205
w9=b2*2
b4=65
Do
random w10 'w10=(b21,b20)
w10=5*b20 +400 'w10 aléatoire de 400 à 1675 mS
do
dec b2 'glissement fréquence montée
w9=b2*2 'rapp cyclique 50%
pwmout pwmdiv16, 2, b2, w9
pause 30
loop while b2>b4 'b4=65 -->940 Hz
pause w10
random w10 'w10=(b21,b20)
w10=4*b20 'b20 = 0 à 255 --> w10= 0 à 765
b21=b21//4 'b21=0,1,2,3
b5=51*b21+100 'b5 aléatoire: 100(620Hz) , 151(410Hz), 202(308Hz), 253(246Hz)
do
inc b2 'glissement fréquence descente
w9=b2*2
pwmout pwmdiv16, 2, b2, w9
pause 50
loop while b2<b5 'relance sirène suivant fréquences
pause w10
Loop
end if
'##### Sirene 2 : ambulance #####
if V_ordre=16 or V_ordre=144 then
do
pwmout pwmdiv16, 2, 148, 298 'fréq = 420Hz
pause 166
pwmout pwmdiv16, 2, 120, 242 'fréq = 516Hz
pause 166
pwmout pwmdiv16, 2, 148, 298 'fréq = 420Hz
pause 166
pwmout 2, off
pause 1500
loop
end if
'##### Sirene 3 : gendarme #####
if V_ordre=24 or V_ordre=152 then
do
pwmout pwmdiv16, 2, 143, 287 'fréq = 435 Hz
pause 545
pwmout pwmdiv16, 2, 84, 171 'fréq = 732 Hz
pause 545
loop
end if
'##### Sirene 4 : pompier #####
if V_ordre=32 or V_ordre=160 then
do
pwmout pwmdiv16, 2, 143, 287 'fréq = 435 Hz
pause 1070
pwmout pwmdiv16, 2, 127, 256 'fréq = 488 Hz
pause 1070
loop
end if
loop
'############################
'Gyrophare
start2:
do
if V_ordre > 127 then ' On allume le gyro quand valeur de l'ordre est supreieur a 15
inc bit0
pinB.0 = bit0
pinb.1 = bit0 - 1
pause 300
else
low B.0
low B.1
b0=0
end if
loop