je suis actuellement en train de réaliser (ou plutot tenter de réaliser) un projet sur un drone, dont le but est d'assurer plus ou moins sa stabilité. Pour cela, je base mon système sur 2potentiomètres qui permettent de déterminer l'angle que fait mon drone par rapport à l'horizontale (désolé je présente juste succintement..). Il faut donc aussi que je crée un programme sur ma carte arduino leonardo, pour que en fonction de l'angle fait par mon drone, et donc la valeur en sortie de mon potentiomètre (que j'appelle val), un servomoteur soit activé et modifie la position du centre de gravité pour stabiliser le drone. Seulement, je suis relativement nul en programmation (je débute). J'ai la "base" de mon programme, mais quelque soit val, mon servo moteur tourne ds le sens trigo jusqu'a sa position maximale, puis tourne ds le vide (normal puisqu'il est au max). Mais même quand je crée un programme à part pour tester la rotation de mon servo moteur, celui-ci fait pareil. Voilà mon programme (une esquisse) :
#include <Servo.h>
int pot_1=A1;
int pot_2=A2;
int val_0=0;
int val_1;
int val_2;
Servo servo1;
Servo servo2;
prend exemple sur le code ServoMoodIndicator du starter kit :
/*
Arduino Starter Kit example
Project 5 - Servo Mood Indicator
This sketch is written to accompany Project 5 in the
Arduino Starter Kit
Parts required:
servo motor
10 kilohm potentiometer
2 100 uF electrolytic capacitors
Created 13 September 2012
by Scott Fitzgerald
http://arduino.cc/starterKit
This example code is part of the public domain
*/
// include the servo library
#include <Servo.h>
Servo myServo; // create a servo object
int const potPin = A0; // analog pin used to connect the potentiometer
int potVal; // variable to read the value from the analog pin
int angle; // variable to hold the angle for the servo motor
void setup() {
myServo.attach(9); // attaches the servo on pin 9 to the servo object
Serial.begin(9600); // open a serial connection to your computer
}
void loop() {
potVal = analogRead(potPin); // read the value of the potentiometer
// print out the value to the serial monitor
Serial.print("potVal: ");
Serial.print(potVal);
// scale the numbers from the pot
angle = map(potVal, 0, 1023, 0, 179);
// print out the angle for the servo motor
Serial.print(", angle: ");
Serial.println(angle);
// set the servo position
myServo.write(angle);
// wait for the servo to get there
delay(15);
}
Et quand tu met du code, met des blises code, dans l'éditeur de texte du forum c'est le bouton #
Pour ton projet, je n'ai pas compris ce que tu veux faire, met une photo
Merci de ta réponse, je vais regarder le code après pour essayer de le comprendre.
Mes photos sont pas sur ce pc, j'essayerai d'en mettre une plus tard pour présenter mon système. Et en gros pour le code, j'aimerai que par exemple si la valeur analogique donnée par mon potentiomètre soit supérieure (resp. inférieure) à une constante fixée (qui est le cas ou mon drone est horizontal), alors le servomoteur se mette à tourner dans le sens trigo (resp. horaire; ou inversement) jusqu'a ce que la valeur analogique soit égale à la constante. Mais je ne vois pas comment mettre en forme mon code, puisqu'une boucle "if" paraît inapplicable dans mon cas, et je suis vraiment pas calé en programmation .. ^^
eazier:
Merci de ta réponse, je vais regarder le code après pour essayer de le comprendre.
Mes photos sont pas sur ce pc, j'essayerai d'en mettre une plus tard pour présenter mon système. Et en gros pour le code, j'aimerai que par exemple si la valeur analogique donnée par mon potentiomètre soit supérieure (resp. inférieure) à une constante fixée (qui est le cas ou mon drone est horizontal), alors le servomoteur se mette à tourner dans le sens trigo (resp. horaire; ou inversement) jusqu'a ce que la valeur analogique soit égale à la constante. Mais je ne vois pas comment mettre en forme mon code, puisqu'une boucle "if" paraît inapplicable dans mon cas, et je suis vraiment pas calé en programmation .. ^^
bonjour,
il y a la solution switch case pour remplacer les if dans ce cas.
Bonjour,
l'option switch/case différencie des cas non ? Jusque là c'est cohérent, mais est-ce que mes servomoteurs arrêteront de tourner dès lors que la valeur constante sera atteinte ? Et si jamais la valeur analogique devient inférieure (en étant supérieure juste avant par exemple), le servomoteur va-t-il se mettre a tourner dans l'autre sens?
Re-post: ah non pardon, je pense que si je ne mets pas "break;", la arduino vérifiera les conditions en continue
tu peux mettre des void dans les case justement
on vérifie une valeur X ou une communication
switch
case valide :
on va dans le void mise a zero
break;
case invalide :
on va dans le void continue
break;