' ServoLed pour montage "Conrad" device=16f84A XTAL = 4 config WDT_OFF Dim ValeurPulse as Word Dim EtatLed1 as Byte Dim EtatLed2 as Byte Dim I as Byte Dim ExitWhile as Byte 'flag de sortie pour ValeurPulse=0 Dim FlagLed1 as Byte Dim CompteurCli1 as word Dim FlagLed2 as Byte Dim CompteurCli2 as word Dim PulseNeutre as Word dim Douze as byte DIM Dix as Byte Dim UnDeux as Byte Symbol Led1 = PORTB.1 ' Symbol Led2 = PORTB.2 Symbol Jmp1 = PORTA.1 Symbol Jmp2 = PORTA.2 Symbol Jmp3 = PORTA.3 Symbol LedRouge = PORTB.3 Symbol InPulse = PORTA.0 Symbol DelaiCli1=20 'Pour fréquence du clignotementled1 Symbol DelaiCli2=20 'Pour fréquence du clignotementled2 'Initialisation Start: low led1 low led2 ValeurPulse = PULSIN InPulse,1 'print $FE,1 'print $FE,2 'print "PulseInit = ",@ValeurPulse while ValeurPulse=0 ValeurPulse = PULSIN InPulse,1 'print $FE,1 'print $FE,2 high led1 low led2 delayms 300 high led2 low led1 delayms 300 Wend CompteurCli1=DelaiCli1 CompteurCli2=DelaiCli2 'for i = 1 to 5 ValeurPulse = PULSIN InPulse,1 'print $FE,1 'print $FE,2 'print "5 Pulses = ",@ValeurPulse 'delayms 1000 'next i Main: ValeurPulse = PULSIN InPulse,1 while ValeurPulse = 0 'Pulse présent ? 'Si pulse absent, alternance leds high LedRouge ValeurPulse = pulsin InPulse , 1 high led1 low led2 low LedRouge delayms 300 high led2 low led1 delayms 300 wend Neutre: low LedRouge ExitWhile=0 ValeurPulse = PULSIN InPulse,1 While ValeurPulse <10 ValeurPulse = pulsin InPulse , 1 'print $FE,1 'print $FE,2 'print "Init N = ",@ValeurPulse high led1 high led2 delayms 300 low led2 low led1 delayms 300 wend PulseNeutre = ValeurPulse ValeurPulse = PULSIN InPulse,1 if valeurPulse <>PulseNeutre then goto neutre ValeurPulse = PULSIN InPulse,1 if valeurPulse <>PulseNeutre then goto neutre 'Neutre trouvé 'print $FE,1 'print $FE,2 'print "Neutre trouvé" high LedRouge low led2 low led1 EtatLed1 = 0 EtatLed2 = 0 delayms 500 AttenteCommande: if Jmp1 = 0 and EtatLed1 = 1 then dec CompteurCli1 if CompteurCli1=0 then CompteurCli1=DelaiCli1 if Jmp3=0 then CompteurCli1=CompteurCli1/2 if FlagLed1 =0 then Flagled1 = 1 high Led1 else clear FlagLed1 low Led1 endif endif endif if Jmp2 = 0 And EtatLed2 = 1 then dec CompteurCli2 if CompteurCli2=0 then CompteurCli2=DelaiCli2 if Jmp3=0 then CompteurCli2=CompteurCli2/2 if FlagLed2 =0 then Flagled2 = 1 high Led2 else clear FlagLed2 low Led2 endif endif endif ValeurPulse = pulsin InPulse , 1 if ValeurPulse > PulseNeutre + 20 then if EtatLed1 =0 then high Led1 EtatLed1=1 else low Led1 EtatLed1 = 0 endif Gosub AttenteNeutre endif if valeurpulse = 0 then goto Main if ValeurPulse < PulseNeutre - 20 and ValeurPulse > 0 then if EtatLed2 =0 then high Led2 EtatLed2=1 else low Led2 EtatLed2 = 0 Endif Gosub AttenteNeutre endif if valeurPulse = 0 then Goto Main Goto AttenteCommande AttenteNeutre: ExitWhile=0 ValeurPulse = PULSIN InPulse,1 While ValeurPulse < PulseNeutre - 20 or ValeurPulse > PulseNeutre + 20 'Attente neutre ValeurPulse = pulsin InPulse , 1 if ValeurPulse =0 then ExitWhile=1 ValeurPulse=150 endif Wend If ExitWhile=1 then ValeurPulse=0 endif return cdata "Copyright Lichtenberger - V 1.1 24/11/04"