Bonjour je suis en terminal Sti2d SIN et mon projet et sur un robot pilotable par un site internet , ma partie est pour l'instant sur le support de camera sur lequel je dois piloter 2 servomoteur. Je suis arriver a contrôler les 2 servomoteur grâce a un code récupéré sur le net que j'ai modifier pour mon travail mais le problème est que je peut contrôler les servomoteurs que depuis le moniteur série de l’application bureau arduino et en plus sa contrôle les 2 a même temps ( pour les faire bouger je dois taper une valeur entre 500 et 2500 dans le moniteur série) , j'ai pas su faire 2 ordres séparer donc je voudrais pouvoir contrôler les 2 servomoteurs séparément et depuis un site internet , je me suis un peut renseigné sur une méthode pour les contrôlé grâce a des fichiers text ou xml dans lesquels j'aurais modifier grâce au site internet le contenu et inscrit ma valeur (entre 500 et 2500 ducoup).
Si il existe une méthode plus simple je la veut bien car je suis vraiment amateur dans le monde du C++ et du programme.
Merci d'avance pour votre aide!!
// --- Inclusion des librairies utilisées ---
#include <Servo.h> // librairie pour servomoteur
#include <SPI.h>
#include <Ethernet2.h>
// L'adresse MAC du shield
byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0xFE, 0xF8 };
// L'adresse IP que prendra le shield
IPAddress ip(10,111,3,42);
// --- Déclaration des constantes ---
// --- constantes des broches ---
const int SERVO=2; //declaration constante de broche
const int SERVO2=4; //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
Servo mon_servo2; // crée un objet servo pour contrôler le servomoteur
//**************** FONCTION SETUP = Code d'initialisation *****
// Initialise notre serveur
// Ce dernier écoutera sur le port 80
EthernetServer serveur(80);
// La fonction setup() est exécutée en premi er et 1 seule fois, au démarrage du programme
void setup() { // debut de la fonction setup()
// --- ici instructions à exécuter au démarrage ---
// On démarre la voie série pour déboguer
Serial.begin(9600);
Serial.println("Init 1");
char erreur = 0;
// On démarre le shield Ethernet SANS adresse ip (donc donnée via DHCP)
erreur = Ethernet.begin(mac);
Serial.println("Init 2");
Serial.println(erreur,DEC);
if (erreur == 1) { // on a forcer l'utilisation de l'ip fixe
Serial.println("Parametrage avec ip fixe...");
// si une erreur a eu lieu cela signifie que l'attribution DHCP
// ne fonctionne pas. On initialise donc en forçant une IP
Ethernet.begin(mac, ip, (10,111,3,1) , (10,111,3,254) , (255,255,248,0));
}
Serial.println("Init...");
// Donne une seconde au shield pour s'initialiser
delay(1000);
// On lance le serveur
serveur.begin();
Serial.print("Pret !");
mon_servo.attach(SERVO); // attache l'objet servo à la broche de commande du servomoteur
mon_servo2.attach(SERVO2); // attache l'objet servo à la broche de commande du servomoteur
Serial.begin(115200); // 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
pinMode(SERVO2, 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.writeMicroseconds(impulsion); // génère l'impulsion de la durée voulue en µs pour le servomoteur
mon_servo2.writeMicroseconds(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 ---