Bonjour à tous,
Je réalise actuellement un programme pour m'amuser qui s'avère être une machine à malabar en lego.
Il faut insérer une pièce de 5 centimes pour que la machine vous donne un chewing-gum.
Le capteur pour la pièce utilisé est, faute d'alternatives, un capteur ultrasonique de distance HC-SR04.
Le servomoteur qui s'occupe de la distribution du bonbon est un servomoteur 9 grammes.
J'ai donc réalisé un programme qui fait en sorte que si la distance n'est pas comprise dans une plage de valeur que j'ai fixée (erreurs de précisions du module ultrasonique) le servomoteur doit tourner de N degrés.
Voici donc la situation:
Le capteur sonique repère bien la distance, et la variation de distance lorsque la pièce passe.
Néanmoins, lorsque la variation a lieu et que la valeur sort de la plage fixée, le servo moteur refuse de tourner. j'ai effectuer plusieurs changement, mais rien de concluant...
Je me tourne donc vers vous afin de connaitre mon erreur ca je n'ai pas une grande experience en arduino et j'apprends en m'amusant.
Je tourne sous une carte arduino uno et j'utilise arduino IDE version 1.8.9.
Je n'ai aucun problème lors du téléversement vers la carte.
Enfin voici mon code:
Bonjour, merci beaucoup de votre réponse.
J'ai modifié le || par or, car il faut qu'il soit au dessus de ... OU en dessous de...
Le servomoteur bouge à present à l'initialisation de la carte juste après le téléversement. Il fait une sorte d'aller retour mais le passage de la pièce, malgré la variation de distance n'active toujours pas le servomoteur...
Voici le code modifié:
#include "NewPing.h"
#include <Servo.h>
Servo my_servo;
int angleSM;
const int pinSM = 7;
#define trigPin 9
#define echoPin 8
float duration, distance;
void setup() {
my_servo.attach(pinSM);
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
angleSM = 10;
}
void loop() {
// Write a pulse to the HC-SR04 Trigger Pin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Measure the response from the HC-SR04 Echo Pin
duration = pulseIn(echoPin, HIGH);
// Determine distance from duration
// Use 343 metres per second as speed of sound
distance = (duration / 2) * 0.0343;
// Send results to Serial Monitor
Serial.print("Distance = ");
Serial.print(distance);
Serial.println(" cm");
delay(10);
if ((distance >= 6.50) or (distance <=7.50))
{
angleSM = 150;
}
delay(200);
my_servo.write(angleSM);
}
or et || c'est exactement la même chose
or c'est une extension (invention ?) de l'ide arduino. C'est défini dans les fichier inclus (sournoisement) par l'ide
on a
#define or ||
Personnellement je t'engagerai plutôt à utiliser || pour avoir un programme plus conforme au standard C et C++ et avoir un programme plus lisible (au moins pour les habitués de C/C++)
Dans ton cas, tu veux que (distance >= 6.50) et que (distance <=7.50).
Il faut que les deux conditions soient 'vrai'.
En C, le 'et' se note '&&'.
En utilisant le 'ou' ('or' ou '||'), tu valides (distance >= 6.50) ou (distance <=7.50).
Ta condition est vraie quelque soit la valeur 'distance' puisque au moins une des deux conditions est vraie.