Go Down

Topic: AQUABOUN'S /// GESTION D'AQUARIUM RECIFAL (Read 23318 times) previous topic - next topic

djbouns

Attention - toutes les adresses de vos saveXXX ne doivent pas être des uint8_t mais des uint16_t
partant de zero, la liste de "save" doit actuellement arriver a ~100 d'ou le fait que j'ai mis uint8_t tout en sachant qu'il faudrait passer en uint16_t sur les save d'après.
tu remarqueras que j'ai bien mis uint16_t adresse = 0;
Apres je supose que c'est pour "harmoniser" qu'il faut pas faire comme j'ai fait ?


Vous voulez dire que vos saveXXX ce ne sont pas des constantes globales? Si c'est DANS le code de setup() alors la portée de ces variables est limitée au setup, elles sont inconnues en dehors de la fonction.
Je n'avait pas reflechit que setup() fonctionnait comme void mafonction().

Les save* était dans le setup au moment de mon message.
Initialement je les avait mis dans mon autres.cpp dans le "rubrique" eeprom et j'avais une erreur, qui m'etait tout aussi incomprehensible puisque je declare bien adresse et il me dit  'adresse' does not name a type
Code: [Select]
autres.cpp:107: error: 'adresse' does not name a type
 adresse += sizeof(puissanceMaxBrassage1);

 ^

autres.cpp:109: error: 'adresse' does not name a type

 adresse += sizeof(puissanceMaxBrassage2);

 ^

autres.cpp:111: error: 'adresse' does not name a type

 adresse += sizeof(puissanceMaxBrassage3);

 ^

autres.cpp:113: error: 'adresse' does not name a type

 adresse += sizeof(accalmieNocturne);

 ^

autres.cpp:115: error: 'adresse' does not name a type

 adresse += sizeof(leverSoleil);

 ^

autres.cpp:117: error: 'adresse' does not name a type

 adresse += sizeof(coucherSoleil);

 ^

autres.cpp:119: error: 'adresse' does not name a type

 adresse += sizeof(dureelevercoucher);

 ^

autres.cpp:121: error: 'adresse' does not name a type

 adresse += sizeof(alertetemperaturebasse);

 ^

autres.cpp:123: error: 'adresse' does not name a type

 adresse += sizeof(alertetemperaturehaute);

 ^

autres.cpp:125: error: 'adresse' does not name a type

 adresse += sizeof(ventilationaquarium);

 ^

autres.cpp:127: error: 'adresse' does not name a type

 adresse += sizeof(ventilationrampe);

 ^

autres.cpp:129: error: 'adresse' does not name a type

 adresse += sizeof(heureNourrissage1);

 ^

autres.cpp:131: error: 'adresse' does not name a type

 adresse += sizeof(heureNourrissage2);

 ^

autres.cpp:133: error: 'adresse' does not name a type

 adresse += sizeof(dureeNourissageMillis);

 ^

autres.cpp:135: error: 'adresse' does not name a type

 adresse += sizeof(consignePhRac);

 ^

autres.cpp:137: error: 'adresse' does not name a type

 adresse += sizeof(alertephbacbas);

 ^

autres.cpp:139: error: 'adresse' does not name a type

 adresse += sizeof(alertephbachaut);

 ^

autres.cpp:141: error: 'adresse' does not name a type

 adresse += sizeof(puissanceMaxBlanc);

 ^

autres.cpp:143: error: 'adresse' does not name a type

 adresse += sizeof(puissanceMaxBleu);

 ^

autres.cpp:145: error: 'adresse' does not name a type

 adresse += sizeof(oscillo1Angle1);

 ^

autres.cpp:147: error: 'adresse' does not name a type

 adresse += sizeof(oscillo2Angle1);

 ^

autres.cpp:149: error: 'adresse' does not name a type

 adresse += sizeof(oscillo3Angle1);

 ^

autres.cpp:151: error: 'adresse' does not name a type

 adresse += sizeof(oscillo1Angle2);

 ^

autres.cpp:153: error: 'adresse' does not name a type

 adresse += sizeof(oscillo2Angle2);

 ^

autres.cpp:155: error: 'adresse' does not name a type

 adresse += sizeof(oscillo3Angle2);

 ^

Plusieurs bibliothèque trouvées pour "DallasTemperature.h"
Utilisé : C:\Users\djbouns\Documents\Arduino\libraries\DallasTemperature
Non utilisé : C:\Program Files (x86)\Arduino\libraries\DallasTemperature
exit status 1
'adresse' does not name a type


Donc forcement j'ai chercher et peut etre fait pire en metant dans setup()  :smiley-confuse:


Ce devrait être des constantes globales (idéalement cette partie de variables de configuration devrait être directement dans une structure que vous écrivez ou lisez d'un coup depuis l'EEPROM - c'est bcp plus simple à gérer  
Je ne suis pas sur de comprendre ...
ecrire les adresses de stockage dans l'eeprom ?


(cf quelque part dans notre longue discussion je vous avais montré comment faire avec le mot clé genre 0xDEADBEEF ou 0xBADCAFFE  pour voir si l'EEPROM avait déjà été initialisée)
je n'ai pas oublier  ;)  mais comme j'avais une erreur, je l'ai mis de coté le temps d'écrire se que je voulait et que sa fonctionne.
J'avais bien prévu de le remettre ensuite, jte jure lol

J-M-L

#571
Feb 12, 2018, 08:43 am Last Edit: Feb 12, 2018, 08:45 am by J-M-L
En pratique vous n'avez besoin de qu'une seule adresse - celle du début de la zone de stockage. Mettez tous les Paramètres dans une structure (et oui tout le code à modifier :) ) et vous sauver la structure d'un coup - c'est la fonction update qui se chargera de tout bien écrire où il faut  - plus besoin de jongler avec une adresse par paramètre

Regardez mon petit projet de projet fini démo de gestion de Température - c'est comme ça que j'ai fait dans ce code si je me souviens bien
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

djbouns

#572
Feb 12, 2018, 09:35 am Last Edit: Feb 12, 2018, 09:36 am by djbouns
En pratique vous n'avez besoin de qu'une seule adresse - celle du début de la zone de stockage. Mettez tous les Paramètres dans une structure (et oui tout le code à modifier :) ) et vous sauver la structure d'un coup - c'est la fonction update qui se chargera de tout bien écrire où il faut  - plus besoin de jongler avec une adresse par paramètre

Regardez mon petit projet de projet fini démo de gestion de Température - c'est comme ça que j'ai fait dans ce code si je me souviens bien
C'est ca : ?
Code: [Select]
const uint32_t motClef = 0xBEEFDEAD;
const uint16_t adresseMotClef = 0x00;

// __attribute__ ((packed)) permet de forcer la conservation de l'ordre des champs
// c'est utile pour éviter que le compilateur mette le bazar quand on en rajoute au fil du temps
struct __attribute__ ((packed)) _paramS {
  int16_t tempConsigne;
  int16_t humConsigne;
  int16_t ventConsigne;
  byte   vitesseVentilateur; // PWM pour le ventilateur
} lesParametres;

const uint16_t adresseDesParametres = adresseMotClef + sizeof(motClef);


Si oui,
si je comprend bien,
on liste les paramètre a sauvegarder (pour moi les save***)
un petit coup de EEPROM.put(adresseDesParametres, lesParametres);
et ...
c'est tout ?

J-M-L

#573
Feb 12, 2018, 09:51 am Last Edit: Feb 12, 2018, 09:52 am by J-M-L
oui

bien sûr après partout où vous voulez utilisez les paramètres il faut changer le nom de la variable pour y accéder par la structure

il y a la fonction suivante qui est appelée au démarrage dans le setup()
Code: [Select]
// **********************************************************
void etablirValeursParDefaut()
{
  uint32_t lectureMotClef;
  EEPROM.get(adresseMotClef, lectureMotClef);
  if (lectureMotClef == motClef) {
    // la mémoire a déjà été initialisée, on peut charger les paramètres
    EEPROM.get(adresseDesParametres, lesParametres);
  } else {
    // la mémoire n'avait pas encore été initialisée
    lesParametres.tempConsigne = 20;
    lesParametres.humConsigne = 50;
    lesParametres.ventConsigne = 2; // entre 0 (ventilateur vitess min) et 5 PWM ventilateur à 0xFF)
    lesParametres.vitesseVentilateur = lesParametres.ventConsigne * 51;
    EEPROM.put(adresseDesParametres, lesParametres);
    EEPROM.put(adresseMotClef, motClef);
  }


et quand je veux sauvegarder les paramètres (après une modif) il suffit de faire
Code: [Select]
EEPROM.put(adresseDesParametres, lesParametres);
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

djbouns

#574
Feb 13, 2018, 11:05 am Last Edit: Feb 13, 2018, 11:06 am by djbouns
je suis presque au bout (de la modif :) )
j'ai fait
Code: [Select]
struct __attribute__ ((packed)) _paramS {
  uint8_t puissanceMaxBrassage1;
  uint8_t puissanceMaxBrassage2;
  uint8_t puissanceMaxBrassage3;
  uint8_t oscillo1Angle1 = number;
  uint8_t oscillo2Angle1 = number;
  uint8_t oscillo3Angle1 = number;
  uint8_t oscillo1Angle2 = number;
  uint8_t oscillo2Angle2 = number;
  uint8_t oscillo3Angle2 = number;
  uint32_t dureeTempeteMillis = (number * minuteEnMillis);
  uint8_t puissanceTempete = number;
  uint16_t delaisMouvementOscilloMillis = (number * secondeEnMillis);
  uint8_t  accalmieNocturne = number;
} sauvergarde;

et
Code: [Select]
void enregistrerBrassage() {
  DPRINTLN("******************************************************************************************************");
  DPRINTLN("*************************************** sauvegarde brassage ******************************************");
  DPRINTLN("******************************************************************************************************");
  valeurbrassage1.getValue(&number); // recupere la valeur dans nextion
  puissanceMaxBrassage1 = number; // attribut la valeur nextion dans l'arduino
  valeurbrassage2.getValue(&number); // recupere la valeur dans nextion
  puissanceMaxBrassage2 = number; // attribut la valeur nextion dans l'arduino
  valeurbrassage3.getValue(&number); // recupere la valeur dans nextion
  puissanceMaxBrassage3 = number; // attribut la valeur nextion dans l'arduino
  valeuroscillo1min.getValue(&number); // recupere la valeur dans nextion
  oscillo1Angle1 = number; // attribut la valeur nextion dans l'arduino
  valeuroscillo2min.getValue(&number); // recupere la valeur dans nextion
  oscillo2Angle1 = number; // attribut la valeur nextion dans l'arduino
  valeuroscillo3min.getValue(&number); // recupere la valeur dans nextion
  oscillo3Angle1 = number; // attribut la valeur nextion dans l'arduino
  valeuroscillo1max.getValue(&number); // recupere la valeur dans nextion
  oscillo1Angle2 = number; // attribut la valeur nextion dans l'arduino
  valeuroscillo2max.getValue(&number); // recupere la valeur dans nextion
  oscillo2Angle2 = number; // attribut la valeur nextion dans l'arduino
  valeuroscillo3max.getValue(&number); // recupere la valeur dans nextion
  oscillo3Angle2 = number; // attribut la valeur nextion dans l'arduino
  valeurdureetempette.getValue(&number); // recupere la valeur dans nextion
  dureeTempeteMillis = (number * minuteEnMillis); // attribut la valeur nextion dans l'arduino
  valeurtempette.getValue(&number); // recupere la valeur dans nextion
  puissanceTempete = number; // attribut la valeur nextion dans l'arduino
  valeurmouvementoscillo.getValue(&number); // recupere la valeur dans nextion
  delaisMouvementOscilloMillis = (number * secondeEnMillis); // attribut la valeur nextion dans l'arduino
  valeuraccalemienocturne.getValue(&number); // recupere la valeur dans nextion
  accalmieNocturne = number; // attribut la valeur nextion dans l'arduino
  EEPROM.put(adresseDeSauvegarde, sauvergarde);
  versConfig();
}

et comme d'ab, j'ai une erreur mais la ... je comprend pas le problème de parenthèse.
Code: [Select]
sketch\affichage.cpp: In function 'void enregistrerBrassage()':

affichage.cpp:946: error: expected primary-expression before ')' token

   EEPROM.put(adresseDeSauvegarde, sauvergarde);

                                              ^

Plusieurs bibliothèque trouvées pour "DallasTemperature.h"
Utilisé : C:\Users\djbouns\Documents\Arduino\libraries\DallasTemperature
Non utilisé : C:\Program Files (x86)\Arduino\libraries\DallasTemperature
exit status 1
expected primary-expression before ')' token

Si je fait    EEPROM.put(adresseDeSauvegarde, 123);  ca fonctionne
Le problème est quand il y a sauvegarde.

J'ai bien verifier avec le code source (lcd rtc temp hum vent) et c'est identique
arfff ...   :smiley-sweat:

J-M-L

#575
Feb 13, 2018, 02:34 pm Last Edit: Feb 13, 2018, 02:35 pm by J-M-L
dans la définition de la struct il ne faut pas mettre de valeurs --> virer tous les = number

Code: [Select]
struct __attribute__ ((packed)) _paramS {
  uint8_t puissanceMaxBrassage1;
  uint8_t puissanceMaxBrassage2;
  uint8_t puissanceMaxBrassage3;
  uint8_t oscillo1Angle1;
  uint8_t oscillo2Angle1;
  uint8_t oscillo3Angle1;
  uint8_t oscillo1Angle2;
  uint8_t oscillo2Angle2;
  uint8_t oscillo3Angle2;
  uint32_t dureeTempeteMillis;
  uint8_t puissanceTempete;
  uint16_t delaisMouvementOscilloMillis;
  uint8_t  accalmieNocturne;
} sauvergarde;


dans la fonction qui va au début du sketch regarder si l'EEPROM est déjà initialisée ou pas:
- si déjà initialisée alors juste charger sauvergarde avec le contenu de l'EEPROM
- si pas initialisée, alors mettre des valeurs par défaut dans sauvergarde et l'écrire en EEPROM avec le mot magique pour la prochaine fois



sinon vous n'avez pas d'autres erreurs avant?
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

djbouns

o ....

Laisse tombé ...

Jsuis le nez dessus des heure et jvois rien, sa me dégoute.

heureusement tu vois tout :)

J-M-L

c'est le soucis souvent - c'est plus simple pour les autres de repérer des erreurs...

Quand on galère comme ça, le mieux c'est d'aller prendre l'air un peu et de revenir avec un regard frais sur le problème.
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

djbouns

C'est pas un temps a prendre l'air, je vais etre malade  :o  :smiley-mr-green:  :)  :)  :)

djbouns

Tu a du remarquer que souvent je post et je supprime quelque heure après pars-que j'ai trouvé tout seul ...
Si sa pouvait etre tout le temps comme sa :)
Bientôt ... lol

J-M-L

#580
Feb 13, 2018, 07:55 pm Last Edit: Feb 13, 2018, 07:56 pm by J-M-L
C'est pas un temps a prendre l'air, je vais etre malade  :o  :smiley-mr-green:  :)  :)  :)
:)

bon ben faut s'occuper de nettoyer l'aquarium alors ou faire le ménage ou un bon repas ! votre femme sera contente :)
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

djbouns

:)

bon ben faut s'occuper de nettoyer l'aquarium alors ou faire le ménage ou un bon repas ! votre femme sera contente :)
oula ... c'est demain de st valentin ... faut pas deconner lol lol lol

djbouns

sinon vous n'avez pas d'autres erreurs avant?
j'ai bien viré tout les "="
L'erreur est la meme  :smiley-confuse:
Et non, pas d'erreur avant, et pas d'erreur si je retire EEPROM.put(adresseDeSauvegarde, sauvergarde);

Voici toute l'erreur quand je met EEPROM.put(adresseDeSauvegarde, sauvergarde);

Code: [Select]
sketch\affichage.cpp: In function 'void enregistrerBrassage()':
affichage.cpp:946: error: expected primary-expression before ')' token
EEPROM.put(adresseDeSauvegarde, sauvergarde);                                          
exit status 1
expected primary-expression before ')' token

J-M-L

postez le code pour voir comment tout cela est défini...
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

djbouns

postez le code pour voir comment tout cela est défini...

Go Up