Bonjour à tous ![]()
J'ai un petit problème d'envoi irrégulier de données vers Xively, je vous explique :
J'ai une pompe type vide cave qui se met en marche régulièrement et j'ai besoin d'avoir un monitoring sur cette mise en marche.
Coté électrique pas de soucis ça fonctionne parfaitement ! Heureusement je suis électrotechnicien ![]()
Par contre côté programmation j'ai beaucoup plus de mal... J'ai récupéré des bouts de codes par ci-par la et j'ai assemblé le tout, en rajoutant des petits trucs à ma sauce. Tout marche bien mais j'ai quelques problèmes...
Le soucis c'est que j'ai d'ai problème d'upload vers Xively, 5 à 6 fois par jour l'arduino se met en erreur et se fige. La seule solution pour le débloquer c'est de faire un reset...
A noter que l'arduino est relié à internet vie un shield ethernet, un module wifi "point d'accès" Sofim et une livebox.
Je vous poste mon code... Il est vraiment sale je sais ! Patapé ![]()
#include <SPI.h>
#include <Ethernet.h>
#include <HttpClient.h>
#include <Xively.h>
#include <LiquidCrystal.h>
#include <avr/wdt.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Declaration adresse mac
IPAddress ip(192,168,1,51); //déclaration IP locale
char xivelyKey[] = "******************************************"; // cle Xively
const int pompe = 2; //Broche etat pompe
const int ecl = 3; //Broche retroeclairage ecran
int pompe1; //Variable état pompe
const int ARRET=0; //Pompe a l arret
const int MARCHE=1; //Pompe en marche
const int RS=8; //Broche ecran
const int E=9; //Broche ecran
const int D4=4; //Broche ecran
const int D5=5; //Broche ecran
const int D6=6; //Broche ecran
const int D7=7; //Broche ecran
char sensorId[] = "Marche_pompe"; //Intitule releve Xively
XivelyDatastream datastreams[] = {
XivelyDatastream(sensorId, strlen(sensorId), DATASTREAM_FLOAT),
};
XivelyFeed feed(118832835, datastreams, 1 /* number of datastreams */); //Init Xively
EthernetClient client;
XivelyClient xivelyclient(client);
LiquidCrystal lcd(RS, E, D4, D5, D6, D7); //Declaration broche lcd
void setup() {
pinMode(pompe, INPUT); //Broche pompe entree
pinMode(ecl, OUTPUT); //Broche retroeclairage sortie
digitalWrite(pompe, HIGH) ; //Pullup haut
lcd.begin(20,4); //Init lcd
Serial.begin(9600);
Serial.println("Starting single datastream upload to Xively...");
lcd.print("Debut de connexion a Xively");
Serial.println();
Ethernet.begin(mac, ip); //Init ethernet
}
void loop() {
int sensorValue = !digitalRead(pompe); //Valeur inverse de la lecture
datastreams[0].setFloat(sensorValue);
lcd.clear(); //Effacement lcd
Serial.print("Read sensor value ");
Serial.println(datastreams[0].getFloat());
lcd.write("Lecture de la valeur");
lcd.print(sensorValue);
Serial.println("Uploading it to Xively");
lcd.print(" Upload vers Xively");
int ret = xivelyclient.put(feed, xivelyKey); //Upload vers Xively [i][b]Reste bloqué ici[/b][/i]
delay(500);
lcd.clear(); //Effacement lcd
Serial.print("xivelyclient.put returned ");
Serial.println(ret); //Valeur retour Xively
lcd.print("Xively a retourne ");
lcd.print(ret); //Affichage de la valeur
delay(1000);
lcd.clear(); //Effacement lcd
Serial.println();
if (sensorValue==1&&ret==200) { //Si pompe en marche et communication ok marche rétroeclairage
digitalWrite (ecl, HIGH);
lcd.print("Pompe en marche");
lcd.print(" Communication bonne");
delay(2000);
}
if (sensorValue==0&&ret==200) { //Si pompe à l'arret et communication bonne arret retroeclairage
digitalWrite (ecl, LOW);
lcd.print("Pompe a l arret");
lcd.print(" Communication bonne");
delay(2000);
}
if (sensorValue==1&&ret!=200) { //Si pompe en marche et erreur de communication marche retroeclairage
digitalWrite (ecl, HIGH);
lcd.print("Pompe en marche");
lcd.print(" Erreur de communicat");
lcd.setCursor(0,4);
lcd.write("ion");
delay(2000);
}
if (sensorValue==0&&ret!=200) { //SI pompe a l arret et erreur de communication marche retroeclairage
digitalWrite (ecl, HIGH);
lcd.print("Pompe a l arret");
lcd.write(" Erreur de communicat");
lcd.setCursor(0,4);
lcd.write("ion");
delay(2000);
}
}