Bonjour,
Je debute avec ma carte uno et mon shield Teleinfo carteletronic
J'ai adapter mon code a divers exemples,
mais je voudrais que mes données arrive dans mon moniteur serie toute les
minutes alors que là:
elle défile en continue.
j'ai essayer de mettre un (delay)
mais ça fait rien,
#include "print.h"
#include "string.h"
#include "stdio.h"
#define echo_USB //envoie toutes les trames téléinfo sur l'USB
//*****************************************************************************************
byte inByte = 0 ; // caractère entrant téléinfo
char buffteleinfo[21] = "";
byte bufflen = 0;
const char debtrame = 0x02;
const char deb = 0x0A;
const char fin = 0x0D;
// *************** déclaration activation compteur 1 ou 2 ******
#define LEC_CPT1 5 // lecture compteur 1
#define LEC_CPT2 6 // lecture compteur 2
int compteur_actif = 1; // numero du compteur en cours de lecture
byte donnee_ok_cpt1 = 0; // pour vérifier que les donnees sont bien en memoire avant ecriture dans fichier
byte donnee_ok_cpt1_ph = 0;
// ************** initialisation *******************************
void setup()
{
// initialisation du port 0-1 lecture Téléinfo
Serial.begin(1200);
// parité paire E
// 7 bits data
UCSR0C = B00100100;
// initialisation des sorties selection compteur
pinMode(LEC_CPT1, OUTPUT);
pinMode(LEC_CPT2, OUTPUT);
digitalWrite(LEC_CPT1, HIGH);
digitalWrite(LEC_CPT2, LOW);
}
// ************** boucle principale *******************************
void loop() // Programme en boucle
{
read_teleinfo();
}
///////////////////////////////////////////////////////////////////
// Calcul Checksum teleinfo
///////////////////////////////////////////////////////////////////
char chksum(char *buff, int len)
{
int i;
char sum = 0;
for (i=1; i<(len-2); i++) sum = sum + buff[i];
sum = (sum & 0x3F) + 0x20;
return(sum);
}
///////////////////////////////////////////////////////////////////
// Analyse de la ligne de Teleinfo
///////////////////////////////////////////////////////////////////
void traitbuf_cpt(char *buff, int len)
{
if (compteur_actif == 1){
}
}
///////////////////////////////////////////////////////////////////
// Lecture trame teleinfo (ligne par ligne)
///////////////////////////////////////////////////////////////////
void read_teleinfo()
{
// si une donnée est dispo sur le port série
if (Serial.available() > 0)
{
// recupère le caractère dispo
inByte = Serial.read();
#ifdef echo_USB
Serial.print(char(inByte)); // echo des trames sur l'USB (choisir entre les messages ou l'echo des trames)
#endif
if (inByte == debtrame) bufflen = 0; // test le début de trame
if (inByte == deb) // test si c'est le caractère de début de ligne
{
bufflen = 0;
}
buffteleinfo[bufflen] = inByte;
bufflen++;
if (bufflen > 21)bufflen=0; // longueur max du buffer (21 pour lire trame ADCO)
if (inByte == fin && bufflen > 5) // si Fin de ligne trouvée
{
if (chksum(buffteleinfo,bufflen-1)== buffteleinfo[bufflen-2]) // Test du Checksum
{
traitbuf_cpt(buffteleinfo,bufflen-1); // ChekSum OK => Analyse de la Trame
}
}
}
}
pouvez-vous m'aider sur ce sujet SVP??
Merci par avance!