Bonjour à vous, je viens vous voir parce que j'ai besoin de votre aide.
Actuellement en terminal STI2D, j'ai comme projet d'afficher des valeurs sur une page web qui est stocké sur ma carte SD de mon arduino shield.
Pour l'instant, la seul chose qui fonctionne correctement est un programme que j'ai trouvé sur internet permettant de lire une page htm que j'ai légèrement modifier pour qu'il lise également mon css et une image (dite moi si c'est une bonne idée)
Voici le dit programme :
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
// taille du tampon utilisé pour capturer les requêtes HTTP
#define REQ_BUF_SZ 20
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x25, 0x8C }; //On configure l'adresse mac de la carte ethernet
IPAddress ip(172, 19, 153, 216); // On configure l'adresse IP
EthernetServer server(80); // On crée un serveur sur le port 80 (port par défaut)
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0; // index into HTTP_req buffer
void setup()
{
// disable Ethernet chip
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
Serial.begin(9600); // Le nombre de bauds/sec
// initialisation de la carte SD
Serial.println("Initialisation de la carte SD...");
if (!SD.begin(4)) { //Si la carte SD n'est pas détecté
Serial.println("ERREUR - Echec de l'initialisation de la carte SD");
return; // init raté
}
Serial.println("SUCCES - Carte SD initialise"); // Si l'initialisation à réussi
// On regarde si nous trouvons le fichier index.htm
if (!SD.exists("index.htm")) {
Serial.println("ERREUR - Fichier index.htm introuvable !");
return; // On ne trouve pas le fichier index.htm
} // Si on trouve le fichier index.htm
Serial.println("SUCCES - Fichier index.htm trouve");
Ethernet.begin(mac, ip); // Démarrage du service ethernet
server.begin(); // Démarage du serveur
}
void loop()
{
EthernetClient client = server.available(); // On regarde si nous avons des clients
if (client) { // Si nous en avons
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // Si les données du client peuvent être lue
char c = client.read(); // lire 1 byte (character) du client
// buffer first part of HTTP request in HTTP_req array (string)
// leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
if (req_index < (REQ_BUF_SZ - 1)) {
HTTP_req[req_index] = c; // save HTTP request character
req_index++;
}
// print HTTP request character to serial monitor
Serial.print(c);
// last line of client request is blank and ends with \n
// respond to client only after last line received
if (c == '\n' && currentLineIsBlank) {
// open requested web page file
if (StrContains(HTTP_req, "GET / ")
|| StrContains(HTTP_req, "GET /index.htm")) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
webFile = SD.open("index.htm"); // On ouvre le fichier index.htm
}
else if (StrContains(HTTP_req, "GET /main.css")) {
webFile = SD.open("main.css"); // On ouvre le fichier main.css
if (webFile) {
client.println("HTTP/1.1 200 OK");
client.println();
}
}
else if (StrContains(HTTP_req, "GET /banner.jpg")) {
webFile = SD.open("banner.jpg"); // On ouvre le fichier banner.jpg
if (webFile) {
client.println("HTTP/1.1 200 OK");
client.println();
}
}
if (webFile) {
while(webFile.available()) {
client.write(webFile.read()); // On envoie la page web au client
}
webFile.close(); // On ferme le fichier
}
// On remet le tampon et tout les élémtents du tampon à 0
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') {
// last character on line of received text
// starting new line with next character read
currentLineIsBlank = true;
}
else if (c != '\r') {
// a text character was received from client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
delay(1); // give the web browser time to receive the data
client.stop(); // fermerture de la connexion
} // end if (client)
}
// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
for (int i = 0; i < length; i++) {
str[i] = 0;
}
}
// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
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;
}
Voici le code html (qui a été compressé pour avoir un chargement plus rapide) :
[voir message suivant car le nombre de caractère max est atteint .-.
Et un rendu de la dite page :
Comme vous pouvez le voir, il y a un tableau ou sont affichés des valeurs factice (que j'ai mis pour mettre en place mon site)
Ce que j'aimerais actuellement c'est que c'est valeurs soit modifiés en fonction des chiffres que je mette dans des variables (qui doivent être dans mon programme) et qu'elles soit ensuite affiché sur ma page, dans ce dit tableau.
J'ai retourné Google pendant 6h à la recherche de solution et je n'ai rien trouvé, ou alors je sais pas chercher ou je suis passé à côté de la solution.
J'ai essayé d'être le plus clair et précis possible, si vous avez des questions n'hésitez pas !
Je tiens également à vous dire que j'ai un petit niveau en programmation, donc essayez de m'expliquer simplement (bon je ne suis pas stupide non plus)
Merci de votre aide, j'espère vraiment que vous pourrez me débloquer car cela fait 9h que mon projet stationne et cela commence à m'agacer, sachant que je frôle la fin de mon projet personnelle !
Cordialement,