J'ai réalisé un projet simple avec arduino: deux capteurs ultrasons reliés chacun à une LED et un buzzer. Si quelque chose passe devant l'un des capteurs, la LED correspondante brille et le buzzer sonne à une certaine fréquence. Si c'est l'autre capteur qui détecte quelque chose, alors la deuxième LED brille et le buzzer sonne à une fréquence différente.
Seulement voilà, quand j'essaye ma manip, seulement un capteur fonctionne et le buzzer bip à une certaine pulsation en continue. Je vous laisse le code ci-dessous.
si on utilise la version de tone() avec le paramètre de durée, comme tone(6, 440, 200), il est inutile d'invoquer notone() à la suite. Le son s'arrête tout seul après la durée demandée.
En contrepartie, tout est bloqué pendant l'appel à tone().
dans ton code:
tone(9,600,100);
digitalWrite(ledPin, HIGH);
le son démarre, dure 100 ms, puis s'arrête.
ENSUITE seulement, tu allumes la LED.
Merci pour vos réponses !
Est ce que ça pose problème si j'utilise un buzzer pour les deux capteurs ?
Il faudrait donc que j'utilise la fonction tone comme spécifiée et le problème devrait être résolu ?
Je ne suis pas expert du tout, mais je pense que dès le départ, il est bon de commenter copieusement son code et de l'organiser au mieux, ça évite de se demander un jour pourquoi y'a un truc qui machine pas comme on voudrait.
J'ai appris à mes dépends que les capteurs du type HC-SR04 par exemple aiment bien qu'on les laisse bosser tranquilou. Utilise un serial.println et un petit delay(50) à chaque opération, je n'ai pas testé ton code, je 'ai qu'un capteur US et je ne peux pas tester ton montage, mais je ne serais pas étonné que ton capteur ne renvoie rien, il lui faut du temps.
1 - tes variables distanceL et distanceR doivent être de type float, et non pas unsigned long.
En travaillant sur des entiers, tu t'exposes à des erreurs d'arrondi.
2 - tes appels à notone() ne servent à rien.
comme tu as utilisé la forme de tone() à 3 paramètres :
la durée du son est fixée dès l'appel, à 100 ou 200 ms dans ton cas
J'aimerai que si un obstacle passe devant le capteur, le buzzer sonne et une led (non présente dans le dernier programme) s'allume et idem pour le deuxième capteur (led d'une autre couleur et buzzer sonne à une autre fréquence). Il faudrait en effet que je rajoute une condition si les deux capteurs s'activent en même temps.
Le problème que je rencontre est le suivant: un seul capteur fonctionne, quand quelque chose passe devant le second rien ne se passe, et le buzzer va émettre un bip à un certain rythme et la led va clignoter au même rythme et ce de manière continu.
Les deux capteurs sont-ils orientés de manière à ne pas se gêner ?
Note que pulsein ne correspond pas à l'envoi d'une pulsation mais à l'écoute. La syntaxe est :
pulseIn(pin, value, timeout)
Parameters:
pin: the number of the pin on which you want to read the pulse. (int)
value: type of pulse to read: either HIGH or LOW. (int)
timeout (optional): the number of microseconds to wait for the pulse to start;
default is one second (unsigned long)
Ton code est séquentiel : il fait écouter le premier capteur puis le second. Mais le timeout du premier est de 1 seconde par défaut: si rien ne revient pendant cette seconde, le code va attendre puis passer à l'écoute du second capteur. Si un signal revient au second capteur pendant l'attente du premier, rien n'est capté au final.
Je pense que tu devrais faire un code plus rapide, avec des timeout plus courts. Si tu veux détecter des obstacles à 15 cm, le timeout optimal serait le temps pour le son de parcourir 30 cm (15 cm aller et retour), soit à 300m/s ça fait 1 ms. Tu peux mettre une marge et prendre 1.5 ms soit 1500 microsecondes...