[GMBB] Re-Edition de l'Automate de Windaube


Recommended Posts

yop

 

J'ai jeté une bille vite fait et....

 

Ton programme va planter au bout d'une 50 aines de jours.

la fonction millis() est à bannir pour des programmes à cycles longs

Utilises unixtime du RTC

 

Tu n'utilises pas d'hystérésis sur ta t° et ton Hr.

de fait les relais seront sollicités de manières répétitives pour rien

 

Les données sont en dur dans le code... pas glop, à la moindre modification, il faut recharger le programme

 

voila en gros ce que j'ai vu rapidement, en espérant que cela puisse t'aider

 

++

GEN

Edited by Gen
Link to post
Share on other sites

Salut @Gen !! 

Toujours dans la Zone ! sa fait plaisir ! ;) 

 

Je te remercie c'est exactement le genre de retour que je voulais, n'ayant fait que du web depuis quelques mois j'ai pas mal de trucs qui sont passés a la trappe ! :D 

Je crois on avait eu un bout de conversation sur ce sujet ? je vais profiter pour retourner jeter un coup d'oeil a la classe cyclic ou daily ou juste convertir a ma sauce le unixtime..

Je vais m'y coller and we will see !

 

 

 

 

 

Link to post
Share on other sites

re:

 

Pioche dans le programme GrowDuino V3, tu y trouveras toute l'inspiration dont tu as besoin, ainsi que des classes qui te faciliteront la tâche

 

Bonne prog

 

++

GEN

Link to post
Share on other sites

re:

 

Quelques conseils en programmation.

 

Dans ton code tu utilises un entier (int) pour déclarer la valeur d'état : int brasseurState           = 0;

Cette variable n'aura que 2 valeurs possibles (0 ou 1), alors pourquoi ne pas utiliser un booléen ?

booléen = 0 ou 1 / faux ou vrai Ce qui donne en déclaration : bool brasseurState = false;

tu y gagneras en mémoire et tu peux utiliser directement cette valeur booléenne pour te faciliter la vie et réduire ton code

 

Exemple

Ton code

if ( TimerBrass <= 10 ) {
    digitalWrite(brasseur, HIGH);
    brasseurState = 1;
  } else if ( TimerBrass > 10 ) {
    digitalWrite(brasseur, LOW);
    brasseurState = 0;
  } else if (TimerBrass == 30) {
    TimerBrass = 0;
  }

 

devient :

brasseurState = (TimerBrass <= 10);

digitalWrite(brasseur, brasseurState);  => le 2eme paramètre est un booléen HIGH = true  et LOW = false

 

Car le process dans ton code, ne passera JAMAIS par else if (TimerBrass == 30)  car timerBrass aura déjà répondu au moins à une des deux premières conditions

Si tu veux qu'il passe dedans il faut une autre condition extérieure

 

brasseurState = (TimerBrass <= 10);

digitalWrite(brasseur, brasseurState);

If(TimerBrass == 30){TimerBrass = 0;}

 

Et avec un petit peu de machiavélisme on pourrait même écrire mais alors tu n'as plus l'indicateur de fonctionnement brasseurState et pour connaître son état tu devras faire un digitalRead();

 

digitalWrite(brasseur, TimerBrass <= 10);

If(TimerBrass == 30){TimerBrass = 0;}

 

C'est la théorie, car comme dit plus haut, sans hystérésis, ton relais fonctionnera de manière intempestive pour rien

Faire également attention à ton utilisation de timerBrass  car de ce que j'en comprend, il fonctionne en deçà de 10 se coupe au dessus de 10, mais quand cela monte à 30 il se remet à fonctionner car TimerBrass repasse à 0 donc est de nouveau en deça de 10

 

N-joy Man et n'hésites pas si tu as un souci

 

++

GEN

 

Edited by Gen
  • Thanks 1
Link to post
Share on other sites
Il y a 9 heures, Gen a dit :

re:

 

Quelques conseils en programmation.

 

Dans ton code tu utilises un entier (int) pour déclarer la valeur d'état : int brasseurState           = 0;

Cette variable n'aura que 2 valeurs possibles (0 ou 1), alors pourquoi ne pas utiliser un booléen ?

booléen = 0 ou 1 / faux ou vrai Ce qui donne en déclaration : bool brasseurState = false;

tu y gagneras en mémoire et tu peux utiliser directement cette valeur booléenne pour te faciliter la vie et réduire ton code

 

Exemple

Ton code

if ( TimerBrass <= 10 ) {
    digitalWrite(brasseur, HIGH);
    brasseurState = 1;
  } else if ( TimerBrass > 10 ) {
    digitalWrite(brasseur, LOW);
    brasseurState = 0;
  } else if (TimerBrass == 30) {
    TimerBrass = 0;
  }

 

devient :

brasseurState = (TimerBrass <= 10);

digitalWrite(brasseur, brasseurState);  => le 2eme paramètre est un booléen HIGH = true  et LOW = false

 

Car le process dans ton code, ne passera JAMAIS par else if (TimerBrass == 30)  car timerBrass aura déjà répondu au moins à une des deux premières conditions

Si tu veux qu'il passe dedans il faut une autre condition extérieure

 

brasseurState = (TimerBrass <= 10);

digitalWrite(brasseur, brasseurState);

If(TimerBrass == 30){TimerBrass = 0;}

 

Et avec un petit peu de machiavélisme on pourrait même écrire mais alors tu n'as plus l'indicateur de fonctionnement brasseurState et pour connaître son état tu devras faire un digitalRead();

 

digitalWrite(brasseur, TimerBrass <= 10);

If(TimerBrass == 30){TimerBrass = 0;}

 

C'est la théorie, car comme dit plus haut, sans hystérésis, ton relais fonctionnera de manière intempestive pour rien

Faire également attention à ton utilisation de timerBrass  car de ce que j'en comprend, il fonctionne en deçà de 10 se coupe au dessus de 10, mais quand cela monte à 30 il se remet à fonctionner car TimerBrass repasse à 0 donc est de nouveau en deça de 10

 

N-joy Man et n'hésites pas si tu as un souci

 

++

GEN

 

 

Salut @Gen ! 

Que dire .... bah encore un gros merci, je prend les conseils et je vais les mettre en application ! ;) 

 

Vraiment comme dit plus haut j'ai recommencé ce petit bout de code dans la semaine donc rien n'est opti du tout, et revenir sur du Arduino, après des mois de PHP et de JS qu'elle tannée :D  ( déclarer toutes les variables et leurs types, de se battre avec les libs ) .. bon,  mine de rien ça m'avait manqué ;)

 

Je me suis lancé sur beaucoup trop de boucles pour faire au plus simple sur le moment,  je vais bosser sur l'optimisation du code ! 

 

Encore merci Gen ;) 

 

PS: Partant sur les bons conseils .. en tant que Dev Web, WordPress est a bannir ( <= un peu comme millis() pour un timer ) :D Mouahahahaha 

Link to post
Share on other sites