Bonjour,
J'ai récupéré un programme avec l'utilisation d'un shield Ethernet.
Une partie du programme me pose problème parce que je n'arrive pas a rentrer dans une des fonctions.
void hello(EthernetClient client){
if (client.connect(serverTarget, 80)) {
Serial.println("connected");
// Make a HTTP request:
client.println("GET /hello HTTP/1.1");
client.println("Host: 192.168.0.100");
client.println("Connection: close");
client.println();
}
else {
// if you didn't get a connection to the server:
Serial.println("connection failed from Hello");
}
}
J'utilise HerculeHTTP comme client. J'envoie une info avec Hercule en mettant comme port "80" et la même IP mais ca ne rentre que dans le else. Voyez vous comment je pourrai y rentrer dans le if?
Voila le code. Via mon application client j'envoie un 1 et j'arrive a lire la donnée. Le problème est que juste la fonction readData fonctionne.
Merci de votre aide.
#include <SPI.h> //librairie pour synchroniser la communication
#include <Ethernet.h>
// configuration réseau
byte mac[] = {0x90, 0xA2, 0xDA, 0x0F, 0x8B, 0x19}; //adresse mac physique
byte ip[] = {192, 168, 0, 100}; // IP dans le LAN
byte gateway[] = {192, 168, 0, 1}; // DG
byte subnet[] = {255, 255, 255, 0}; //mask de sous-réseau
EthernetServer server(80); //port du serveur (HTTP port 80)
// Server IP Target
char serverTarget[] = "192.168.00.100";
const int CapteurSortie=9;
const int CommandeOuverture=3;
int FM=0; //bit pour détecter un front montant
// données reçues par le GET HTTP Protocol
char licencee_plate_status_validation;
// si les données reçues = 0 => la plaque n'est pas acceptée
// si les données reçues = 1 => la plaque est acceptée
void setup()
{
Serial.begin(9600);
pinMode(CapteurSortie,INPUT);
pinMode(CommandeOuverture,OUTPUT);
//démarre la connection Ethernet et le serveur
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.print("l'adresse IP du serveur est: ");
Serial.println(Ethernet.localIP());
}
void loop()
{
EthernetClient client = server.available();
// Hello from arduino => check if Arduino is alive
hello(client);
// Check if a car goin out
checkExitSensor(client);
if (client) //si un client est connecté
{
if(client.connected()) // Tant que le client est connecté
{
if(client.available()) // A-t-il des choses à dire ?
{
readDataFromClient(client);
}
}
}
delay(10);
}
// ================================= METHODES
void readDataFromClient(EthernetClient client){
// send HTTP header to client :
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println();
// Read GET CALL for know Status of licence plate
for (int i = 0; i < 6; i++) {
if (i == 5) {
licencee_plate_status_validation = client.read();
Serial.println(licencee_plate_status_validation);
openParking(licencee_plate_status_validation);
}
else {
client.read();
}
}
client.stop();
}
void openParking(char licencee_plate_status_validation)
{
if (licencee_plate_status_validation == '1')
{
Serial.println("oepnParking true : " );
Serial.println(licencee_plate_status_validation);
//on ouvre la barrière pour faire entrer la voiture
digitalWrite(CommandeOuverture,HIGH);
delay(1500);
digitalWrite(CommandeOuverture,LOW);
}
}
void checkExitSensor(EthernetClient client)
{
if(CapteurSortie==HIGH)
{
exitRequest(client);
if(FM==0)
{
// CONTACT CLIENT by HTTP GET method
exitRequest(client);
//on ouvre la barrière pour faire sortir la voiture
digitalWrite(CommandeOuverture,HIGH);
delay(1500);
digitalWrite(CommandeOuverture,LOW);
FM=1;
}
}
else //donc si CapteurSortie =LOW
{
FM=0;
}
}
void exitRequest(EthernetClient client){
if (client.connect(serverTarget, 3000)) {
// Make a HTTP request:
client.println("GET /carDetected HTTP/1.1");
client.println("Host: 192.168.0.100");
client.println("Connection: close");
client.println();
}
else {
// if you didn't get a connection to the server:
Serial.println("connection failed from exit Request");
}
}
void hello(EthernetClient client){
if (client.connect(serverTarget, 3000)) {
Serial.println("connected");
// Make a HTTP request:
client.println("GET /hello HTTP/1.1");
client.println("Host: 192.168.0.100");
client.println("Connection: close");
client.println();
}
else {
// if you didn't get a connection to the server:
Serial.println("connection failed from Hello");
}
}
Définissez votre client en variable globale et ne le passez pas en paramètre à vos fonctions (surtout en copie, faites au moins des références), utilisez la variable globale -
Pourquoi votre IP locale est la même que le server target?
J'ai du mal a comprendre le code justement. Je ne voix pas trop comment valider la condition "if (client.connect(serverTarget, 3000))" J'utilise hercule pour simuler "le serverTarget" et j'envoie des infos mais rien ne se passe dans cette fonction