bonjour
après avoir longuement cherché (surement mal) je vous appelle à l'aide
je suis en train d'essayer de créer un programme qui va recevoir par le port serie une chaine de carctères qui sera exportée sur un site web
Pour le moment c'est un programme écrit en delphi qui envoie cette chaine de caractères
la chaine est récupérée dans la fonction serialevent()
lorsque la chaine est complete le drapeau Stringcomplete est mis à true pour que la fonction loop() puisse commencer le traitement.
la fonction loop decode la chaine et me la renvoie sur mon programme delphi pour affichage
je decode l'identifiant, date, heure + la fin de la chaine qui contient une ou plusieurs analyses de longueur fixe d'où la boucle
Tout marche parfaitement bien jusqu'a l'inclusion du code de connexion à internet:
lors de l'envoi de la chaine par mon programme delphi, je n'ai plus les valeurs pour l'id (aléatoire) et les analyses(systématique) et encore plus surprenant, tous les 3 envois j'ai le message "succes to configure...." qui se trouve dans la fonction setup() qui ne devrait s'effectuer qu'une seule fois
le code de l'arduino ci dessous
merci d'avoir pris le temps de me lire
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x05, 0x00, 0xD3 };//ma carte internet shield
IPAddress server(192,168,1,100);// l'adresse de mon serveur
EthernetClient client;
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
byte inbyte=0;
String chainerecherche="";
String chainerecherche2="T C";
String animal="";
String d="";
String dilution="";
int i=158;
void setup()
{
Serial.begin(9600);
chainerecherche+=char(2);
chainerecherche+="30";
inputString.reserve(1000);
///******************************code qui pose probleme***********
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0)
{
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
for(;;)
;
}
else
{
Serial.println("Succes to configure Ethernet using DHCP");
}
// give the Ethernet shield a second to initialize:
delay(1000);
//******************************fin code problème****************
}
void loop()
{
int nbanalyse=0;
int depart=-1;
int firstClosingBracket =-1 ;
if (stringComplete)
{firstClosingBracket = inputString.indexOf(chainerecherche);
Serial.print("position : ");
Serial.println(firstClosingBracket);
if (firstClosingBracket <0)
{Serial.print("ce n\'est pas un message machine");
}
else
{Serial.println("message machine ok :");
depart = inputString.indexOf(chainerecherche2);
Serial.print("position T C : ");
Serial.println(depart);
if (depart<0)
{Serial.println("ce n\'est pas un resultat machine");
}
else
//extraction des resultat de la chaine de caractere
{Serial.println("resultat machine ok :");}
int lg=inputString.length();
Serial.print("longeur : ");
Serial.println(lg);
animal=inputString.substring(depart+15,depart+36);
Serial.print("id : ");
Serial.println(animal);
dilution=inputString.substring(depart+36,depart+38);
Serial.print("dilution : ");
Serial.println(dilution);
d=inputString.substring(depart+4,depart+6)+"/"+inputString.substring(depart+6,depart+8)+"/"+inputString.substring(depart+8,depart+10);
Serial.print("date : ");
Serial.println(d);
d=inputString.substring(depart+10,depart+12)+":"+inputString.substring(depart+12,depart+14) ;
Serial.print("heure : ");
Serial.println(d);
i=depart+153;
nbanalyse=0;
//partie longeur variable de la chaine //on boucle jusqu'à la fin
while (i<lg)
{
d=inputString.substring(i-57,i) ;
nbanalyse++;
Serial.print("analyse"+String(nbanalyse)+" : ");
Serial.println(d);
i=i+57 ;
}
} //fin extraction resultat
inputString ="";
stringComplete = false;
}//fin chaine complete
}
/*
SerialEvent occurs whenever a new data comes in the
hardware serial RX. This routine is run between each
time loop() runs, so using delay inside loop can delay
response. Multiple bytes of data may be available.
*/
void serialEvent() {
while (Serial.available()) {
// get the new byte:
inbyte=Serial.read();
char inChar = (char)inbyte;
// add it to the inputString:
//si le caractere est 3 c'est le dernier de la chaine
if (inbyte == 3) {
stringComplete = true;
}
else
{ if (inbyte != 15){inputString += inChar;}
// }
}
}
}
capture d'écran quand tout va bien
capture d'écran quand je mets le code d'initialisation internet dans le setup
capture d'écran tous les 3 envois