je suis en train de fabriquer un robot mais je me confronte à un problème. j'ai branché sur une carte de prototypage relié à un arduino une photo résistance qui allume un led quand la luminositée est faible avec un module ultra-son. Le code et les branchements marchent nickel mais quand j'ai rajouté un servo-moteur que je contrôle avec un joystick, la photorésistance et le module ultra-sons ne fonctionne plus en dépit du servo-moteur avec son joystick.
#include <Servo.h>
#define pinJx A1 // Broche pour l'axe X du joystick.
#define pinJy A2 // Broche pour l'axe Y du joystick.
#define pinSx 9 // Broche pour le signal du servomoteur X.
#define pinSy 10 // Broche pour le signal du servomoteur Y.
unsigned short X, Y; // Variables pour les valeurs du joystick.
Servo Sx, Sy; // Déclaration de deux objets Servo.
int trig = 2;
int echo = 3;
long lecture_echo;
long cm;
int val = 0;
int sensorPin = 0;
int ledPin = 13;
// Fonction setup(), appelée au démarrage de la carte Arduino
void setup() {
Serial.begin(9600);
pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
pinMode( ledPin, OUTPUT );
pinMode(pinSx, OUTPUT); // Broches fixées en sortie.
pinMode(pinSy, OUTPUT);
Sx.attach(pinSx); // Correspondance broche/servomoteur.
Sy.attach(pinSy);
Sx.write(90); // Mouvement du servomoteur en position initiale.
Sy.write(90);
}
// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop() {
X = analogRead(pinJx); // Lecture des valeurs du joystick.
Y = analogRead(pinJy);
Sx.write(joyToServo(X)); // Envoi des signaux de rotation.
Sy.write(joyToServo(Y));
}
byte joyToServo(unsigned short n) // Fonction de correspondance.
{
return (byte)(-0.175953 * n + 180); // f(x) calculée précédemment.
val = analogRead(sensorPin);
Serial.println(val);
if (val < 20) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
delay(1000);
// Mesure la tension sur la broche A0
int valeur = analogRead(A0);
// Envoi la mesure au PC pour affichage et attends 250ms
Serial.println(valeur);
delay(250);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echo = pulseIn(echo,HIGH);
cm = lecture_echo /58;
Serial.print("Distance en cm :");
Serial.println(cm);
delay(1500);
}
pouvez-vous me montrer mes erreurs et me les expliquer ?
Ça fait un moment que je n'ai pas codé avec Arduino mais je viens de tester, en python, l'erreur que tu dois faire je pense.
La suite de ton code après le return est ignoré : c'est le cas en python.
Si je comprends bien ton code, tu as fait l'erreur d'une fonction fourre-tout : JoyToServo(). Fais une autre fonction avec ce qui suit et tu l'utilises par la suite.
Enfin, arrête avec delay() et apprends millis(), en plus, ton projet se prête parfaitement à l'apprentissage de cette fonction. Les 2 fonctions font sensiblement la même chose : attendre, mais la première est bloquante, l'autre non. Dans ton code, pendant 2750ms, tu ne peux pas interagir. Imagine que ton véhicule est à moins de 2750 ms du mur => accident. Avec millis, tu as la main avec le joystick ou c'est automatique avec le capteur ultrasons, pourvu qu'il soit bien configuré.
Merci pour ta réponse je vais changer le code quand je rentrerai de de vacances je te tiens au courant pour d’éventuels problème.
Arduino programmation
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.