Bonjour,
J’essais de mesurer une fréquence sur le GPIO d’un raspberry pi 3 car mon capteur de courant m’envoie une certaine fréquence en fonction du courant. C’est une fréquence carré d’amplitude 3,3V. Je n’arrive pas à mesurer le temps entre 2 front montant qui correspond à la période avec les fonctions d’interruption. Comment faut il faire pour mesurer la période ?
Voici mon programme qui ne fonctionne pas car il affiche le temps de rafraîchissement de l’affichage et non la période :
.#!/usr/bin/env python
# -- coding: utf-8 --
import RPi.GPIO as GPIO
import time
# declare les numero de port
Frequence = 12
led_rouge = 40
# decrit le mode de numeration
GPIO.setmode(GPIO.BOARD)
# configure en sortie le port de la led
GPIO.setup(led_rouge,GPIO.OUT,initial=0)
# configure en entree le port de la fréquence d'entrée
GPIO.setup(Frequence,GPIO.IN)
# declare les detections d'evenement sur le port de la fréquence
GPIO.add_event_detect(Frequence, GPIO.RISING,bouncetime=20)
# fonctions qui traitent les evenements front montant
def interruption_front_montant (Frequence):
global temps
global front
front=1
temps=time.time()
return 1
# declare 2 appels aux fonctions qui traiteront les evenements bouton
GPIO.add_event_callback(Frequence,interruption_front_montant)
# tache de fond
def main():
global temps_initial
temps_initial=0
global temps_final
temps_final=0
global temps
temps=0
global auto
auto=1
global front
front=0
global ecart
ecart=0
while True:
if front == 1 :
front=0
if auto == 1 :
GPIO.output(led_rouge,1)
temps_initial = temps
else :
GPIO.output(led_rouge,0)
temps_final = temps
auto = not auto
ecart = (temps_initial - temps_final)
print('Période du signal :')
print round(abs(ecart),3)
ecart=0
time.sleep(1)
return 0
if __name__ == '__main__':
main()
Merci d’avance.