Bonjour à tous,
Je reviens vers vous après avoir avancer sur mon projet.
Je vous le décrit rapidement :
J'ai créer une classe CTask en c++ (Pour apprendre principalement)
Je l'ai ensuite importée dans la bibliothèque de l'IDE d'Arduino et la création d'objet fonctionne. Parfait jusque là !
J'ai ensuite ajouté un écran LCD 16*2. Sur la première ligne on affiche le jour, sur la seconde la tâche à réaliser et par qui elle doit l'être. J'ai également ajouter 2 boutons poussoirs, le premier pour faire défiler les tâches de la journée sur la deuxième ligne et le second pour marquer la tâche affichée comme réalisée, et ainsi affecter cette tâche à quelqu'un d'autre pour les prochains jours.
(J'ai également un module DS1302 pour gérer la date)
Mon problème est le suivant :
Lors des tests, j'ai créé 6 Tâches, et toutes s'affichent correctement sur l'écran ![]()
J'ai alors voulu ajouter toutes les tâches ménagères de la maison, et catastrophe mon écran bug complètement. Après plusieurs tests, j'ai remarqué que le bug arrivait lorsque je crée au moins 12 tâches sur la journée, et je ne comprends absolument pas pourquoi ça ne fonctionne pas... ![]()
Voici mon code, encore un peu brouillon mais fonctionnel pour un nombre limiter de tâches ![]()
Notes pour gagner du temps dans la lecture :
-Objet CTask possède : Un nom, un temps, une difficulté (pour le tri), une récurrence hebd., une liste de jour sous forme d'entier, et 2 flags pour gérer l'affichage.
-> Flag1 permet de ne pas boucler sur l'affichage de la tâche, j'évite le clignotement.
-> Flag2 permet d'afficher "Done" sur la première ligne si la tâche est effectuée et d'affecter un nouvel individu à cette tâche.
Retirer car nombre maximum de caractère dépassé pour ce post :
Fonction IntDay retourne le jour sous forme d'entier
Fonction FrDay retourne le jour en français
#include <LiquidCrystal.h>
#include<CTask.h>
#include <DS1302.h>
DS1302 rtc(8, 10, 11);
int nbtask =12;
String memoireday;
// pointeur day
int* Lundi;
int* Mardi;
int* Mercredi;
int* Jeudi;
int* Vendredi;
int* Samedi;
int* Dimanche;
int* AllDay;
int* LMeV;
int Indice=0;
int memoireboutonScroll=1;
int boutonScroll=9;
int memoireboutonTask=1;
int boutonTask=12;
CTask Vaisselle("Vaisselle",1,1);
CTask PlanDeTravail("Plan travail",1,1);
CTask Table("Table",1,1);
CTask Bar("Bar",1,1);
CTask Balais("Balais",1,2);
CTask Serpillere("Serpillere",1,2);
CTask Toilette("Toilette",7,3);
CTask Douche("Douche",5,2);
CTask Lavabo("Lavabo",2,1);
CTask TableBasse("Table basse",4,1);
CTask Tele("Tele",1,1);
CTask Tapis("Tapis",10,3);
CTask PoubelleS("Sortir poubelle",5,3);
CTask PoubelleR("Rentrer poubelle",5,3);
CTask* ptask;
int nbindividu = 2;
CIndividu William("William");
CIndividu Adam("Adam");
CIndividu* Individu;
// Initalisation de la librairie
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
Serial.begin(9600);
pinMode(boutonScroll,INPUT_PULLUP);
pinMode(boutonTask,INPUT_PULLUP);
// ---------- Time ---------
rtc.halt(false);
rtc.writeProtect(false);
rtc.setDOW(SATURDAY); // Set Day-of-Week
//rtc.setTime(20, 52, 10); // Set the time to 12:00:00 (24hr format)
//rtc.setDate(3, 18, 2021); // Set the date to August 6th, 2010*/
//----------------------------------------
// ------ Set Up list Day ------
Lundi=new int;
*Lundi=0;
Mardi=new int;
*Mardi=1;
Mercredi=new int;
*Mercredi=2;
Jeudi=new int;
*Jeudi=3;
Vendredi=new int;
*Vendredi=4;
Samedi=new int;
*Samedi=5;
Dimanche=new int;
*Dimanche=6;
LMeV=new int[3];
LMeV[0]=0;
LMeV[1]=2;
LMeV[2]=4;
AllDay=new int[7];
for (int i=0;i<7;i++)
{
AllDay[i]=i;
}
// ------ End Set Up list Day ------
// ------ Set Up TaskDay ------
Vaisselle.AddDay(1,Samedi);
PlanDeTravail.AddDay(1,Samedi);
Table.AddDay(1,Samedi);
Bar.AddDay(1,Samedi);
Balais.AddDay(1,Samedi);
Serpillere.AddDay(1,Samedi);
Toilette.AddDay(1,Samedi);
Douche.AddDay(1,Samedi);
Lavabo.AddDay(1,Samedi);
TableBasse.AddDay(1,Samedi);
Tele.AddDay(1,Samedi);
Tapis.AddDay(1,Samedi);
//PoubelleS.AddDay(1,Samedi);
//PoubelleR.AddDay(1,Samedi);
// ------ End Set Up TaskDay ------
Individu = new CIndividu[nbindividu];
Individu[0] = William;
Individu[1] = Adam;
// ------ ------ Initialisation Task ------ -------
//if (ptask==NULL)
//{
ptask = new CTask[nbtask];
ptask[0].Copie(Vaisselle);
ptask[1].Copie(PlanDeTravail);
ptask[2].Copie(Table);
ptask[3].Copie(Bar);
ptask[4].Copie(Balais);
ptask[5].Copie(Serpillere);
ptask[6].Copie(Toilette);
ptask[7].Copie(Douche);
ptask[8].Copie(Lavabo);
ptask[9].Copie(TableBasse);
ptask[10].Copie(Tele);
ptask[11].Copie(Tapis);
//ptask[12].Copie(PoubelleS);
//ptask[13].Copie(PoubelleR);
//}
TriTask(ptask,nbtask);
Attrib(ptask,nbtask,Individu,2);
lcd.begin(16, 2);
analogWrite(8,15);
}
// -----------------------------------------------------------------------------------------
void loop() {
if(memoireday!=rtc.getDOWStr())
{
for (int i=0;i<nbtask;i++)
{
if(ptask[i].Flag2()==false)
{
ptask[i].BascFlag2();
}
}
}
memoireday=rtc.getDOWStr();
lcd.setCursor(0,0);
lcd.print(FrDay(rtc.getDOWStr()));
lcd.print(" : ");
// Affichage Task du jour
for (int i=0;i<ptask[Indice].Rec();i++)
{
if(ptask[Indice].Day(i)==IntDay(rtc.getDOWStr()) && ptask[Indice].Flag1()==true)
{
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(ptask[Indice].TaskName());
lcd.print(" - ");
if(ptask[Indice].Flag2()==false) // Si bouton2 a été appuyé
{
if (ptask[Indice].Indiv()==Individu[0]) // Valable que pour 2 individus !
{
lcd.print(Individu[1].Indiv());
}
else
{
lcd.print(Individu[0].Indiv());
}
}
else
{
lcd.print(ptask[Indice].Indiv());
}
ptask[Indice].BascFlag1(); // Pour que la tâche ne s'affiche qu'une seule fois et pas en boucle
}
int j=FrDay(rtc.getDOWStr()).length()+3;
if (ptask[Indice].Flag2()==false) // Affichage Done si tâche effectuée
{
lcd.setCursor(j,0);
lcd.print("Done");
}
else
{
lcd.setCursor(j,0);
lcd.print(" ");
}
}
int etatboutonScroll = digitalRead(boutonScroll);
int etatboutonTask = digitalRead(boutonTask);
if (etatboutonScroll!=memoireboutonScroll && etatboutonScroll==LOW)
{
if(ptask[Indice].Flag1()==false)
{
ptask[Indice].BascFlag1();
}
if (Indice==nbtask-1) // ATTENTION BESOIN DU VRAI NOMBRE DE TACHES DE LA JOURNEE !!!
{
Indice=0;
lcd.setCursor(0,1);
lcd.print(" ");
}
else
{
Indice++;
}
lcd.setCursor(0,1);
lcd.print(" ");
}
if (etatboutonTask!=memoireboutonTask && etatboutonTask==LOW) // Valable que pour 2 individus !
{
ptask[Indice].BascFlag2();
if(ptask[Indice].Indiv()==Individu[0])
{
ptask[Indice].Assign(Individu[1]);
}
else
{
ptask[Indice].Assign(Individu[0]);
}
}
memoireboutonScroll=etatboutonScroll;
memoireboutonTask=etatboutonTask;
Serial.println(ptask[Indice].Indiv());
}
void TriTask(CTask* pT,int n)
{
for (int i=0;i<n;i++)
{
for (int j=i;j<n;j++)
{
if(pT[i].Val()>pT[i].Val())
{
CTask T(pT[i]);
pT[i].Copie(pT[j]);
pT[j].Copie(T);
}
}
}
}
void Attrib(CTask* ptask,int nT,CIndividu* I,int nI)
{
int j = 0;
for (int i = 0; i < nT; i++)
{
if (j == nI)
{
j = 0;
}
ptask[i].Assign(I[j]);
j++;
}
}
- de 12 tâches :
- de 12 tâches:
En espérant que votre sagesse m'éclairera ![]()
Bonne journée

