Wordclock programmation

programme de W.Devinck, le compilateur renvoie cette erreur que je n'arrive pas à comprendre.

In file included from C:\Users\cofri\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/WString.h:29:0,
                 from C:\Users\cofri\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/Print.h:26,
                 from C:\Users\cofri\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/Stream.h:26,
                 from C:\Users\cofri\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src/Wire.h:27,
                 from C:\LEA\DOCUMENTS\ARDUINO\wordclockmodif\Chronodot.cpp:9:
C:\LEA\DOCUMENTS\ARDUINO\wordclockmodif\Chronodot.cpp:26:31: error: variable 'daysInMonth' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
 static uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };
                               ^

exit status 1

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Merci de publier le code, selon les règles du forum, et les messages d'erreur en texte et non en image, illisibles sur un smartphone.

Désolé je débute, merci pour l'info.
J'ai modifié en faisant copier coller mais est-ce la bonne méthode?
Je ne trouve pas ou se trouve le fichier quand je clique sur sauvegarder les erreurs.
Merci pour le suivi.

La variable doit être déclarée constante (donc non modifiable) pour pouvoir être mise dans la partie mémoire en lecture seule (mémoire programme)
Donc, il faut la déclarer

const uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };


Pour les messages d'erreur, ils sont plus lisibles si on les mets entre les balises <code/> (l'icône dans le haut de la fenêtre d'édition)


Le texte est dans le presse-papier, il suffit de faire un ctrl-v pour le coller dans le message (ou un clic droit et coller)

MERCI const et c'est ok.
J'ai un autre problème dans ce même programme: Mes quatre matrices sont de type FC16 et il n'y a pas de rotation. Dans un commentaire du projet sur Instructable W.DEVINCK répond à ce problème en disant que la rotation des matrices est effectué par "void set Led".
Le programme originel "GitHub: GitHub - wouterdevinck/wordclock"
Le commentaire:
I made your clock with a little change in lighting part. I made them by bright led. everything was fine till I upload the sketch and everything went wrong. clock was working strangely. when I reviewed your posts again I find that you turn your pcbs in making led grid in order to use one pcb layout, but i could not find anything in your sketch to change it to normal 4 led grids arrangement without turnings. any help would be appreciated alot.

Réponce de W.Devinck:
The coordinate translation happens in setLed, if you don't do the rotation, you can greatly simplify this function. wordclock/firmware/wordclock.ino at master · wouterdevinck/wordclock · GitHub

void setLed(int row, int col, boolean on) {
  int t = row >> bss;
  int l = col >> bss;
  int board = boards[t][l];
  int r = row % bs;
  int c = col % bs;
  if(t == 0) {
    if(l == 0) {
      r = bs - 1 - r;
      c = (c + 1) % bs;
    } else {
      int r1 = r;
      r = c;
      c = (r1 + 1) % bs;
    }
  } else {
    if(l == 0) {
      int r1 = r;
      r = bs - 1 - c;
      c = (bs - r1) % bs;
    } else {
      c = (bs - c) % bs;
    }
  }
  lc.setLed(board, r, c, on);
}

Pouvez vous m'aider à transformer ceci pour mes matrices.
(Les valeurs de bs=8 et bss=3 sont définie plus avant dans le programme)

Tu n'a pas mis ton code dans les balises adéquate :frowning:

Toi, tu nous aiderais en lisant Les bonnes pratiques du Forum Francophone comme suggéré par UKHeliBob et en présentant ton code corrrectement.

Et pitié met le code complet.
La fonction que tu as copié ne fait qu'allumer ou éteindre un point de la matrice et ne fait aucune rotation.


Quand tu cites quelqu'un comme ici

Dans un commentaire du projet sur Instructable W.DEVINCK

mets un lien vers la discussion que l'on sache de quoi il est question.

Merci pour les recommandations, message corrigé.

Ah, OK c'est pour changer l'orientation des matrices.
Donc, suivant la rotation que tu veux faire, pour une matrice, il faut:

  • échanger rangée et colonne, pour faire tourner de 90°
  • faire 8 - colonne, pour faire une symétrie par rapport à l'axe vertical
  • faire 8 - rangée, pour faire une symétrie par rapport à l'axe horizontal
  • ou faire des combinaisons des trois

Si c'est l'ensemble qu'il faut tourner, il faut faire les transformations sur les paramètres d'entrée (row et col) de la fonction si c'est au niveau des matrices elle-mêmes il faut faire les transformations sur les paramètres de sortie (r et c)

JE N'Y ARRIVE PAS.
Qui peut transformer ce setLed pour mes matrices type FC16 sans rotation?
La bibliothèque MD_MAX72xx est elle plus adéquate?
Plus haut dans le programme bss=3 et bs=8.

void setLed(int row, int col, boolean on) {
  int t = row >> bss;
  int l = col >> bss;
  int board = boards[t][l];
  int r = row % bs;
  int c = col % bs;
  if(t == 0) {
    if(l == 0) {
      r = bs - 1 - r;
      c = (c + 1) % bs;
    } else {
      int r1 = r;
      r = c;
      c = (r1 + 1) % bs;
    }
  } else {
    if(l == 0) {
      int r1 = r;
      r = bs - 1 - c;
      c = (bs - r1) % bs;
    } else {
      c = (bs - c) % bs;
    }
  }
lc. setLed (board, r, c, on);
}

C'est-à-dire, qu'est-ce que tu as fait depuis la fois précédente?
On a pas tes matrices, on ne sait même pas comment elles sont fichues, tu ne donnes aucunes information sur ton affichage, tu ne donnes pas le code. On ne sait pas ce que tu voudrais faire et ce que tu obtiens avec ton code.