#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
symbol V_type_sirene = b6
symbol V_inter = bit0
'variable pour pompier b2,b4,b5,b20,b21, w9 ,w10
dirsC = %00011010 'declare les broches C.1, C.3 et C.4 en entrée
'######################## Initialisation ########################
read 0,V_type_sirene 'On lit la derniére sirene enregistrée
pwmout 2,off 'On eteint le son
V_ordre = 0 'valeur de l'ordre à 0
V_inter = 0 'interrutpeur sur Off
'#################################################################################
'########################## Programme Principal ############################
'#################################################################################
do
readadc B_ordre,V_ordre ' Lecture de l'action à realiser
loop
'############################
' deuxiéme tâche
Start1:
do
'##### KLAXON #####
if V_ordre=24 then ' Si appui sur klaxon
if V_inter = 1 then ' Si la siréne etait lancée, on arrete start2 pour ne pas se marcher dessus
suspend 2
end if
do
pwmout pwmdiv16, 2, 143, 460 ' Le klaxon doit durer tant que la valeur est recu
loop while V_ordre=24 ' on boucle tant que le bouton est appuyé
pwmout 2,off ' On eteint le son
if V_inter = 1 then ' On reprend start2
resume 2
end if
end if
'##### CHANGEMENT #####
if V_ordre=72 then ' Si appui sur changement
do ' Anti-rebond
loop while V_ordre=72
inc V_type_sirene ' On change la sirene
if V_type_sirene > 4 then ' On reboucle entre 0 et 4
V_type_sirene = 0
end if
write 0 , V_type_sirene ' On enregsitre la nouvelle valeur en EEPROM
restart 2 ' RAZ de start2 "sirene" pour prise en compte du nouveau changement
end if
'##### LANCEMENT #####
if V_ordre=120 then ' Si appui sur sirene
do ' Anti-rebond
loop while V_ordre=120
inc V_inter ' Inversement de l'interrupteur
if V_inter = 0 then
restart 2 'Si l'interrupteur est a 0, on eteint le son en resetant la start2 ;
end if
end if
loop
'############################
' troisiéme programme
start2:
pwmout 2,off ' On eteint le son au lancement du start2
do
if V_inter = 1 then ' Si l'inter est à ON , alors on joue la sirene correspondante
on V_type_sirene goto pompier,police,gendarme,ambulance,pompierUS
end if
loop
'----------------------------
pompier:
do
pwmout pwmdiv16, 2, 143, 287 'fréq = 435 Hz
pause 1070
pwmout pwmdiv16, 2, 127, 256 'fréq = 488 Hz
pause 1070
loop
'----------------------------
police:
do
pwmout pwmdiv16, 2, 143, 287 'fréq = 435 Hz
pause 545
pwmout pwmdiv16, 2, 107, 216 'fréq = 580 Hz
pause 545
loop
'----------------------------
gendarme:
do
pwmout pwmdiv16, 2, 143, 287 'fréq = 435 Hz
pause 545
pwmout pwmdiv16, 2, 84, 171 'fréq = 732 Hz
pause 545
loop
'----------------------------
ambulance:
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
'----------------------------
pompierUS:
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