Besoin de relecture d'un code arduino

hello,
je viens de réaliser un code arduino qui doit reproduire le jeu Simon sur un ecran oled,
le problème est que le processeur que j'utilise ne supporte par le debug, je dois donc tout "corriger et contrôler" de tête ce qui est relativement compliqué vu que j'ai ecrit le code et étais sûr qu'il fonctionnait. si quelqu'un arrive a relire mon code et me donner son avis ce serait avec plaisir.
merci d'avance

#include <ssd1306xled.h>
#include "spritebank.h"


//déclaratin des variables
uint8_t choix;
long nombre_aleatoire;
const int tab_choix[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
long tab[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
uint8_t i = 0;


void setup() {
  // put your setup code here, to run once:
  SSD1306.ssd1306_init();
  pinMode(PB1, OUTPUT);
  pinMode(A0, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);
}

void loop() {
ACCUEIL:
  choix = 0;
  nombre_aleatoire = 0;
  i = 0;

Continue:
  // put your main code here, to run repeatedly:
  while (1) {
    //génère le nombre aléatoire entre 1 et 4
    nombre_aleatoire = random(1, 5);
    tab[i] == nombre_aleatoire;

    uint8_t t;
    uint8_t r;
    uint8_t x;
    for (t = 0; t <= i; t++) {
      affichage(6);//affiche tout 
      delay(250);
      delay(250);
      affichage(tab[t]);  //éteind la fleche qui correspond au nombre aleatoire
      delay(750);
      delay(250);
      affichage(6);  //rallume toutes les fleches
      delay(250);
      delay(250);
    }
    //attribu ce nombre à une flèche, haut = 1, bas = 3, gauche = 2, droite = 4

    for (x = 0; x <= i; x++) {
      choix = 0;
      // savoir quel bouton est appuyé
      while (choix == 0) {  //les 4 interrupteurs sont sur 2 entrées analogiques
        r = analogRead(A0);  //première entrée
        if ((r >= 750) && (r < 950)) {  
          choix = 1;     //interrupteur haut 
        } else if ((r > 500) && (r < 750)) {
          choix = 3;    //interrupteur bas
        }
        r = analogRead(A3); //deuxième entrée 
        if ((r >= 750) && (r < 950)) {
          choix = 2;    //interrupteur gauche 
        } else if ((r > 500) && (r < 750)) {
          choix = 4;    //interrupteur droite 
        }
      }
      tab_choix[x] == choix; //ajouté dans un tableau avec la séquence entrée par le joueur
      if (tab_choix[x] != tab[x])  //comparaison avec séquence du joueur et du processeur
      {
        affichage(7);  //si le critère qui vient d'etre ajouté ne correspond pas : affiche game over
        goto ACCUEIL;  //retour au départ, niveau 0
      }
    }
    //si les deux tableaux correspondent donc on passe au prochain niveau avec un truc de plus
    i++;
    goto Continue;
  }
}

//fonction affichage
uint8_t affichage(int8_t value) {
  uint8_t y, x;
  for (y = 0; y < 8; y++) { 
    SSD1306.ssd1306_send_command(0xb0 + y);  // page0 - page1
    SSD1306.ssd1306_send_command(0x00);      // low column start address
    SSD1306.ssd1306_send_command(0x10);      // high column start address
    SSD1306.ssd1306_send_data_start();
    for (x = 0; x < 128; x++) {
      if (value == 1) { //affiche différentes images en fonction de value
        SSD1306.ssd1306_send_byte(0xff - (haut(x, y))); //chaque fonction, ici "haut", se détaille plus bas et va chercher un tableau créé dans un autre doc 
      } else if (value == 3) {
        SSD1306.ssd1306_send_byte(0xff - (bas(x, y)));
      } else if (value == 2) {
        SSD1306.ssd1306_send_byte(0xff - (gauche(x, y)));
      } else if (value == 4) {
        SSD1306.ssd1306_send_byte(0xff - (droite(x, y)));
      } else if (value == 6) {
        SSD1306.ssd1306_send_byte(0xff - (tout(x, y)));
      } else if (value == 7) {
        SSD1306.ssd1306_send_byte(0xff - (gameover(x, y)));
      }
    }
    SSD1306.ssd1306_send_data_stop();
  }
}

uint8_t bas(uint8_t x, uint8_t y) {
  return pgm_read_byte(&caracters_bas[((y)*128) + ((x))]);
}

uint8_t haut(uint8_t x, uint8_t y) {
  return pgm_read_byte(&caracters_haut[((y)*128) + ((x))]);
}

uint8_t tout(uint8_t x, uint8_t y) {
  return pgm_read_byte(&caracters_tout[((y)*128) + ((x))]);
}

uint8_t gauche(uint8_t x, uint8_t y) {
  return pgm_read_byte(&caracters_gauche[((y)*128) + ((x))]);
}

uint8_t droite(uint8_t x, uint8_t y) {
  return pgm_read_byte(&caracters_droite[((y)*128) + ((x))]);
}

uint8_t gameover(uint8_t x, uint8_t y) {
  return pgm_read_byte(&GameOver[((y)*128) + ((x))]);
}
//end

Bonjour kibag

Mais l'Arduino oui :wink:, avec des Serial.print(.
C'est une chose à utiliser systématiquement dans tout développement de programme.

Quelques informations ici.

Cordialement
jpbbricole

Hormis le choix peu "orthodoxe" des goto et du while infinie.
Ton code parait logique.

Après tu ne dis pas ce qui ne fonctionne pas, donc ca nous aide pas vraiment.

Dans ces cas là ou utilise les logs ou une sortie standard pour afficher des états du programmes, dans le cas d'Arduino si celui-ci peut rester brancher sur le PC, l'affichage ce fait sur le moniteur série(Serial.print, ...)

:person_shrugging: :grimacing: :roll_eyes: :cold_face: :mask: :scream:
oui, on ne code plus comme cela, même en basic...

je viens de tester et il me dis que je n'ai pas déclaré "serial". faut il ajouter une libraire ou quelque chose avant ?

Normalement non

Quel IDE ?

Si vous compilez un exemple simple

void setup() {
  Serial.begin(115200);
  Serial.println("Bonjour !");
}

void loop() {}

Ça vous dit quoi ?

error: 'Serial' was not declared in this scope
Serial.println(nombre_aleatoire);

Bonjour kibag
Mets tout ton programme (celui qui provoque l'erreur).

#include <ssd1306xled.h>
#include "spritebank.h"


//déclaratin des variables
uint8_t choix;
long nombre_aleatoire;
const int tab_choix[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
long tab[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
uint8_t i = 0;


void setup() {
  // put your setup code here, to run once:
  SSD1306.ssd1306_init();
  pinMode(PB1, OUTPUT);
  pinMode(A0, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);
  Serial.begin(9600);
}

void loop() {
ACCUEIL:
  choix = 0;
  nombre_aleatoire = 0;
  i = 0;

Continue:
  // put your main code here, to run repeatedly:
  while (1) {
    //génère le nombre aléatoire entre 1 et 4
    nombre_aleatoire = random(1, 5);
    Serial.println(nombre_aleatoire);
    tab[i] == nombre_aleatoire;

    uint8_t t;
    uint8_t r;
    uint8_t x;
    for (t = 0; t <= i; t++) {
      affichage(6);//affiche tout 
      delay(250);
      delay(250);
      affichage(tab[t]);  //éteind la fleche qui correspond au nombre aleatoire
      delay(750);
      delay(250);
      affichage(1);  //rallume toutes les fleches
      delay(250);
      delay(250);
    }
    //attribu ce nombre à une flèche, haut = 1, bas = 3, gauche = 2, droite = 4

    for (x = 0; x <= i; x++) {
      choix = 0;
      // savoir quel bouton est appuyé
      while (choix == 0) {  //les 4 interrupteurs sont sur 2 entrées analogiques
        r = analogRead(A0);  //première entrée
        if ((r >= 750) && (r < 950)) {  
          choix = 1;     //interrupteur haut 
        } else if ((r > 500) && (r < 750)) {
          choix = 3;    //interrupteur bas
        }
        r = analogRead(A3); //deuxième entrée 
        if ((r >= 750) && (r < 950)) {
          choix = 2;    //interrupteur gauche 
        } else if ((r > 500) && (r < 750)) {
          choix = 4;    //interrupteur droite 
        }
      }
      tab_choix[x] == choix; //ajouté dans un tableau avec la séquence entrée par le joueur
      if (tab_choix[x] != tab[x])  //comparaison avec séquence du joueur et du processeur
      {
        affichage(7);  //si le critère qui vient d'etre ajouté ne correspond pas : affiche game over
        goto ACCUEIL;  //retour au départ, niveau 0
      }
    }
    //si les deux tableaux correspondent donc on passe au prochain niveau avec un truc de plus
    i++;
    goto Continue;
  }
}

//fonction affichage
uint8_t affichage(int8_t value) {
  uint8_t y, x;
  for (y = 0; y < 8; y++) { 
    SSD1306.ssd1306_send_command(0xb0 + y);  // page0 - page1
    SSD1306.ssd1306_send_command(0x00);      // low column start address
    SSD1306.ssd1306_send_command(0x10);      // high column start address
    SSD1306.ssd1306_send_data_start();
    for (x = 0; x < 128; x++) {
      if (value == 1) { //affiche différentes images en fonction de value
        SSD1306.ssd1306_send_byte(0xff - (haut(x, y))); //chaque fonction, ici "haut", se détaille plus bas et va chercher un tableau créé dans un autre doc 
      } else if (value == 3) {
        SSD1306.ssd1306_send_byte(0xff - (bas(x, y)));
      } else if (value == 2) {
        SSD1306.ssd1306_send_byte(0xff - (gauche(x, y)));
      } else if (value == 4) {
        SSD1306.ssd1306_send_byte(0xff - (droite(x, y)));
      } else if (value == 6) {
        SSD1306.ssd1306_send_byte(0xff - (tout(x, y)));
      } else if (value == 7) {
        SSD1306.ssd1306_send_byte(0xff - (gameover(x, y)));
      }
    }
    SSD1306.ssd1306_send_data_stop();
  }
}

uint8_t bas(uint8_t x, uint8_t y) {
  return pgm_read_byte(&caracters_bas[((y)*128) + ((x))]);
}

uint8_t haut(uint8_t x, uint8_t y) {
  return pgm_read_byte(&caracters_haut[((y)*128) + ((x))]);
}

uint8_t tout(uint8_t x, uint8_t y) {
  return pgm_read_byte(&caracters_tout[((y)*128) + ((x))]);
}

uint8_t gauche(uint8_t x, uint8_t y) {
  return pgm_read_byte(&caracters_gauche[((y)*128) + ((x))]);
}

uint8_t droite(uint8_t x, uint8_t y) {
  return pgm_read_byte(&caracters_droite[((y)*128) + ((x))]);
}

uint8_t gameover(uint8_t x, uint8_t y) {
  return pgm_read_byte(&GameOver[((y)*128) + ((x))]);
}
//end

C’est pas le code que je vous ai donné qui produit cela …


Quel IDE ?

arduino IDE 2.3.3

Et le code de 2 lignes que je vous ai donné - ça compile ?

non plus

Copie et colles le message d'erreur.

Bonjour

Arduino .. oui mais arduino quoi ..?

Arduino ca veut pas dire grand chose.. y a pas de serial partout ..

In function 'void setup()':
 error: 'Serial' was not declared in this scope
 Serial.begin(9600);
   ^~~~~~
note: suggested alternative: 'Stream'
   Serial.begin(9600);
   ^~~~~~
   Stream
In function 'void loop()':
error: 'Serial' was not declared in this scope
     Serial.println(nombre_aleatoire);
     ^~~~~~

Attiny25/45/85

Mets le programme qui provoque la faute, en entier sur le forum.

il est déjà au post 9

il n'y a pas de port série (UART) sur ces ATtiny... Il faut passer par un Serial "logiciel" (émulé)