augmenter de 10 degrés l'inclinaison du servomoteurs à chaques envoie

Bonjours à tous

Après un Échec total :sweat_smile: je me relance dans mon projet sous un nouvelle angles voilà pour le moment j’ai fais ce code

// --- Déclaration des constantes ---

// --- Inclusion des librairies ---

#include <Servo.h> // librairie pour servomoteur 


// --- Déclaration des constantes utiles ---

//--- Constantes utilisées avec le servomoteur 
int angle;

const int angleMin  = 0;
const int angleMax = 180;

// --- Déclaration des constantes des broches E/S numériques ---

const int broche_servo=2; // Constante pour la broche 2
// --- Déclaration des constantes des broches analogiques ---


// --- Déclaration des variables globales ---

 int octetReception=0; // variable de stockage des valeurs reçues sur le port Série
 long nombreReception=0; // variable de stockage du nombre  reçu sur le port Série
 long nombreReception0=0; // variable de stockage du dernier nombre  reçu sur le port Série
 String chaineReception=""; // déclare un objet String vide pour reception chaine
int position_servo=0;

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

//--- Création objet servomoteur 
Servo mon_servo;  // crée un objet servo pour contrôler le servomoteur


// ////////////////////////// 2. FONCTION SETUP = Code d'initialisation ////////////////////////// 
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter 1 seule fois au démarrage du programme --- 

// ------- Initialisation fonctionnalités utilisées -------  

Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission 

//--- Initialisation Servomoteur 
mon_servo.attach(broche_servo, angleMin, angleMax);  // attache l'objet servo à la broche de commande du servomoteur


// ------- Broches en sorties numériques -------  
 pinMode (broche_servo,OUTPUT); // Broche broche_servo configurée en sortie

// ------- Broches en entrées numériques -------  
mon_servo.write(position_servo);
// ------- Activation si besoin du rappel au + (pullup) des broches en entrées numériques -------  

// ------- Initialisation des variables utilisées -------  

}
// ********************************************************************************

////////////////////////////////// 3. FONCTION LOOP = Boucle sans fin = coeur du programme //////////////////
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()


// --- ici instructions à exécuter par le programme principal --- 

//---- code type réception valeur sur le port série --- 

if (Serial.available()>0) { // si un octet en réception 

	octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable
      

         if (octetReception=='Q') { // si Octet reçu est le Q 
         mon_servo.write(0) ; // positionne le servo à l'angle voulu en fonction des valeurs min/max  
         delay(200);
         }
         if (octetReception=='H') { // si Octet reçu est le H 
          mon_servo.write(30) ; // positionne le servo à l'angle voulu en fonction des valeurs min/max  
          delay(200);
	}


	


} // fin si octet réception


} // fin fonction recevoirNombre


// ////////////////////////// Fin du programme //////////////////// 


// ////////////////////////// Mémo instructions //////////////////// 
// ////////////////////////// Fin Mémo instructions ////////////////////

Donc pour le moment j’envoie la commande par le moniteur série “Q” pour mettre le servomoteur à 0 Degrés
et “H” pour qu’il se positionne à 30 Degrés

Mais ce que je voudrai c’est que quand j’envoie “H” dans le moniteur série le servomoteur bouge de +10 Degrés à chaque fois, puis encore +10 Degrés quand je renvoie “H” et ainsi de suite

Merci d’avance

Bonjour,

Une solution pourrait être ceci

void loop()
{ // debut de la fonction loop()
	static uint8_t i = 0;
	static uint8_t angleCourant = 0;
	// --- ici instructions à exécuter par le programme principal --- 

	//---- code type réception valeur sur le port série --- 

	if (Serial.available() > 0) 
	{ 
		// si un octet en réception 
		octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable

		if (octetReception=='Q') // si Octet reçu est le Q
		{
			angleCourant = 0; // positionne le servo à l'angle voulu en fonction des valeurs min/max 
			i = 0;
		}
		
		if (octetReception=='H' && i==0) // si Octet reçu est le H et que c'est la première fois
			angleCourant += 30;   
		else if (octetReception=='H' && i>0)
			angleCourant += (angleCourant <= angleMax) ? 10 : 0;
		 
		mon_servo.write(angleCourant);
		delay(200);
		i++;
	}

}

Si c’est ce n’est pas ce que tu souhaites dis le ! :slight_smile:

Bon courage

Bonsoir

merci c'est parfait : )

Et si je veut faire la même chose avec "Q" mais en faisant -10 degrés à chaque fois. C'est possible ?

Cordialement

lesaccrosduvol: Bonsoir Et si je veut faire la même chose avec "Q" mais en faisant -10 degrés à chaque fois. C'est possible ?

Faudrait quand même faire un petit effort. On vient de te donner un code qui fonctionne pour H avec déplacement en positif. Même sans être une bête en programmation ce n'est pas très compliqué de copier la partie concernée, de changer la lettre qui déclenche l'action et de modifier le signe du déplacement.

Bonsoir

Et bien oui figure toi que si je pose la question c’est qu’il y avait une raison à cela
Je suis peut être vraiment plus nul que la plus part des gens ici, mais j’ai quand même pensé à essayer avant de poster quelques choses comme avant tout messages d’ailleurs . Et parfois j’ai même parfois honte de ce que j’ai fait comme encore ici

void loop()
{ // debut de la fonction loop()
	static uint8_t i = 0;
	static uint8_t angleCourant = 0;
	// --- ici instructions à exécuter par le programme principal --- 

	//---- code type réception valeur sur le port série --- 

	if (Serial.available() > 0) 
	{ 
		// si un octet en réception 
		octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable

		if (octetReception=='Q') // si Octet reçu est le Q
		{
			angleCourant = 0; // positionne le servo à l'angle voulu en fonction des valeurs min/max 
			i = 0;
		}
		
		if (octetReception=='H' && i==0) // si Octet reçu est le H et que c'est la première fois
		
            	angleCourant += 30;   
		else if (octetReception=='H' && i>0)
			angleCourant += (angleCourant <= angleMax) ? 10 : 0;


              if (octetReception=='A' && i==0) // si Octet reçu est le H et que c'est la première fois
		angleCourant -= -30;   
		else if (octetReception=='A' && i<180)
			angleCourant -= (angleCourant >= angleMin) ? -10 : -0;

		mon_servo.write(angleCourant);
		delay(200);
	

}
}

Où j’ai encore fait une erreur des plus stupides mais j’ai déjà lu toute les documentation en français qui existe sur le sujet de l’arduino et à chaque fois j’ai l’impression que c’est du chinois.

Donc oui cela peut paraître stupide de continuer alors que je ne comprend presque rien mais je veux faire aboutir mon projet et je veux qu’il fonctionnent même si il faut faire tout les forum qui existe.

Peut être " fdufnews" ne voulais tu pas me faire ressentir , le faite d’être carrément incapable mais c’est le sentiment que j’ai ressentit. Mais je te remercie encore du mal que tu tes donné sur mon autre TOPIC qui était sur le même sujet mais j’ai complétement décroché et c’est pour cela que j’ai décidé de recommencer sous un nouvelle angle et si il le faut je recommencerai encore et encore

Cordialement

Je ne te traite pas d’incapable mais ta manière de poser la question donne à penser que tu n’as rien fait de ton coté.
Si tu as un code, même qui ne fonctionne pas comme attendu, tu le joins à ton post, tu expliques ce que tu voulais faire, tu détailles ce que tu obtiens et on t’aidera à la mettre au point.

Donc, ton code ne semble pas ridicule, qu’est-ce qui ne va pas dans son exécution.

Déjà aucun des if ne va pouvoir fonctionner correctement, il manque les accolades pour la plupart

B@tto:
Déjà aucun des if ne va pouvoir fonctionner correctement, il manque les accolades pour la plupart

Les accolades sont obligatoires lorsqu’il y a un bloc d’instruction de plusieurs lignes.
Du point de vue de la syntaxe pure, cette écriture est bonne

if (octetReception=='H' && i==0) // si Octet reçu est le H et que c'est la première fois
      angleCourant += 30;   
else if (octetReception=='H' && i>0)
      angleCourant += (angleCourant <= angleMax) ? 10 : 0;

Bonsoir

C’est vrai que tout de même il faut l’avouer vous donnez de votre temps libre sur ce forum pour aidez les personnes en difficulté , Et pour cela on ne vous remerciera jamais assez … :smiley:

Voilà ce que j’ai fais

void loop()
{ // debut de la fonction loop()
	static uint8_t i = 0;
	static uint8_t angleCourant = 0;
	// --- ici instructions à exécuter par le programme principal --- 

	//---- code type réception valeur sur le port série --- 

	if (Serial.available() > 0) 
	{ 
		// si un octet en réception 
		octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable

		if (octetReception=='I') // si Octet reçu est le Q
		{
			angleCourant = 90; // positionne le servo à l'angle voulu en fonction des valeurs min/max 
			i = 90;
		}
		
		if (octetReception=='H' && i==0){ // si Octet reçu est le H et que c'est la première fois
			
                          angleCourant += 30;  
} 
		else if (octetReception=='H' && i>0){
			angleCourant += (angleCourant <= angleMax) ? 10 : 0; //fait tourner de +10 Degrés le servomoteur 
		 }
		
                 if (octetReception=='A' && i==0) {// si Octet reçu est le A et que c'est la première fois
		

                        angleCourant -= -30;   
                 }
		else if (octetReception=='A' && i<180){
			angleCourant = (angleCourant >= angleMin) ? -10 : -0; // Fait tourner de -10 Degrés le servomoteur

                 }
                mon_servo.write(angleCourant);
		delay(200);

Problème quand je fais “A” le servomoteur bouge de +10 Degrés au lieu de -10 Degrés

Au passage j’en profite pour savoir si quelqu’un pouvait me dire si il y a des cours de programmation pour arduino En ILlE-ET-VILAINE plutôt près de RENNES

Cordialement

Bonsoir,

Je ne suis pas certain de comprendre, tu veux appuyer Q pour remettre le servo à 0, H pour faire +10° et A pour faire -10° ? Mais tu veux aussi que le premier palier soit de 30° ? est-ce vrai pour A et H ?

Pour ta dernière question, je ne connais pas le déroulement de tes tests, mais dans ta dernière condition, tu réalises une affectation de valeur uniquement et non une opération sur la valeur qui est contenue par la variable. du coup tant que tu appuieras sur A et que tu auras reçu un nombre de fois strictement inférieur à 180 des lettres, tu ne feras que écrire 0 sur ton servo (on ne peut pas écrire de valeur d’angle < 0 , c’est automatiquement bloqué à 0).

En passant, ton angleCourant -= -30; est équivalent à angleCourant = angleCourant +30 , puisque tu effectues l’opération " - (- ) "

lesaccrosduvol: Au passage j'en profite pour savoir si quelqu'un pouvait me dire si il y a des cours de programmation pour arduino En ILlE-ET-VILAINE plutôt près de RENNES

A Rennes, voir les ateliers arduino au LabFab : http://www.labfab.fr/

Tu devrais mettre sur le papier ce que tu veux que ton programme fasse.
Quand j’entre tel lettre le programme fait tel action si l’angle courant est de tant ou tel autre condition.
Et ainsi de suite pour toutes les commandes que tu veux envoyer.

Ton programme d’un point de vu de la syntaxe est bon mais il y a des complications inutiles qui embrouille tout.
Par exemple la variable i ne sert à rien. Elle n’est d’ailleurs pas mise à jour systématiquement. Si tu analyses ton besoin tu vois que i peut être remplacé par angleCourant ou alors j’ai mal compris la logique que tu veux appliquer.
Certaines conditions qui fonctionnent pour un test sont mal transposées pour un autre test.
Cette ligne va bloquer le servo à 180°

else if (octetReception=='A' && i<180){

quand tu appuies sur H le servo avance de 10 en 10 donc fatalement à un moment tu vas te trouver à 180° et le test ci-dessus exclu 180 donc tu ne pourras pas redescendre.
Il faut la remplacer par

else if (octetReception=='A' && angleCourant<=180){

Là il y a une erreur l’angle ne peut pas être négatif

         if (octetReception=='A' && i==0) {// si Octet reçu est le A et que c'est la première fois
               angleCourant -= -30;   
         }

C’est plus affaire de gout mais personnellement pour gérer des listes de commandes je trouve que le switch… case… donne un code plus clair et moins alambiqué qu’une succession de if surtout que tu glisses des else if au milieu ce qui fais qu’assez vite on perd la logique de test.

if (Serial.available() > 0)
 { 
    // si un octet en réception 
   octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable
   switch(octetReception){
        case 'I':
            angleCourant = 90; // positionne le servo à l'angle voulu en fonction des valeurs min/max 
        break;
        case 'H':
            if (angleCourant ==0){ // si Octet reçu est le H et que c'est la première fois
               angleCourant = 30;
           } else {
               angleCourant += (angleCourant <= angleMax) ? 10 : 0; //fait tourner de +10 Degrés le servomoteur
           }
        break;
        case 'A':
               if (octetReception=='A' && i<180){
	           angleCourant += (angleCourant >= angleMin) ? -10 : 0; // Fait tourner de -10 Degrés le servomoteur
               }
        break;
       }
}

Bonsoir

merci de m’avoir expliqué comment faire c’est bon ça marche parfait

Voici le code

// --- Déclaration des constantes ---

// --- Inclusion des librairies ---

#include <Servo.h> // librairie pour servomoteur 


// --- Déclaration des constantes utiles ---

//--- Constantes utilisées avec le servomoteur 
int angle;

const int angleMin  = 0;
const int angleMax = 180;

// --- Déclaration des constantes des broches E/S numériques ---

const int broche_servo=2; // Constante pour la broche 2
// --- Déclaration des constantes des broches analogiques ---


// --- Déclaration des variables globales ---

 int octetReception=0; // variable de stockage des valeurs reçues sur le port Série
 long nombreReception=0; // variable de stockage du nombre  reçu sur le port Série
 long nombreReception0=0; // variable de stockage du dernier nombre  reçu sur le port Série
 String chaineReception=""; // déclare un objet String vide pour reception chaine
int position_servo=0;

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

//--- Création objet servomoteur 
Servo mon_servo;  // crée un objet servo pour contrôler le servomoteur


// ////////////////////////// 2. FONCTION SETUP = Code d'initialisation ////////////////////////// 
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter 1 seule fois au démarrage du programme --- 

// ------- Initialisation fonctionnalités utilisées -------  

Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission 

//--- Initialisation Servomoteur 
mon_servo.attach(broche_servo, angleMin, angleMax);  // attache l'objet servo à la broche de commande du servomoteur


// ------- Broches en sorties numériques -------  
 pinMode (broche_servo,OUTPUT); // Broche broche_servo configurée en sortie

// ------- Broches en entrées numériques -------  
mon_servo.write(position_servo);
// ------- Activation si besoin du rappel au + (pullup) des broches en entrées numériques -------  

// ------- Initialisation des variables utilisées -------  

}
// ********************************************************************************

////////////////////////////////// 3. FONCTION LOOP = Boucle sans fin = coeur du programme //////////////////
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop()
{ // debut de la fonction loop()
	static uint8_t i = 0;
	static uint8_t angleCourant = 0;
	// --- ici instructions à exécuter par le programme principal --- 

	//---- code type réception valeur sur le port série --- 

	if (Serial.available() > 0) 
	{ 
		// si un octet en réception 
		octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable

		if (octetReception=='I') // si Octet reçu est le Q
		{
			angleCourant = 90; // positionne le servo à l'angle voulu en fonction des valeurs min/max 
			i = 90;
		}
		
		if (octetReception=='H' && i==0){ // si Octet reçu est le H et que c'est la première fois
			
                          angleCourant += 10;  
} 
		else if (octetReception=='H' && i>0){
			angleCourant += (angleCourant <= angleMax) ? 10 : 0; //fait tourner de +10 Degrés le servomoteur 
		 }
		
                 if (octetReception=='A' && i==0) {// si Octet reçu est le A et que c'est la première fois
		

                        angleCourant -= 10;   
                 }
		else if (octetReception=='A' && angleCourant<=180){
			angleCourant -= (angleCourant >= angleMin) ? 10 : 0; // Fait tourner de -10 Degrés le servomoteur

                 }
                mon_servo.write(angleCourant);
		delay(200);

}
}
// ////////////////////////// Fin du programme //////////////////// 


// ////////////////////////// Mémo instructions //////////////////// 
// ////////////////////////// Fin Mémo instructions ////////////////////

Je me lance maintenant dans la deuxième partie, Contrôler deux servomoteurs diffférents
c’est la que j’ai buté la dernière fois

Je vous tien au courant, Mais si quelqu’un à un conseil où des astuces elles seront le bien venu :slight_smile:

Cordialement

PS : Merci pour l’info je ne connaissais pas " labfab" dommage que le cours sur l’arduino à été le 23 janvier . J’attend une nouvelle session

Bonsoir,

Je tiens à préciser que l'utilisation dont la variable " i " faisait l'objet premièrement, était de compter le nombre de fois que tu recevais la lettre 'H'. Je ne sais pas trop à quoi elle te sert maintenant, mais surement pas à compter quoi que ce soit... À quoi te sert elle maintenant ?

Autre chose, garde toujours tes commentaires à jour quand tu changes une partie de ton code.

if (octetReception=='I') // si Octet reçu est le Q

Reynosa: Je tiens à préciser que l'utilisation dont la variable " i " faisait l'objet premièrement, était de compter le nombre de fois que tu recevais la lettre 'H'. Je ne sais pas trop à quoi elle te sert maintenant, mais surement pas à compter quoi que ce soit... À quoi te sert elle maintenant ?

Manifestement elle ne sert à rien puisqu'elle n'est jamais modifiée

Bonsoir à tous

Désolé de ne pas avoir donné de nouvelle plutôt j’étais vraiment pris à m’occuper à essayé d’apprendre de nouvelle chose pour enfin finaliser mon programme.

Pour revenir au problème que vous avec soulevez pour

Je tiens à préciser que l’utilisation dont la variable " i " faisait l’objet premièrement, était de compter le nombre de fois que tu recevais la lettre ‘H’. Je ne sais pas trop à quoi elle te sert maintenant, mais surement pas à compter quoi que ce soit… À quoi te sert elle maintenant ?

Je comprend pas trop comment cela fonctionne donc je préfère ne pas y toucher au cas où j’en est besoin un jour.
d’ailleurs je ne comprend pas cette partie à quoi sa sert au juste

void loop()
{ // debut de la fonction loop()
	static uint8_t i = 0;
	static uint8_t angleCourant = 0;

Sinon j’ai réussi à pondre ceci XD

// --- Déclaration des constantes ---

// --- Inclusion des librairies ---

#include <Servo.h> // librairie pour servomoteur 


// --- Déclaration des constantes utiles ---

//--- Constantes utilisées avec le servomoteur 
int angle;

const int angleMin  = 2;
const int angleMax = 172;

// --- Déclaration des constantes des broches E/S numériques ---

const int broche_servo=2; // Constante pour la broche 2
const int broche_servo1=4; // Constante pour la broche 3
// --- Déclaration des constantes des broches analogiques ---


// --- Déclaration des variables globales ---

 int octetReception=0; // variable de stockage des valeurs reçues sur le port Série
 long nombreReception=0; // variable de stockage du nombre  reçu sur le port Série
 long nombreReception0=0; // variable de stockage du dernier nombre  reçu sur le port Série
 String chaineReception=""; // déclare un objet String vide pour reception chaine
int position_servo=0;
int position_servo1=0;

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

//--- Création objet servomoteur 
Servo mon_servo;  // crée un objet servo pour contrôler le servomoteur
Servo mon_servo1;  // crée un objet servo1 pour contrôler le servomoteur


// ////////////////////////// 2. FONCTION SETUP = Code d'initialisation ////////////////////////// 
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter 1 seule fois au démarrage du programme --- 

// ------- Initialisation fonctionnalités utilisées -------  

Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission 

//--- Initialisation Servomoteur 
mon_servo.attach(broche_servo, angleMin, angleMax);  // attache l'objet servo à la broche de commande du servomoteur
mon_servo1.attach(broche_servo1, angleMin, angleMax);  // attache l'objet servo1 à la broche de commande du servomoteur


// ------- Broches en sorties numériques -------  
 pinMode (broche_servo,OUTPUT); // Broche broche_servo configurée en sortie
 pinMode (broche_servo1,OUTPUT); // Broche broche_servo1 configurée en sortie

// ------- Broches en entrées numériques -------  
mon_servo.write(position_servo);
mon_servo1.write(position_servo1);
// ------- Activation si besoin du rappel au + (pullup) des broches en entrées numériques -------  

// ------- Initialisation des variables utilisées -------  

}
// ********************************************************************************

////////////////////////////////// 3. FONCTION LOOP = Boucle sans fin = coeur du programme //////////////////
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop()
{ // debut de la fonction loop()
	static uint8_t i = 0;
	static uint8_t angleCourant = 0;
        static uint8_t angleCourant1 = 0;
	// --- ici instructions à exécuter par le programme principal --- 

	//---- code type réception valeur sur le port série --- 

	if (Serial.available() > 0) 
	{ 
		// si un octet en réception 
		octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable

		if (octetReception=='I') // si Octet reçu est le Q
		{
			angleCourant = 90; // positionne le servo à l'angle voulu en fonction des valeurs min/max 
			i = 90;
		}
		
		if (octetReception=='H' && i==0){ // si Octet reçu est le H et que c'est la première fois
			
                          angleCourant += 10;  
} 
		else if (octetReception=='H' && i>0){
			angleCourant += (angleCourant <= angleMax) ? 10 : 0; //fait tourner de +10 Degrés le servomoteur 
		 }
		
                 if (octetReception=='A' && i==0) {// si Octet reçu est le A et que c'est la première fois
		

                        angleCourant -= 10;   
                 }
		else if (octetReception=='A' && angleCourant<=180){
			angleCourant -= (angleCourant >= angleMin) ? 10 : 0; // Fait tourner de -10 Degrés le servomoteur

                 }
                mon_servo.write(angleCourant);
                delay(200);
}
                if (Serial.available() > 0) 
	{ 
		// si un octet en réception 
		octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable

		if (octetReception=='D') // si Octet reçu est le Q
		{
			angleCourant1 = 90; // positionne le servo1 à l'angle voulu en fonction des valeurs min/max 
			i = 90;
		}
		
		if (octetReception=='J' && i==0){ // si Octet reçu est le H et que c'est la première fois
			
                          angleCourant1 += 10;  
} 
		else if (octetReception=='J' && i>0){
			angleCourant1 += (angleCourant1 <= angleMax) ? 10 : 0; //fait tourner de +10 Degrés le servomoteur 
		 }
		
                 if (octetReception=='M' && i==0) {// si Octet reçu est le A et que c'est la première fois
		

                        angleCourant1 -= 10;   
                 }
		else if (octetReception=='M' && angleCourant<=180){
			angleCourant1 -= (angleCourant1 >= angleMin) ? 10 : 0; // Fait tourner de -10 Degrés le servomoteur

                 }
                mon_servo1.write(angleCourant1);
		delay(200);

}
}
// ////////////////////////// Fin du programme //////////////////// 


// ////////////////////////// Mémo instructions //////////////////// 
// ////////////////////////// Fin Mémo instructions ////////////////////

mais il y à encore quelques soucis les servos sont plutôt longs et donc toutes les commandes ne sont pas toujours exécutées , ou j’ai peut être un problème dans le code ? (enfin pour le moment je n’en est pas l’impression, je pense plutôt que ce n’est pas assez rapide )

Si vous aviez des explications à tout cela merci

Bon j’ai essayé par moi même encore un peu d’enlever se qui pourrait ralentir mon programme

// --- Déclaration des constantes ---

// --- Inclusion des librairies ---

#include <Servo.h> // librairie pour servomoteur 


// --- Déclaration des constantes utiles ---

//--- Constantes utilisées avec le servomoteur 
int angle;

const int angleMin  = 2;
const int angleMax = 172;

// --- Déclaration des constantes des broches E/S numériques ---

const int broche_servo=2; // Constante pour la broche 2
const int broche_servo1=4; // Constante pour la broche 3
// --- Déclaration des constantes des broches analogiques ---


// --- Déclaration des variables globales ---

 int octetReception=0; // variable de stockage des valeurs reçues sur le port Série
 long nombreReception=0; // variable de stockage du nombre  reçu sur le port Série
 long nombreReception0=0; // variable de stockage du dernier nombre  reçu sur le port Série
 String chaineReception=""; // déclare un objet String vide pour reception chaine
int position_servo=0;
int position_servo1=0;

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

//--- Création objet servomoteur 
Servo mon_servo;  // crée un objet servo pour contrôler le servomoteur
Servo mon_servo1;  // crée un objet servo1 pour contrôler le servomoteur


// ////////////////////////// 2. FONCTION SETUP = Code d'initialisation ////////////////////////// 
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter 1 seule fois au démarrage du programme --- 

// ------- Initialisation fonctionnalités utilisées -------  

Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission 

//--- Initialisation Servomoteur 
mon_servo.attach(broche_servo, angleMin, angleMax);  // attache l'objet servo à la broche de commande du servomoteur
mon_servo1.attach(broche_servo1, angleMin, angleMax);  // attache l'objet servo1 à la broche de commande du servomoteur


// ------- Broches en sorties numériques -------  
 pinMode (broche_servo,OUTPUT); // Broche broche_servo configurée en sortie
 pinMode (broche_servo1,OUTPUT); // Broche broche_servo1 configurée en sortie

// ------- Broches en entrées numériques -------  
mon_servo.write(position_servo);
mon_servo1.write(position_servo1);
// ------- Activation si besoin du rappel au + (pullup) des broches en entrées numériques -------  

// ------- Initialisation des variables utilisées -------  

}
// ********************************************************************************

////////////////////////////////// 3. FONCTION LOOP = Boucle sans fin = coeur du programme //////////////////
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop()
{ // debut de la fonction loop()
	static uint8_t i = 0;
        static uint8_t i1 = 0;
	static uint8_t angleCourant = 0;
        static uint8_t angleCourant1 = 0;
	// --- ici instructions à exécuter par le programme principal --- 

	//---- code type réception valeur sur le port série --- 
 if (Serial.available() > 0) 
	{ 
		// si un octet en réception 
		octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable

		if (octetReception=='D') // si Octet reçu est le Q
		{
			angleCourant1 = 90; // positionne le servo1 à l'angle voulu en fonction des valeurs min/max 
			i1 = 90;
		}
		
		if (octetReception=='J' && i1==0){ // si Octet reçu est le H et que c'est la première fois
			
                          angleCourant1 += 10;  
} 
		else if (octetReception=='J' && i1>0){
			angleCourant1 += (angleCourant1 <= angleMax) ? 10 : 0; //fait tourner de +10 Degrés le servomoteur 
		 }
		
                 if (octetReception=='M' && i1==0) {// si Octet reçu est le A et que c'est la première fois
		

                        angleCourant1 -= 10;   
                 }
		else if (octetReception=='M' && angleCourant<=180){
			angleCourant1 -= (angleCourant1 >= angleMin) ? 10 : 0; // Fait tourner de -10 Degrés le servomoteur

                 }
               
	

		if (octetReception=='I') // si Octet reçu est le Q
		{
			angleCourant = 90; // positionne le servo à l'angle voulu en fonction des valeurs min/max 
			i = 90;
		}
		
		if (octetReception=='H' && i==0){ // si Octet reçu est le H et que c'est la première fois
			
                          angleCourant += 10;  
} 
		else if (octetReception=='H' && i>0){
			angleCourant += (angleCourant <= angleMax) ? 10 : 0; //fait tourner de +10 Degrés le servomoteur 
		 }
		
                 if (octetReception=='A' && i==0) {// si Octet reçu est le A et que c'est la première fois
		

                        angleCourant -= 10;   
                 }
		else if (octetReception=='A' && angleCourant<=180){
			angleCourant -= (angleCourant >= angleMin) ? 10 : 0; // Fait tourner de -10 Degrés le servomoteur

                 }
                  
                mon_servo1.write(angleCourant1);
                mon_servo.write(angleCourant);
                delay(200);
}
               
}
// ////////////////////////// Fin du programme //////////////////// 


// ////////////////////////// Mémo instructions //////////////////// 
// ////////////////////////// Fin Mémo instructions ////////////////////

Mais j’ai découvert un truc si je met cette partie la

if (octetReception=='D') // si Octet reçu est le Q
		{
			angleCourant1 = 90; // positionne le servo1 à l'angle voulu en fonction des valeurs min/max 
			i1 = 90;
		}
		
		if (octetReception=='J' && i1==0){ // si Octet reçu est le H et que c'est la première fois
			
                          angleCourant1 += 10;  
} 
		else if (octetReception=='J' && i1>0){
			angleCourant1 += (angleCourant1 <= angleMax) ? 10 : 0; //fait tourner de +10 Degrés le servomoteur 
		 }
		
                 if (octetReception=='M' && i1==0) {// si Octet reçu est le A et que c'est la première fois
		

                        angleCourant1 -= 10;   
                 }
		else if (octetReception=='M' && angleCourant<=180){
			angleCourant1 -= (angleCourant1 >= angleMin) ? 10 : 0; // Fait tourner de -10 Degrés le servomoteur

                 }

avant celle là

if (octetReception=='I') // si Octet reçu est le Q
		{
			angleCourant = 90; // positionne le servo à l'angle voulu en fonction des valeurs min/max 
			i = 90;
		}
		
		if (octetReception=='H' && i==0){ // si Octet reçu est le H et que c'est la première fois
			
                          angleCourant += 10;  
} 
		else if (octetReception=='H' && i>0){
			angleCourant += (angleCourant <= angleMax) ? 10 : 0; //fait tourner de +10 Degrés le servomoteur 
		 }
		
                 if (octetReception=='A' && i==0) {// si Octet reçu est le A et que c'est la première fois
		

                        angleCourant -= 10;   
                 }
		else if (octetReception=='A' && angleCourant<=180){
			angleCourant -= (angleCourant >= angleMin) ? 10 : 0; // Fait tourner de -10 Degrés le servomoteur

                 }

ou inversement celle qui est écrire en première aura son servo qui répondra directement sans problème alors que celle en deuxième mettra du temps et parfois même ne répondra pas

si vous aviez des explications ??

lesaccrosduvol:
Pour revenir au problème que vous avec soulevez pour

Je tiens à préciser que l’utilisation dont la variable " i " faisait l’objet premièrement, était de compter le nombre de fois que tu recevais la lettre ‘H’. Je ne sais pas trop à quoi elle te sert maintenant, mais surement pas à compter quoi que ce soit… À quoi te sert elle maintenant ?

Je comprend pas trop comment cela fonctionne donc je préfère ne pas y toucher au cas où j’en est besoin un jour.
d’ailleurs je ne comprend pas cette partie à quoi sa sert au juste

C’est dommage parce que du coup ça fait n’importe quoi.

if (octetReception=='J' && i1==0){ // si Octet reçu est le H et que c'est la première fois
      angleCourant1 += 10;  
} else if (octetReception=='J' && i1>0){
      angleCourant1 += (angleCourant1 <= angleMax) ? 10 : 0; //fait tourner de +10 Degrés le servomoteur 
}

comme i n’est jamais modifié dans ton programme il est toujours à 0 et le second test n’est jamais vrai et du coup tu ne gères pas les butés correctement.
D’ailleurs entre nous comme l’incrément est toujours de 10 cette combine ne sert vraiment à rien du tout et elle pourrait se simplifier en un seul if

if (octetReception=='J'){ // si Octet reçu est le J
           angleCourant1 += (angleCourant1 <angleMax) ? 10 : 0; //fait tourner de +10 Degrés le servomoteur 
}

Attention au copié/collé

		else if (octetReception=='M' && angleCourant<=180){
			angleCourant1 -= (angleCourant1 >= angleMin) ? 10 : 0; // Fait tourner de -10 Degrés le servomoteur
                 }

Tu manipules angleCourant1 et tu fais un test sur angleCourant. En plus, ce test n’a pas de sens dans la mesure où tu testes si l’angle est inférieur ou égale à 180° avant de tester la ligne en dessous s’il est supérieur à angleMin ce qui a plus de sens vu que tu veux diminuer la valeur de l’angle.
Je pense que tu voulais écrire ça:

		else if (octetReception=='M' && angleCourant1> angleMin){
			angleCourant1 -=  10; // Fait tourner de -10 Degrés le servomoteur
                 }

Il va sans dire que les remarques faites pour un servo sont valables sur le traitement de l’autre.

Bonsoir

Voilà j'ai terminer la première partie de mon projet je remercie vraiment "fdufnews " pour son aide mais aussi tout les membres du forum qui m'ont aidé. Je vous met une petite vidéo pour vous montrer.

http://www.youtube.com/watch?v=hFOehudW9u4

il me reste juste un petit problème car quand j'envoie la commande - 10 et que le servomoteur est déjà à 0 il va se positionner à 180° alors que je voudrai qu'il reste à 0° ( si je règle pas se problème sa risque de poser de sérieux problème en vol :) )

Bon sinon pour ma deuxième partie je vais essayé d'utiliser le module APC220 afin de pouvoir contrôler à distance . JE trouve que c'est celui qui irai le mieux pour se type de projet ; Avez vous des avis ? j'ai lu qu'il avait une porté jusqu'à 1100m peut on l’augmenter en changeant l’antenne ?

Voila je vous tiens au courant de la suite

Et encore merci :D

Mets nous le programme modifié