merci beaucoup de vos reponse
skywodd , toujours 1er à repondre!!! , sprintf c'est sympa ,fonctionnel, un truc que je n'ai peut être pas saisi c'est le langage utilisé pour la prog arduino , on peut utilisé du c ou c++ pur ?
fdufnews ,Merci beaucoup j'ai compris grâce a toi ou était le problème , itoa() va me rajouter \0 sur datecompil_txt[5] ='\0'; terminant ainsi la chaine de caractere
datecompil_txt[6]
datecompil_txt[7]
datecompil_txt[8]
sont toujours présent mais ne sont pas afficher a cause de datecompil_txt[5] ='\0' construit par ITOA()
le simple fait de remettre datecompil_txt[5] ='\0' sur datecompil_txt[5] ='.'; supprime le caractère de fin de chaine et reprend le reste du mot toujours en mémoire.
je comprend mieux maintenant , je vais utilisé sprintf et surtout essayer de le comprendre car il a l'air vraiment puissant!
Merci a vous 2.
de quoi pleurer: ( mais qui fonctionne)
#include <DS1307.h>
#include <UTFT.h>
#include <tinyFAT.h>
#include <UTFT_tinyFAT.h>
#include <ITDB02_Touch.h>
extern uint8_t BigFont[]; //declare la police lcd
UTFTtf myGLCD(ITDB50,38,39,40,41); // allume le lcd
ITDB02_Touch myTouch(6,5,4,3,2);
DS1307 rtc(20, 21); // allume le DS1307 sur pin 20,21
Time t;
unsigned long SCRIPT_TIMEB =0; // calcul la vitesse execution du script
unsigned long SCRIPT_TIME =0; // calcul la vitesse execution du script
unsigned long OLD_SCRIPT_TIME =0; // calcul la vitesse execution du script
unsigned long datecompil ;
unsigned long memoire_datecompil ;
unsigned int heure_actuel_compil ;
char datecompil_txt[] ="00000.txt";
// si le txt contient 07452152
byte heure_fin ; // 07
byte min_fin ; //45
unsigned int heure_min_fin ; //0745 // sert a la comparaison d'heure
char H_M_F[6];// 07:45
byte heure_debut ;// 21
byte min_debut ; //52
unsigned int heure_min_debut ;//2152 // sert a la comparaison d'heure
char H_M_D[6];//21:52
char textBuffer[8]; // pour la lecture du txt de la carte SD
////////////////////////////
void setup()
{
rtc.halt(false); // Set the clock to run-mode
Serial.begin(9600); // Setup Serial connection
myGLCD.InitLCD(); // initialise le lcd
myGLCD.clrScr(); // efface tout ce qui est present a l'ecran
myTouch.InitTouch();
myTouch.setPrecision(PREC_MEDIUM);
file.initFAT(SPISPEED_VERYHIGH);
myGLCD.setColor(0, 255, 0);
myGLCD.setFont(BigFont);
// myGLCD.loadBitmap(0, 0, 800, 480, "pic888.raw");
myGLCD.loadBitmap(200, 10, 82, 82, "deb182.raw");
myGLCD.loadBitmap(400, 10, 82, 82, "ter182.raw"); // hor,ver
myGLCD.loadBitmap(600, 10, 82, 82, "lun182.raw");
}
void loop()
{
t = rtc.getTime();// enregistre l'heure actuel dans t
// while (myTouch.dataAvailable() == true)// fonction pour dessiner a l'ecran avec touchpad
// {
// myTouch.read();
// myGLCD.drawPixel (myTouch.getX(), myTouch.getY());
// }
heure_actuel_compil = (t.hour*100)+t.min ; /* on compile l'heure hh*100 +mn , chifre max 2359 */
datecompil = (20000L)+(t.mon *100)+t.date; // on compile la date de l'horlage rtc // (20.000) + (mois * 100) + jour = 21231 pour le 31 decembre
// rtc.poke(55, 1); on poke la variable heure d'été dans la ram 55 !! on la recup en faisant : rtc.peek(55)
// truc simple pour la mise a l'heure d'été , les txt ne contienne pas de changement d'heure, l'horloge ne se met pas a jour toute seule
// lors dune mise a jour de l'heure (manuel) on changera la valeur a 1 ou 0
//si datecompil != memoire_datecompil , alors lit la carte sd
if (datecompil != memoire_datecompil)
{
sprintf(datecompil_txt, "%05d.txt", datecompil); // compile datecompil.txt
if (file.exists(datecompil_txt)) // verifie si datecompil existe en txt
{
file.openFile(datecompil_txt, FILEMODE_TEXT_READ);
file.readLn(textBuffer, 8);
file.closeFile();
// myGLCD.print("txt existe", CENTER, 340);
// on a recuperé sur textBuffer[] un truc genre : 07452152
H_M_F[0] = textBuffer[4];
H_M_F[1] = textBuffer[5]+ rtc.peek(55); if (H_M_F[1] == 58){H_M_F[1]=48; H_M_F[0]++;}
H_M_F[2] = 58; // la forme decimal de : = 48 en ascii
H_M_F[3] = textBuffer[6];
H_M_F[4] = textBuffer[7];
// H_M_ (F OU D) heure minute (fin ou debut) en chaine de caratere pour affichage lcd genre 07:45 ou 21:52
H_M_D[0] = textBuffer[0];
H_M_D[1] = textBuffer[1]+ rtc.peek(55); //if (H_M_D[1] == 58){H_M_D[1]=48; H_M_D[0]++;}
H_M_D[2] = 58; // la forme decimal de : = 48 en ascii
H_M_D[3] = textBuffer[2];
H_M_D[4] = textBuffer[3];
// je modifie le buffer code ascci > decimal pur
textBuffer[0]= textBuffer[0] - 48 ;
textBuffer[1]= textBuffer[1] - 48 ;
textBuffer[2]= textBuffer[2] - 48 ;
textBuffer[3]= textBuffer[3] - 48 ;
textBuffer[4]= textBuffer[4] - 48 ;
textBuffer[5]= textBuffer[5] - 48 ;
textBuffer[6]= textBuffer[6] - 48 ;
textBuffer[7]= textBuffer[7] - 48 ;
//on compile heure de debut du TXT
heure_debut = (textBuffer[0] *10) + textBuffer[1] ;
heure_debut = heure_debut + rtc.peek(55); // on ajoute l'heure d'ete ( 1 ou 0 )rtc.peek(55); recupere dans la ram du ds1307 a l'adresse 55 le 1/0
min_debut = (textBuffer[2] *10) + textBuffer[3] ;
heure_min_debut = heure_debut *100 + min_debut ; // = 0745
//on compile heure de fin du TXT
heure_fin = (textBuffer[4] *10) + textBuffer[5] ;
heure_fin = heure_fin + rtc.peek(55); // on ajoute l'heure d'ete ( 1 ou 0 )
min_fin = (textBuffer[6] *10) + textBuffer[7] ;
heure_min_fin = heure_fin *100 + min_fin ; // = 2152
//et on definie memoire_datecompil
memoire_datecompil = datecompil ; // pour la verification a la prochaine boucle ( evite de refaire tout sa si la date actuel na pas changer.)
}
else
{
// myGLCD.print("txt existe pas", CENTER, 340);
}
myGLCD.print(H_M_D,202, 92); // ici on a compiler l'heure du txt en chaine de caracter 07:45 , on l'afiche sur le lcd
myGLCD.print(H_M_F,602, 92);
}// fin de la verification datecompil != memoire_datecompil
// la structure de controle pour l'allumage des lampes
if((heure_actuel_compil >= heure_min_debut) && (heure_actuel_compil <= heure_min_fin))
{ myGLCD.print("ON", CENTER,352);
}
else
{ myGLCD.print("OFF", CENTER,352);
}
myGLCD.print(rtc.getTimeStr(FORMAT_LONG), 378, 92); // on affiche l'heure sur le lcd
///////////////////////////////////////////////////////////////////////////////////////////
myGLCD.printNumI(freeRam (), CENTER, 460); // ici on affiche a l'ecran la memoire disponible
///////////affiche le temps d'execution du script/////
OLD_SCRIPT_TIME = SCRIPT_TIME ; /////
SCRIPT_TIME = millis() ; /////
SCRIPT_TIMEB = SCRIPT_TIME - OLD_SCRIPT_TIME ; /////
myGLCD.printNumI(SCRIPT_TIMEB, CENTER, 440,4); /////
//////////////////////////////////////////////////////
} // fin du VOID LOOP
////////////////fonction regarde la memoire////////////////////////////////////////////
int freeRam () {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
///////////////////////////////////////////////////////////////////////////////////////
oui c'est pas beau mais sa marche , mon 1er script arduino ^^