Mar 16 Avr 2019, 22:22
Mer 17 Avr 2019, 04:17
djbouns a écrit:commodore, tu a essayer de gérer des servo sans utiliser mon code pour voir ?
Si tu trouve un code avec le quelle tu a le problème avec les originaux et pas les copie, fait le moi suivre que je vois stp
Jeu 18 Avr 2019, 16:53
Ven 19 Avr 2019, 04:38
Ven 19 Avr 2019, 10:43
Mer 24 Avr 2019, 04:50
Mer 24 Avr 2019, 08:20
void brassage() {
for (uint8_t numeroBrassage = numeroUn; numeroBrassage <= numeroTrois ; numeroBrassage++) { // lance la fonction pour chaque pompe de brassage
/* si nourissage en cours */
if (nourissageEnCours ) {
if (millis() - tempsPrecedentNourrissage <= sauvegarde.dureeNourrissageMillis) { // si duree du nourisssage non ateinte
if (sauvegarde.brassageOnOffPwm[numeroBrassage] != Arret) { // si pas en OFF baisse du brassage au MIN
variable.pwmBrassage[numeroBrassage] = puissanceMinBrassage[numeroBrassage];
//analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
// DPRINTF("brassage minimum car Nourrissage"); DPRINTLN();
}
else { // si en OFF
variable.pwmBrassage[numeroBrassage] = zero;
//analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage]);
// DPRINTF("Nourrissage mais en OFF"); DPRINTLN();
}
if (MajEcranTempeteEnCours ) { // si tempette en cours, tempette OFF
MajEcranTempeteEnCours = !MajEcranTempeteEnCours;
statutTempete(); // met a jour l'icone sur l'ecran
}
if (numeroBrassage == numeroTrois) {
if (MajEcranNourrissageEnCours == false) { // met a jour les info a l'ecran
MajEcranNourrissageEnCours = !MajEcranNourrissageEnCours; /// boolean pour ne rafraichir en boucle
rafraichirBrassage1Nextion(); // rafraichi les info a l'ecran
rafraichirBrassage2Nextion(); // rafraichi les info a l'ecran
rafraichirBrassage3Nextion(); // rafraichi les info a l'ecran
onOffalimentation = false; // met le bouton en false
}
}
if (tempeteAleatoireEnCours ) { // si la tempette etait ON
tempeteAleatoireEnCours = !tempeteAleatoireEnCours; // met tempete en OFF
}
}
else { // nourissage fini
nourissageEnCours = !nourissageEnCours;
onOffalimentation = true; // met le bouton en true
}
}
/* si tempete manuel en cours */
else if (tempeteManuelEnCours ) { // tempete manuel ON
if (millis() - tempsPrecedentTempete <= sauvegarde.dureeTempeteMillis) { // si tempete manuel
//DPRINT(MajEcranTempeteEnCours); DPRINTLN(); // debug
if (sauvegarde.brassageOnOffPwm[numeroBrassage] != Arret) { // si pas en OFF
variable.pwmBrassage[numeroBrassage] = sauvegarde.puissanceTempete; // puissance definie en tempete
//analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
}
else { // si en OFF
variable.pwmBrassage[numeroBrassage] = zero; // puissance zero
//analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage]);
}
if (MajEcranTempeteEnCours == false) { // boolean pour ne pas mettre a jour les info a l'ecran en boucle
MajEcranTempeteEnCours = !MajEcranTempeteEnCours;
statutTempete(); // MAJ l'icone sur l'ecran
}
if (MajEcranNourrissageEnCours ) { // boolean pour ne pas mettre a jour les info a l'ecran en boucle
MajEcranNourrissageEnCours = !MajEcranNourrissageEnCours;
}
if (tempeteAleatoireEnCours ) {// boolean pour ne pas mettre a jour les info a l'ecran en boucle
tempeteAleatoireEnCours = !tempeteAleatoireEnCours;
}
//DPRINTF("brassage TEMPETE manuel "); DPRINT(MajEcranTempeteEnCours); DPRINTLN();
}
else { // fin de la tempette manuel
tempeteManuelEnCours = !tempeteManuelEnCours; // boolean pour mettre a jour les info a l'ecran
}
}
/* si tempete aleatoir en cours */
else if (tempeteAleatoireEnCours ) {
if (millis() - tempsPrecedentTempeteAleatoire <= dureeTempeteAleatoire) {
variable.pwmBrassage[numeroBrassage] = sauvegarde.puissanceTempete;
if (sauvegarde.brassageOnOffPwm[numeroBrassage] > Arret) {
//analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
}
else {
variable.pwmBrassage[numeroBrassage] = zero;
//analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage]);
}
if (numeroBrassage == numeroTrois) {
if (MajEcranTempeteEnCours == false) {
MajEcranTempeteEnCours = !MajEcranTempeteEnCours;
statutTempete();
rafraichirBrassage1Nextion(); // rafraichi les info a l'ecran
rafraichirBrassage2Nextion(); // rafraichi les info a l'ecran
rafraichirBrassage3Nextion(); // rafraichi les info a l'ecran
}
}
if (MajEcranNourrissageEnCours ) {
MajEcranNourrissageEnCours = !MajEcranNourrissageEnCours;
}
// DPRINTF("brassage TEMPETE aleatoire"); DPRINTLN(); //debug
}
else { // si tempete aleatoir fini
tempeteAleatoireEnCours = false;
rafraichirBrassage1Nextion(); // rafraichi les info a l'ecran
rafraichirBrassage2Nextion(); // rafraichi les info a l'ecran
rafraichirBrassage3Nextion(); // rafraichi les info a l'ecran
}
}
/* sinon brassage "normal" selon horraire */
else {
if (sauvegarde.brassageOnOffPwm[numeroBrassage] == Arret) { // si brassage OFF
variable.pwmBrassage[numeroBrassage] = zero; // puissance zero
//analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage]);
//DPRINTF("brassage OFF");DPRINT(numeroBrassage); DPRINTLN(); //debug
}
else if (sauvegarde.brassageOnOffPwm[numeroBrassage] == Actif) { // si brassage ON
variable.pwmBrassage[numeroBrassage] = sauvegarde.puissanceMaxBrassage[numeroBrassage]; // puissance MAX defini
//analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
//DPRINTF("brassage nominal");DPRINT(numeroBrassage); DPRINTLN(); //debug
}
else if (sauvegarde.brassageOnOffPwm[numeroBrassage] == Pwm) { // si brassage PWM acalmie la nuit, lever/coucher associer au soleil
if ((Time >= debutleverSoleil[bleu1]) && (Time < finleverSoleil[blanc2])) { // augmentation pendent lever soleil
variable.pwmBrassage[numeroBrassage] = map(Time, debutleverSoleil[bleu1], finleverSoleil[blanc2], puissanceMinBrassage[numeroBrassage], sauvegarde.puissanceMaxBrassage[numeroBrassage]);
//analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
}
else if ((Time >= finleverSoleil[blanc2]) && (Time < debutcoucherSoleil[blanc1])) { // puissance MAX defini pendent le zenith
variable.pwmBrassage[numeroBrassage] = sauvegarde.puissanceMaxBrassage[numeroBrassage];
//analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
}
else if ((Time >= debutcoucherSoleil[blanc1]) && (Time < fincoucherSoleil[bleu2])) { // dimminition pendent coucher soleil
variable.pwmBrassage[numeroBrassage] = map(Time, debutcoucherSoleil[blanc1], fincoucherSoleil[bleu2], sauvegarde.puissanceMaxBrassage[numeroBrassage], puissanceMinBrassage[numeroBrassage]);
//analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
}
else {
variable.pwmBrassage[numeroBrassage] = puissanceMinBrassage[numeroBrassage]; // puissance MAX minoré de la baisse accalmie/nourissage
//analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
}
//DPRINTF("brassage pwm");DPRINT(numeroBrassage); DPRINTLN(); //debug
}
if (MajEcranTempeteEnCours ) { // boolean pour ne pas avoir de mise a jour de l'ecran a repetition
MajEcranTempeteEnCours = !MajEcranTempeteEnCours;
statutTempete();
}
if (MajEcranNourrissageEnCours ) { // boolean pour ne pas avoir de mise a jour de l'ecran a repetition
MajEcranNourrissageEnCours = !MajEcranNourrissageEnCours;
}
if (tempeteAleatoireEnCours ) { // boolean pour ne pas avoir de mise a jour de l'ecran a repetition
tempeteAleatoireEnCours = !tempeteAleatoireEnCours;
}
}
analogWrite(pinOutBrassage[numeroBrassage], variable.pwmBrassage[numeroBrassage] * pourCentEnPwm);
}
}
Jeu 25 Avr 2019, 12:53
Ven 26 Avr 2019, 15:01
Ven 26 Avr 2019, 21:21
tout a été fait pour qu'il y est un max de sécurité et aucune blocage.Toujours cette phobie de voir tomber en panne un système très (trop) centralisateur
Ven 26 Avr 2019, 23:59
Sam 27 Avr 2019, 03:53
Sam 27 Avr 2019, 04:03
Sam 27 Avr 2019, 04:16
djbouns a écrit:Commodore a écrit:Quand je nettoies l'aquarium j’enlève 30 L d'eau et je remet 30 L , donc un bouton ON/OFF est pratique !
j'ai compris
Sam 27 Avr 2019, 09:00
Commodore a écrit:Tempête :
Pour les oscillos je déplace de 1° toutes les 10 secondes (je ne sais pas si c'est correct mais ça fonctionne bien).
Dans le mode tempête peut être faut il multiplier par 2 la vitesse des oscillos ? ou définir la vitesse des oscillos dans le mode tempête !
Non ?
Sam 27 Avr 2019, 09:04
Commodore a écrit:auto : fonctionnement normal en automatique, gérer par l'aquabouns
Off : arrêt total du fonctionnement
On : Fonctionnement forcé de la pompe d'osmolation (avec un arrêt sur le flotteur de sécurité peut être).
Ce qui permettrais d'avoir Off maintenance du bac , On remplissage du bac et auto fonctionnement normal !
Commodore a écrit:J'essaye de rendre le produit au top ...
Sam 27 Avr 2019, 10:00
Sam 27 Avr 2019, 11:50
Sam 27 Avr 2019, 15:17