Gen 3 008 Posté(e) février 22, 2019 Partager Posté(e) février 22, 2019 (modifié) 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 Modifié février 22, 2019 par Gen Lien à poster Partager sur d’autres sites
Omgprod 87 Posté(e) février 22, 2019 Auteur Partager Posté(e) février 22, 2019 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 ! 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 ! Lien à poster Partager sur d’autres sites
Gen 3 008 Posté(e) février 22, 2019 Partager Posté(e) février 22, 2019 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 Lien à poster Partager sur d’autres sites
Gen 3 008 Posté(e) février 23, 2019 Partager Posté(e) février 23, 2019 (modifié) 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 Modifié février 23, 2019 par Gen 1 Lien à poster Partager sur d’autres sites
Omgprod 87 Posté(e) février 23, 2019 Auteur Partager Posté(e) février 23, 2019 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 Lien à poster Partager sur d’autres sites
Messages recommandés