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