Bonjour,
Je cherche à controler un servo à partir du terminal serie. Quelqu'un pourrait m'aider ?
Bonjour,
Je cherche à controler un servo à partir du terminal serie. Quelqu'un pourrait m'aider ?
C'est tout nouveau et ça s'appelle "Google" :
Je suis sous n controle parentale et je peux pas aller partout dsl
J'ai trouver ce programme mais le servo met longtemps à réagir. Quelqu'un peut m'aider ?
// --- Programme Arduino ---
// par X. HINAULT - 01/2010
// --- Que fait ce programme ? ---
/* Test de la position d'un servomoteur par saisie directe de la largeur d'impulsion dans le Terminal côté PC*/
// --- Fonctionnalités utilisées ---
// Utilise la connexion série vers le PC
// Utilise un servomoteur
// --- Circuit à réaliser ---
// Connexion série entre la carte Arduino et le PC (utilise les broches 0 et 1)
// Connecter Broche de commande d'un Servomoteur sur la broche 2 (configurée en sortie)
//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...
// --- Inclusion des librairies utilisées ---
#include <Servo.h> // librairie pour servomoteur
// --- Déclaration des constantes ---
// --- constantes des broches ---
const int SERVO = 9 ; //declaration constante de broche
// --- Déclaration des variables globales ---
int ReceptionOctet = 0 ; // variable de stockage des octets reçus par port série
int ReceptionNombre = 0 ; // variable de calcul du nombre reçu par port série
int impulsion = 1500 ; // variable pour impulsion - valeur médiane initiale
// --- Initialisation des fonctionnalités utilisées ---
Servo mon_servo ; // crée un objet servo pour contrôler le servomoteur
//**************** 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 au démarrage ---
mon_servo. attach ( SERVO ) ; // attache l'objet servo à la broche de commande du servomoteur
Serial . begin ( 9600 ) ; // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission
pinMode ( SERVO , OUTPUT ) ; //met la broche en sortie
} // fin de la fonction setup()
// ********************************************************************************
//*************** 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 ---
//--- lecture d'un nombre reçu par le Terminal et positionnement du servomoteur ---
if ( Serial . available ( ) > 0 ) { // si caractère dans la file d'attente
//---- lecture du nombre reçu
while ( Serial . available ( ) > 0 ) { // tant que buffer pas vide pour lire d'une traite tous les caractères reçus
ReceptionOctet = Serial . read ( ) ; // renvoie le 1er octet présent dans la file attente série (-1 si aucun)
ReceptionOctet = ReceptionOctet - 48 ; // transfo valeur ASCII en valeur décimale
if ( ( ReceptionOctet >= 0 ) && ( ReceptionOctet <= 9 ) ) ReceptionNombre = ( ReceptionNombre * 10 ) + ReceptionOctet ;
// si valeur reçue correspond à un chiffre on calcule nombre
delay ( 1 ) ; // pause pour laisser le temps au Serial.available de recevoir les caractères
} // fin while
Serial . print ( "Nombre recu = " ) ;
Serial . println ( ReceptionNombre ) ; // affiche valeur numerique entière ou à virgule au format décimal
//----- positionnement du servomoteur en fonction de la largeur d'impulsion demandée
impulsion = ReceptionNombre ;
if ( impulsion > 2600 ) impulsion = 2600 ; // pour éviter valeur supérieure à 2600 = position maxi possible servomoteur
if ( impulsion < 300 ) impulsion = 300 ; // pour éviter valeur inférieure à 300 = position maxi possible servomoteur
mon_servo. write ( impulsion ) ; // génère l'impulsion de la durée voulue en µs pour le servomoteur
Serial . print ( "Impulsion servomoteur = " ) ;
Serial . print ( impulsion ) ; // affiche valeur numerique entière
Serial . println ( " microsecondes " ) ;
delay ( 1000 ) ; //entre chaque changement de position
ReceptionNombre = 0 ; // réinitialisation de la variable de calcul du nombre reçu
} // end if
} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************
// --- Fin programme ---
EBanou:
J'ai trouver ce programme mais le servo met longtemps à réagir. Quelqu'un peut m'aider ?
Normalement il ne devrait pas s'écouler plus d'une seconde entre la commande et l'exécution. C'est le délai placé en fin de boucle.