From 816804c9c114e20d2231258cc346c3714590b9ea Mon Sep 17 00:00:00 2001 From: Clyhtsuriva Date: Mon, 25 Jan 2021 22:11:30 +0100 Subject: Rapport et main.c --- Core/Src/main.c | 212 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 186 insertions(+), 26 deletions(-) (limited to 'Core/Src/main.c') diff --git a/Core/Src/main.c b/Core/Src/main.c index 2ec05eb..1001ae9 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -26,8 +26,12 @@ /* USER CODE BEGIN Includes */ #include "led.h" #include "button.h" -#include "simon.h" #include "lcd_1602.h" +#include +#include +#include +#include +#include /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ @@ -59,17 +63,54 @@ void SystemClock_Config(void); /* USER CODE BEGIN 0 */ //Declaration des leds et buttons -LED_TypeDef led_rouge; //rouge -LED_TypeDef led_verte; //verte -LED_TypeDef led_jaune; //jaune -LED_TypeDef led_system; //vert sur la carte - -BUTTON_TypeDef button_rouge; //rouge -BUTTON_TypeDef button_vert; //vert -BUTTON_TypeDef button_jaune; //jaune -BUTTON_TypeDef button_start; //gris -BUTTON_TypeDef button_system; //bleu sur la carte -// +LED_TypeDef led_rouge; //rouge +LED_TypeDef led_verte; //verte +LED_TypeDef led_jaune; //jaune +LED_TypeDef led_system; //vert sur la carte + +BUTTON_TypeDef button_rouge; //rouge +BUTTON_TypeDef button_vert; //vert +BUTTON_TypeDef button_jaune; //jaune +BUTTON_TypeDef button_deux_joueur; //gris +BUTTON_TypeDef button_system; //bleu sur la carte + +// fonction pour allumer et eteindre les leds +void fonction_led(char* couleur, int position) { + if (strcmp(couleur,"R")==0 && (position==0)){ //eteind rouge + Led_turnOff(&led_rouge); + } else if (strcmp(couleur,"R")==0 && (position==1)){ //allume rouge + Led_turnOn(&led_rouge); + } else if (strcmp(couleur,"V")==0 && (position==0)){ + Led_turnOff(&led_verte); + } else if (strcmp(couleur,"V")==0 && (position==1)){ + Led_turnOn(&led_verte); + } else if (strcmp(couleur,"J")==0 && (position==0)){ + Led_turnOff(&led_jaune); + } else if (strcmp(couleur,"J")==0 && (position==1)){ + Led_turnOn(&led_jaune); + } else if (strcmp(couleur,"S")==0 && (position==0)){ + Led_turnOff(&led_system); + } else if (strcmp(couleur,"S")==0 && (position==1)){ + Led_turnOn(&led_system); + } +} + +void affiche_lcd(char* contenu, int positiony, int clear) { + if (clear==1){ + lcd_clr(); + } + lcd_gotoxy(0,positiony); + lcd_puts(contenu); +} + +char* choix_aleatoire(void) { + char* couleur_leds[3]={"R","V","J"}; //nos couleurs de led + srand(time(0)); + int aleatoire = (rand() % (2 - 0 + 1)) + 0; //choix entre 0 et 2 pour avoir 3 valeurs differentes (3 couleurs/leds) + char* choix = couleur_leds[aleatoire]; + return choix; +} + /* USER CODE END 0 */ /** @@ -112,16 +153,16 @@ int main(void) // // Init de nos leds et buttons - Led_init(&led_rouge, GPIOA,5); //led_rouge sur PA5 - Led_init(&led_verte, GPIOA,6); //led_verte sur PA6 - Led_init(&led_jaune, GPIOA,7); //led_jaune sur PA7 - Led_init(&led_system, GPIOB,6); //led_system sur PB6 - - Button_init(&button_rouge, GPIOC, 13); //button_jaune sur PC13 - Button_init(&button_vert, GPIOC, 14); //button_vert sur PC13 - Button_init(&button_jaune, GPIOC, 15); //button_jaune sur PC13 - Button_init(&button_start, GPIOH, 0); //button_start sur PH0 - Button_init(&button_system, GPIOH, 1); //button_system sur PH1 + Led_init(&led_system, GPIOA,5); //led_system sur PA5 + Led_init(&led_rouge, GPIOA,6); //led_rouge sur PA6 + Led_init(&led_verte, GPIOA,7); //led_verte sur PA7 + Led_init(&led_jaune, GPIOB,6); //led_jaune sur PB6 + + Button_init(&button_system, GPIOC, 13); //button_system sur PC13 + Button_init(&button_rouge, GPIOC, 14); //button_rouge sur PC13 + Button_init(&button_vert, GPIOC, 15); //button_vert sur PC13 + Button_init(&button_jaune, GPIOH, 0); //button_jaune sur PH0 + Button_init(&button_deux_joueur, GPIOH, 1); //button_deux_joueur sur PH1 // /* EXEMPLE D'UTILISATION POUR LED ET BUTTON @@ -147,6 +188,13 @@ int main(void) last_button_state = current_button_state; } */ + affiche_lcd("SIMON_STM32",0,1); + + int score = 0; //pour le systeme de score + int deuxieme_joueur_joue = 0; //pour check si le 2e joueur a joué + int score_un=0; //pour store le score du j1 + int score_deux=0; //pour store le score du j1 + char* suite_de_leds[100]={}; //la suite de leds a faire cligoter /* USER CODE END 2 */ @@ -155,11 +203,123 @@ int main(void) while (1) { /* USER CODE BEGIN WHILE */ - lcd_init(); - lcd_clr(); - lcd_gotoxy(0,0); - lcd_puts("Hello World !"); + + +//gestion du mode 2joueurs + uint8_t last_button_2j_state = 1; + uint8_t current_button_2j_state = 1; + int etat_bouton_deux_joueurs=0; + + //lire l’état courant + current_button_2j_state = Button_State(&button_deux_joueur); + //si front descendant (bouton appuyé) + if (last_button_2j_state == 1 && (current_button_2j_state == 0) && (etat_bouton_deux_joueurs==0)) { + etat_bouton_deux_joueurs = 1; + fonction_led("S",1); //allume la led de la carte + } else if (last_button_2j_state == 1 && (current_button_2j_state == 0) && (etat_bouton_deux_joueurs==1)) { + etat_bouton_deux_joueurs = 0; + fonction_led("S",0); //eteind la led de la carte + } + //mise à jour de l’état précédent du bouton + last_button_2j_state = current_button_2j_state; + + +//gestion du bouton start/system + uint8_t last_button_system_state = 1; //button non appuyé + uint8_t current_button_system_state = 1; //button non appuyé + int etat_bouton_start=0; + + //lire l’état courant + current_button_system_state = Button_State(&button_system); + //si front descendant (bouton appuyé) + if (last_button_system_state == 1 && (current_button_system_state == 0) && (etat_bouton_deux_joueurs==0)) { + etat_bouton_start = 1; + } else if (last_button_system_state == 1 && (current_button_system_state == 0) && (etat_bouton_deux_joueurs==1)) { + etat_bouton_start = 0; + } + //mise à jour de l’état précédent du bouton + last_button_system_state = current_button_system_state; + + + int perdu = 0; //pour check si le j a perdu + + if (etat_bouton_start){ +//Sequence d'allumage + affiche_lcd("LET'S GO !",0,1); + fonction_led("R", 1); + HAL_Delay(250); + fonction_led("V", 1); + HAL_Delay(250); + fonction_led("J", 1); + HAL_Delay(250); + fonction_led("R", 0); + HAL_Delay(250); + fonction_led("V", 0); + HAL_Delay(250); + fonction_led("J", 0); + HAL_Delay(250); + + if (etat_bouton_deux_joueurs && !deuxieme_joueur_joue){ //lancement du mode 2J + affiche_lcd("MODE 2J",0,1); + affiche_lcd("J1!",1,0); + } + else if (!etat_bouton_deux_joueurs && !deuxieme_joueur_joue) { //lancement du mode 1J + affiche_lcd("MODE 1J",0,1); + } + + while (perdu!= 1) { //ici on lance un niveau (suite de leds), tant qu'on a pas perdu + + suite_de_leds[score] = choix_aleatoire(); + score++; + for (int i = 0; iscore_deux){affiche_lcd("JOUEUR 1 GAGNE!",0,1);} + else if (score_un