Salut, je souhaite commander un servo moteur à l'aide d'une page internet.
J'en suis arrivé à ça en récupérant divers programmes et en les adaptant:
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x4E, 0xDE }; // A adapter en fonction du shield
byte ip[] = { 192, 168, 2, 1 }; // A adapter en fonction du reseau
Servo pinServo; // broche connectée au Servo
int modeServo = 0;
unsigned long tpsDep;
EthernetServer server(80);
String HTTP_req;
int valeur;
int etatServo = 0;
void setup() {
// Initialise le port série
Serial.begin(9600);
// Initialise la connexion Ethernet et le serveur
Ethernet.begin(mac);//generer adresse mac
server.begin();
pinServo.attach(2);
Serial.print("Le serveur est à l'adresse : ");// permet sur la liaison série de récupèrer l'adresse ip alloué par le serveur.
Serial.println(Ethernet.localIP());
}
void loop() {
gestionClient(); // fonction qui gère toute la communication avec le client
gestionServo(); // fonction qui gère l'allumage des LED
}
void gestionClient()
{
EthernetClient client = server.available(); // recevoir le client
if (client) { // got client?
if (client.connected()) {
if (client.available()) { //pour lire les données
char c = client.read(); // read 1 byte (character) from client
HTTP_req += c; // save the HTTP request 1 char at a time
// last line of client request is blank and ends with \n
// respond to client only after last line received
// send a standard http response header
corps(client);
} //fin if
} //fin si
} //fin si
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection
}
void corps(EthernetClient cl) {
cl.println("
"); // saut de ligne
//boucle pour construire chaque ligne en fonction des LED
cl.print("
Servo 2");
cl.print(" ");
Serial.println(2);
cl.print(" <a href=?"); //création du lien inutile de répéter l'adresse du site
cl.print("Servo: ");
cl.println("<a href=?valeur=1>Augmenter</a>
");
cl.println("<a href=?valeur=2>Diminuer</a>
");
}
void gestionServo() {
if (valeur == 1) { // si mode éteint
if (etatServo < 180) {
etatServo = etatServo + 5; // on éteind
}
}
if (valeur == 2) { // si mode éteint
if (etatServo > 0) {
etatServo = etatServo - 5; // on éteind
}
}
pinServo.write(etatServo);
Serial.println(etatServo); //afficher angle servo
Serial.println(valeur); //afficher variable valeur pour voir si ça marche
delay(1000);
}
L'idée c'est que quand je clique sur augmenter, l'angle du servomoteur fasse +5 et quand je clique sur diminuer il fasse -5
Hors, je débute et ça reçoit meme pas l'ordre de baisser ou d'augmenter et le moniteur serie m'envoie pleins de 0
Donc rien ne marche
Si quelqu'un pouvait m'aider ce serait fantastique !
Merci de la réponse !
J'ai une carte Arduino Uno, un shield ethernet monté dessus, connecté en réseau ethernet, et le truc pour mettre les broches au dessus
L'interface web que je veux c'est 2 boutons, j'ai modifié un peu mon programme avec le tien, ça marche, ça change la variable dans l'Url mais je sais pas comment bien récupérer ce changement de variable afin de faire changer l'angle du servomoteur
Mon but à la base est de commander la mise au point d'un telescope
J'ai pas trop compris l'histoire d'instance et de classe, je débute dans la programmation
Et pour le string j'ai utilisé un autre programme d'exemple même si je suis pas sur de tout comprendre
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x4E, 0xDE }; // A adapter en fonction du shield
byte ip[] = { 192, 168, 2, 1 }; // A adapter en fonction du reseau
Servo pinServo; // broche connectée au Servo
int modeServo = 0;
unsigned long tpsDep;
EthernetServer server(80);
String HTTP_req;
int valeur;
int W = 0;
int etatServo = 0;
void setup() {
// Initialise le port série
Serial.begin(19200);
// Initialise la connexion Ethernet et le serveur
Ethernet.begin(mac);//generer adresse mac
server.begin();
pinServo.attach(2);
Serial.print("Le serveur est à l'adresse : ");// permet sur la liaison série de récupèrer l'adresse ip alloué par le serveur.
Serial.println(Ethernet.localIP());
}
void loop() {
gestionClient(); // fonction qui gère toute la communication avec le client
gestionServo(); // fonction qui gère l'allumage des LED
}
void gestionClient()
{
EthernetClient client = server.available(); // recevoir le client
if (client) { // got client?
if (client.connected()) {
if (client.available()) { //pour lire les données
char c = client.read(); // read 1 byte (character) from client
HTTP_req += c; // save the HTTP request 1 char at a time
// last line of client request is blank and ends with \n
// respond to client only after last line received
// send a standard http response header
corps(client);
} //fin if
} //fin si
} //fin si
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection
}
void corps(EthernetClient cl) {
cl.println(F("<body bgcolor='#00979C'>"));
cl.println("
"); // saut de ligne
//boucle pour construire chaque ligne en fonction des LED
Serial.println(2);
cl.print("Mise au point servo: ");
cl.println("<button onclick=\"location.href='/W=1'\" type='button'>+5</button>");
cl.println("<button onclick=\"location.href='/W=2'\" type='button'>-5</button>");
}
void gestionServo() {
if (W == 1) { // si mode éteint
if (etatServo < 180) {
etatServo = etatServo + 5; // on éteind
}
}
if (W == 2) { // si mode éteint
if (etatServo > 0) {
etatServo = etatServo - 5; // on éteind
}
}
pinServo.write(etatServo);
Serial.println(etatServo); //afficher angle servo
Serial.println(valeur); //afficher variable valeur pour voir si ça marche
delay(1000);
}