Bonjour,
Je suis en DUT Geii et comme projet de fin d'année je dois réaliser une page web avec un serveur arduino pour récuperer des valeurs de différents capteurs.
Tout mes programmes pour les capteurs fonctionne.
Je me suis donc attaqué a la partie serveur pour la page Html mais lors de la compilation, le logiciel m'indique plusieurs erreurs que je ne comprends pas
Voici mon code :
#include <Ethernet.h>
#include <SPI.h>
#include <SD.h>
#include "AirQuality.h"
#include "Arduino.h"
AirQuality airqualitysensor;
// Taille du buffer pour les requetes http
#define REQ_BUF_SZ 50
// pour le serveur web :
byte mac[] = {0x90,0xA2,0xDA,0x0F,0x39,0x70}; // Adresse mac de l’ethernet shield
byte ip[] = {192,168,250,232}; // Adresse ip de la carte
float tempLue; //Valeur de l’entrée
EthernetServer server(80); // Assignation du port d’écoute (http)
String readString;
File webFile; // Fichier sur carte SD
char HTTP_req[REQ_BUF_SZ] = {0};
char req_index = 0;
// variables pour calcul air quality sensor
int current_quality =-1;
// on intialise…
void setup() {
// pin à passer High pour le chip ethernet
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
Serial.begin(9600); // Pour debug
// init de la carte SD
Serial.println("Init de la carte SD…");
if (!SD.begin(4)) {
Serial.println("Erreur : init impossible… ");
return; // init impossible
}
Serial.println("Carte SD OK");
// cherche le fichier « index.html »
if (!SD.exists("index.htm")) {
Serial.println("Erreur : pas de fichier index.html");
return; // fichier index.html introuvable
}
Serial.println("OK Fichier index.html trouve");
Ethernet.begin(mac, ip); // init du périphérique ethernet
server.begin(); // init du serveur web
}
// fin du setup
void loop()
{
EthernetClient client = server.available(); // on cherche un client
if (client) { // client trouve ?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // si le client envoie une chaine lisible
char c = client.read(); //lecture de 1 byte (character) depuis le client
// mise en tampon de la premiere partie de la requette HTTP : HTTP_req array (string)
// jusqu’a ce que le dernier element du tableau soit un caractere null (REQ_BUF_SZ – 1)
if (req_index<(REQ_BUF_SZ –1)){
HTTP_req[req_index] = c; // sauve la requette HTTP
req_index++;
}
// la derniere ligne du client est une ligne « blanche » et se termine par \n
// on repond au client seulement apres reception de la derniere ligne
if(c==‘\n’&¤tLineIsBlank){
// envoi d’un standard http response header (en tete HTTP)
client.println("HTTP/1.1 200 OK");
// Ajax requette – envoi d’un fichier XML
if (StrContains(HTTP_req, « ajax_inputs »)) {
// envoi du reste du HTTP header
client.println("Content-Type: text/xml");
client.println("Connection: keep-alive");
client.println();
// envoi du fichier XML contenant l’etat des entrees
XML_response(client);
}
else { // web page requette
// envoi du reste de l’HTTP header
client.println("Content-Type: text/html");
client.println("Connection: keep-alive");
client.println();
// envoi de la page web
webFile=SD.open("index.htm"); // ouverture du fichier contenant la page web
if (webFile) {
while(webFile.available()) {
client.write(webFile.read()); // envoi de la parge web au client
}
webFile.close();
}
}
// affichage sur le port serie des requettes HTTP
Serial.print(HTTP_req);
// remise des tampons a 0
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
// chaque ligne de texte recue du client se termine par \r\n
if(c==‘\n’) {
// si on est au dernier caractere de la ligne recue,
// on demarre une nouvelle ligne avec le nouveau caractere lu
currentLineIsBlank = true;
}
else if(c!=‘\r’){
// un caractere texte est recu du client
currentLineIsBlank = false;
}
} // fin du if (client.available())
} // fin du while (client.connected())
delay(1000); // laisse le temps au navigateur web pour recevoir les données (nota : 1 par defaut, trop court chez moi)
client.stop(); // ferme la connexion
} // fin du if (client)
}
// envoi du fichier XML contenant les valeurs des entrées
void XML_response(EthernetClient cl)
{
current_quality=airqualitysensor.slope(); // lecture du capteur quality air sensor
// les inputs pour ajax
cl.print("<?xml version = \"1.0\" ?>");
cl.print("<inputs>");
cl.print("<tempint>");
cl.print((int)current_quality, 2);
cl.print("</tempint>");
}
// on efface les tableaux
void StrClear(char *str, char length)
{
for (int i = 0; i < length; i++) {
str[i] = 0;
}
}
// cherche la chaine sfind dans la chaine str
// renvoie 1 si trouve
// renvoie 0 si pas trouve
char StrContains(char *str, char *sfind)
{
char found = 0;
char index = 0;
char len;
len = strlen(str);
if(strlen(sfind) > len) {
return 0;
}
while (index < len) {
if (str[index] == sfind[found]) {
found++;
if (strlen(sfind) == found) {
return 1;
}
}
else {
found = 0;
}
index++;
}
return 0;
}
//Air quality sensor
ISR(TIMER2_OVF_vect)
{
if(airqualitysensor.counter==122)//set 2 seconds as a detected duty
{
airqualitysensor.last_vol=airqualitysensor.first_vol;
airqualitysensor.first_vol=analogRead(A0); // change this value if you use another A port
airqualitysensor.counter=0;
airqualitysensor.timer_index=1;
PORTB=PORTB^0x20;
}
else
{
airqualitysensor.counter++;
}
}
Le logiciel m'indique comme erreurs :
test13:67: error: stray '\342' in program
if (req_index<(REQ_BUF_SZ –1)){
^
test13:67: error: stray '\200' in program
test13:67: error: stray '\223' in program
test13:73: error: stray '\342' in program
if(c==‘\n’&¤tLineIsBlank){
^
test13:73: error: stray '\200' in program
test13:73: error: stray '\230' in program
test13:73: error: stray '' in program
test13:73: error: stray '\342' in program
test13:73: error: stray '\200' in program
test13:73: error: stray '\231' in program
test13:78: error: stray '\302' in program
if (StrContains(HTTP_req, « ajax_inputs »)) {
^
test13:78: error: stray '\253' in program
test13:78: error: stray '\302' in program
test13:78: error: stray '\273' in program
test13:108: error: stray '\342' in program
if(c==‘\n’) {
^
test13:108: error: stray '\200' in program
test13:108: error: stray '\230' in program
test13:108: error: stray '' in program
test13:108: error: stray '\342' in program
test13:108: error: stray '\200' in program
test13:108: error: stray '\231' in program
test13:113: error: stray '\342' in program
else if(c!=‘\r’){
^
test13:113: error: stray '\200' in program
test13:113: error: stray '\230' in program
test13:113: error: stray '' in program
test13:113: error: stray '\342' in program
test13:113: error: stray '\200' in program
test13:113: error: stray '\231' in program
C:\Users\Desktop\test13\test13.ino: In function 'void loop()':
test13:67: error: expected ')' before numeric constant
if (req_index<(REQ_BUF_SZ –1)){
^
test13:73: error: expected ')' before 'if'
if(c==‘\n’&¤tLineIsBlank){
^
test13:117: error: expected primary-expression before '}' token
} // fin du if (client.available())
^
exit status 1
stray '\342' in program
J'utilise une carte arduino Uno