Je possède un arduino Uno ainsi que un shield ethernet, mon but serait de convertir un valeur analogique reçu et la transmettre sur une base de donnée MYSQL. L'arduino fonctionnera aussi dans une autre parti du systeme mais le codage de celui-ci ne me pose pas de probleme
Lire et convertir la valeur ne me pose pas de problème. Mon souci et dans l'envoie de donnée dans la base MYSQL. J'avais trouver un exemple et réussi à faire un programme fonctionnant, le souci c'est que celui-ci ce déconnecte souvent < 10 min et la déconnexion s'effectue aléatoirement. J'ai effectue quelque recherche et d’après mes maigre connaissance en programmation je dirait que le problème viens du souci que je ne lui ordonne pas de vidéo le "BUFFER" qui est crée dans la librairie mysql.h. Je pensé procéder à une déconnexion puis reconnexion tous les cycle effectuer afin de procéder à vidage du buffer ( si celui-ci ce vide a la déconnexion j'en suis pas sur). A priori il n'y a pas de commande prévu pour une déconnexion d'une base MYSQL. A titre d'information je ne passe pas par une page php afin de pousser les donnée sur le serveur.
Si encore il effectuer une déconnexion mais continue sa boucle et exécuter les autres taches demander puis se reconnecter ceci pourrait me convenir car si je perd quelque information venant du capteur ceci n'est pas très grave. Mais le gros problème ces que celui-ci arrête complément toute ces actions puis recommande le "loop" ce qui ne me conviens pas vu que j'ai une autre parti de programme qui doit tourner, la lecture et l'envoie est simplement un sous programme d'un parti de mon système.
Voici mon code, si dessous. Si vous savez quand effectuer le vidage du BUFFER ou comment ce déconnecter je suis preneur.
- Code: Tout sélectionner
#include <mysql.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Deuligne.h>
#include <Wire.h>
int data = 7; // sorti digital data pour commande vco broche 7
int Fsync1 = 6; // sorti digital syncro vco 1 broche 6
int Fsync2 = 8; // sorti digital syncro vco 2 broche 8
int sck = 5; // sorti digital horloge vco broche 5
unsigned char j;
Deuligne lcd;
const int valeurAna =3;
int valeurLue =0;
int valeur = 0;
char buffer[5];
int q = 0;
int i = 0;
byte mac[] = { 0x00 , 0x00, 0x00, 0x00, 0x00, 0x01 }; //definition adresse mac
byte ip[] = {172, 16, 241, 200}; //definition de son adresse
byte serveur_addr[] = {172,16,241,1}; //definition adresse base MYSQL
char user[] = "arduino";
char password[] = "1234";
char INSERT_SQL[] = "INSERT INTO vlf.signal_level VALUES (000,NULL)";
Connector my_conn;
boolean test;
void setup()
{
pinMode(data,OUTPUT);
pinMode(Fsync1,OUTPUT);
pinMode(Fsync2,OUTPUT);
pinMode(sck,OUTPUT);
digitalWrite(data,LOW);
digitalWrite(Fsync1,LOW);
digitalWrite(Fsync2,LOW);
digitalWrite(sck,HIGH);
Ethernet.begin(mac, ip); //initialisation mac et ip
Serial.begin (115200);
delay (1000);
Serial.println("Connection");
my_conn.mysql_connect (serveur_addr,3306,user,password);
lcd.init();
}
void loop ()
{
q=0;
i=0;
station1();
while (q < 20)
{
Serial.println(q);
lirevaleur1();
valeurenvoie();
q=q++;
delay(1000);
}
station2();
while (i < 20)
{
Serial.println (i);
//meme boucle que au dessus mais stockage sur une autre base
i=i++;
delay (1000);
}
}
void emet(unsigned int valeur,unsigned char voie)
{
if (voie==0) digitalWrite(Fsync1,LOW);
else
digitalWrite(Fsync2,LOW);
for (j=0;j<16;j++)
{
if((valeur&0x8000)==0x8000) digitalWrite(data,HIGH);
else digitalWrite(data,LOW);
digitalWrite(sck,LOW);
digitalWrite(sck,HIGH);
valeur=valeur<<1;
}
digitalWrite(Fsync1,HIGH);
digitalWrite(Fsync2,HIGH);
Serial.println("emet"+voie);
}
void lirevaleur1()
{
valeurLue=analogRead(valeurAna);
valeur = map(valeurLue,0,1023,0,255);
itoa(valeur,buffer,10);
if (valeur>99)
{
INSERT_SQL[37]=buffer[0];
INSERT_SQL[38]=buffer[1];
INSERT_SQL[39]=buffer[2];
}
else if (valeur>9)
{
INSERT_SQL[37]='0';
INSERT_SQL[38]=buffer[0];
INSERT_SQL[39]=buffer[1];
}
else
{
INSERT_SQL[37]='0';
INSERT_SQL[38]='0';
INSERT_SQL[39]=buffer[0];
}
Serial.println (INSERT_SQL);
}
void station1()
{
emet(0x2000,1);
emet(0x7BE7,1);
emet(0x4027,1);
lcd.setCursor(4,0);
lcd.print("Station 1");
delay(1000);
}
void station2()
{
emet(0x2000,1);
emet(0x7BE7,1);
emet(0x4027,1);
lcd.setCursor(4,0);
lcd.print("Station 2");
delay(1000);
}
void valeurenvoie()
{
lcd.setCursor(2, 1);
lcd.print("valeur stocker");
}