Détection du rapport cyclique d'un signal rectangulaire

Bonjour, je dois réaliser un exercice dont voici l'énoncé :

"La première sortie doit s'activer si le rapport cyclique est inférieur à 40%, la seconde s'il est supérieur à 60%. S'il n'y a pas de signal, ou si le signal est carré, aucune sortie ne doit s'activer."

Voici mon code mais il ne fonctionne pas :

#define L1 4
#define Led1On digitalWrite(L1,1);
#define Led1Off digitalWrite(L1,0);
#define L2 5
#define Led2On digitalWrite(L2,1);
#define Led2Off digitalWrite(L2,0);
#define P1 2
#define Pous1On (digitalRead (P1)==0)
#define Pous1Off (digitalRead (P1)==1)

unsigned long duree,dureeA,dureeB;

void setup()
{
pinMode(P1, INPUT);
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
Serial.begin(9600);
}

void loop()
{
dureeA = pulseIn(P1, HIGH);
dureeB = pulseIn(P1, LOW);
duree=dureeA-dureeB;
if(duree<400000 && dureeA>0){Led1On;}
if(dureeA>600000){Led2On;}
Serial.print(duree);
Led1Off; Led2Off;
}

Je ne vois pas comment traiter les données reçues sur le moniteur série...
Si quelqu'un peut me mettre sur la voie, je ne suis pas sur d'utiliser la bonne méthode (pulseIn) ?
Merci

Salut,

Le problème c'est que ton premier pulseIn HIGH commence à compter lors de la transition bas-> haut et s'arrête de compter lors dde la transition haut-> bas puis le deuxième plusIn commence à compter à la première transition haut->bas, or elle est déjà passé lors du premier pulseIn.

Alors en soi dans la pratique ça sera surement pas un problème car il prendra la mesure de l'état bas à la période qui suivra. Si elles sont identique c'est bon. Donc déjà de ce côté la ton programme n'est pas parfait.

La d'où vient ton problème c'est les maths : si x=A+B, quel est le proportion de A dans x ? surement pas A-B ... :wink: