ludobabs:
Effectivement, dans le petit programme que je vous ai indiqué, le moniteur serie affiche même parfois des lignes du code !
Les langages C et C++ sont dit "compilé", tu ne peut donc pas voir du code du programme dans le serial monitor
Au mieux tu doit pouvoir voir des morceaux de chaine de caractères statique mais pas plus.
ludobabs:
Dans la boucle loop, différents capteurs analogiques sont lus. Pour chacun de ces capteurs une alarme est générée si une ou plusieurs conditions sont réunies. Je souhaitais créer un array[] contenant un message correspondant à chaque alarme et ainsi pouvoir accéder à l'ensemble des messages grace à a quelque chose du genre :
En gros tu veut faire un système d'historique des alarmes ?
ludobabs:
Les erreurs sont stockées dans un tableau affichés grace à l'action d'un interrupteur sur une broche d'interruption. Je ne connais pas le nombre d'erreurs qui ont ête générées dans la boucle loop je ne peux donc pas le dimensionner d'une façon fixe...
Tu as toujours une limite : la mémoire RAM disponible.
Elle n'est pas infini, il faut que tu te fixe un maximum pour ton tableau.
Les messages d'alarmes sont toujours de type prédéterminé ?
Si oui tu peut faire autre chose, plus propre, un tableau de structure !
/** Enumération des types d'alarmes possible */
typedef enum {
ALARME_AUCUNE, /*!< Pas d'alarme */
ALARME_TEMPERATURE, /*!< Alarme de température */
ALARME_DELTA, /*!< Alarme de ... */
// ... etc
} TypeAlarme_t;
/** Structure d'une alarme */
typedef struct {
unsigned long temps; /*!< Temps du déclenchement de l'alarme */
byte capteur; /*!< Capteur ayant déclenché l'alarme */
TypeAlarme_t type; /*!< Type d'alarme */
} Alarme_t;
/** Historique des alarmes */
const byte NB_ALARMES_MAX = 50;
Alarme_t historique[NB_ALARMES_MAX] = {0, 0, ALARME_AUCUNE};
/** Gestion de l'historique comme un buffer circulaire */
byte historique_head = 0;
/** Ajout d'une alarme dans l'historique */
void ajoutAlarme(byte capteur, TypeAlarme_t type) {
Alarme_t alarme;
alarme.temps = millis();
alarme.capteur = capteur;
alarme.type = type;
historique[historique_head] = alarme;
if(++historique_head == NB_ALARMES_MAX)
historique_head = 0; // Écrase les historiques plus ancien si on manque de place
}
/** Affichage des alarmes de la plus ancienne à la plus récente */
void afficheAlarmes() {
for(byte j = 0, i = historique_head; j < NB_ALARMES_MAX; ++j, i = (i + 1) % NB_ALARMES_MAX) {
if(historique[i].type == ALARME_AUCUNE) continue;
Serial.print(historique[i].temps);
Serial.print(F(" - "));
Serial.print(historique[i].capteur);
Serial.print(F(" : "));
switch(historique[i].type) {
case ALARME_TEMPERATURE:
Serial.println(F("Alarme temperature"));
break;
case ALARME_DELTA:
Serial.println(F("Alarme temperature"));
break;
}
}
}
Edit: correction d'une erreur au niveau des sizeof(), remplacé par un const (plus simple à comprendre).
Sinon tu peut faire un système déporté comme le propose infobarquee :