From e66a77b2457fcb27347fec108c9e6b4222d2055f Mon Sep 17 00:00:00 2001 From: Samuel Date: Fri, 6 Dec 2024 19:08:09 +0100 Subject: [PATCH] Enjolivement du programme degeu caca et changement du system de rotation du robot --- main.c | 169 +++++++++++++++++++++------------------------------------ 1 file changed, 63 insertions(+), 106 deletions(-) diff --git a/main.c b/main.c index 949e12b..c6f2229 100644 --- a/main.c +++ b/main.c @@ -8,15 +8,23 @@ #include "hardware/pwm.h" #include #include "hardware/adc.h" -#define LED_VERTE 25 -#define PIN_VITESSE_M1 2 -#define PIN_SENS_A_M1 0 -#define PIN_SENS_B_M1 1 +// Pins +#define PIN_BUTTON_CLIC_JOYSTICK 1 // Unused +#define PIN_BUTTON_ELEVATOR 2 +#define PIN_BUTTON_LEFT_ROTATION 5 +#define PIN_BUTTON_POT 6 +#define PIN_BUTTON_RIGHT_ROTATION 9 +#define PIN_BUTTON_CLAW 10 +#define PIN_BUTTON_MID_ELEVATOR 13 +#define PIN_LED_VERTE 25 + +// Différents états de la pince #define PINCE_OUVERTE 0 #define PINCE_PLANTE 1 #define PINCE_POT 2 +// Différent états de l'ascenseur #define ASCENSEUR_BAS 0 #define ASCENSEUR_HAUT 1 #define ASCENSEUR_LACHE_POT_JARDINIERE 2 @@ -24,42 +32,14 @@ unsigned result0, result1; int joystic_clicker; -int pince = PINCE_OUVERTE; -int ascenceur = ASCENSEUR_BAS; +int pince; +int ascenseur; - -int M1_INITIALISE() +void init_bouton(uint8_t bouton) { - gpio_init(PIN_VITESSE_M1); - gpio_init(PIN_SENS_A_M1); - gpio_init(PIN_SENS_B_M1); - - gpio_set_dir(PIN_VITESSE_M1, GPIO_OUT); - gpio_set_dir(PIN_SENS_A_M1, GPIO_OUT); - gpio_set_dir(PIN_SENS_B_M1, GPIO_OUT); - - gpio_set_function(PIN_VITESSE_M1, GPIO_FUNC_PWM); - pwm_set_wrap(PIN_VITESSE_M1, 100); - pwm_set_chan_level(PIN_VITESSE_M1, PWM_CHAN_B, 50); - -} - -int M1_AVANCE() -{ - - gpio_put(PIN_VITESSE_M1, 1); - gpio_put(PIN_SENS_A_M1, 1); - gpio_put(PIN_SENS_B_M1, 0); - - - -} - -int M1_RECULE() -{ - gpio_put(PIN_VITESSE_M1, 1); - gpio_put(PIN_SENS_A_M1, 0); - gpio_put(PIN_SENS_B_M1, 1); + gpio_init(bouton); + gpio_set_dir(bouton, GPIO_IN); + gpio_pull_up(bouton); } int Adc_Init() @@ -69,62 +49,33 @@ int Adc_Init() adc_gpio_init(27); } -int AdcRead0() +int Adc_Read(short input) { - adc_select_input(0); - uint16_t resultadc = adc_read(); - return resultadc; + adc_select_input(input); + uint16_t result_adc = adc_read(); + return result_adc; } -int AdcRead1() -{ - adc_select_input(1); - uint16_t resultadc = adc_read(); - return resultadc; -} - -void init_bouton(uint8_t bouton) -{ - gpio_init(bouton); - gpio_set_dir(bouton, GPIO_IN); - gpio_pull_up(bouton); -} - -int bouton_appui(uint8_t bouton) +bool bouton_appui(uint8_t button) { static uint8_t etat_bouton[32]={1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1}; - if(gpio_get(bouton) == 1 && gpio_get(bouton) != etat_bouton[bouton]) - { - etat_bouton[bouton] = gpio_get(bouton); - return 1; - } - else - { - etat_bouton[bouton] = gpio_get(bouton); - } + bool is_button_pressed = gpio_get(button); + etat_bouton[button] = is_button_pressed; - return 0; + return is_button_pressed && is_button_pressed != etat_bouton[button]; } void main() { - char message [256]; stdio_init_all(); // Communication + char message [256]; communication_init(); - // CLignottement LED - gpio_set_function(LED_VERTE, GPIO_FUNC_PWM); - pwm_set_wrap(4, 100); - pwm_set_chan_level(4, PWM_CHAN_B, 25); - pwm_set_enabled(4, true); - // ADC - adc_init(); - adc_gpio_init(26); - adc_gpio_init(27); + Adc_Init(); // Boutons init_bouton(2); @@ -132,25 +83,41 @@ void main() init_bouton(10); init_bouton(14); - ascenceur = ASCENSEUR_BAS; + ascenseur = ASCENSEUR_BAS; pince = PINCE_OUVERTE; gpio_init(1); gpio_pull_up(1); gpio_set_dir(1, GPIO_IN); - while (1) + gpio_init(PIN_LED_VERTE); + gpio_set_dir(PIN_LED_VERTE, GPIO_OUT); + gpio_put(PIN_LED_VERTE, true); + + while(true) { // Voie X - result1 = AdcRead1() / 16; + result1 = Adc_Read(1) / 16; // Voie Y - result0 = AdcRead0() / 16; + result0 = Adc_Read(0) / 16; + + message[0] = result0; + message[1] = 255 - result1; + + // Set rotation speed according to DA rotations buttons + message[2] = 128 - 95 * (gpio_get(PIN_BUTTON_LEFT_ROTATION) - gpio_get(PIN_BUTTON_RIGHT_ROTATION)); +/* + // Voie X + result1 = AdcRead(1) / 16; + // Voie Y + result0 = AdcRead(0) / 16; message[0] = result0; message[1] = 255 - result1; //clic sur le joystic - joystic_clicker = gpio_get(1); + joystic_clicker = gpio_get(PIN_BUTTON_CLIC_JOYSTICK); + if (!joystic_clicker) { if(result1 > 135) @@ -171,6 +138,7 @@ void main() { message[2] = 128; } +*/ // Pince // Bouton plante @@ -202,33 +170,33 @@ void main() // Commande simple if(bouton_appui(2)) { - if(ascenceur == ASCENSEUR_HAUT) + if(ascenseur == ASCENSEUR_HAUT) { - ascenceur = ASCENSEUR_BAS; + ascenseur = ASCENSEUR_BAS; } else { - ascenceur = ASCENSEUR_HAUT; + ascenseur = ASCENSEUR_HAUT; } } // Commande évoluée if(bouton_appui(14)) { - if(ascenceur == ASCENSEUR_HAUT) + if(ascenseur == ASCENSEUR_HAUT) { if(pince == PINCE_PLANTE) { - ascenceur = ASCENSEUR_LACHE_PLANTE; + ascenseur = ASCENSEUR_LACHE_PLANTE; } if(pince == PINCE_POT) { - ascenceur = ASCENSEUR_LACHE_POT_JARDINIERE; + ascenseur = ASCENSEUR_LACHE_POT_JARDINIERE; } // Optimisation : lorsque la pince est fermée et l'ascenseur au niveau milieu, la pince s'ouvre, l'ascenseur monte et le robot recule } - else if((ascenceur == ASCENSEUR_LACHE_POT_JARDINIERE && pince == PINCE_POT) || - (ascenceur == ASCENSEUR_LACHE_PLANTE && pince == PINCE_PLANTE)) + else if((ascenseur == ASCENSEUR_LACHE_POT_JARDINIERE && pince == PINCE_POT) || + (ascenseur == ASCENSEUR_LACHE_PLANTE && pince == PINCE_PLANTE)) { pince = PINCE_OUVERTE; message [3] = pince; @@ -236,8 +204,8 @@ void main() sleep_ms(500); - ascenceur = ASCENSEUR_HAUT; - message[4] = ascenceur; + ascenseur = ASCENSEUR_HAUT; + message[4] = ascenseur; communication_envoyer_message(message, 254); sleep_ms(500); @@ -248,33 +216,22 @@ void main() } else { - ascenceur = ASCENSEUR_HAUT; + ascenseur = ASCENSEUR_HAUT; } } message [3] = pince; - message[4] = ascenceur; + message[4] = ascenseur; printf(">x:%d\n", message[0]); printf(">Y:%d\n", message[1]); printf(">Rz:%d\n", message[2]); printf(">pince:%d\n", message[3]); - printf(">ascenceur:%d\n", message[4]); + printf(">ascenseur:%d\n", message[4]); printf(">result0:%d\n", result0); sleep_ms(25); communication_envoyer_message(message, 254); } -/* - M1_INITIALISE(); - - while(1) - { - M1_AVANCE(); - sleep_ms(1000); - M1_RECULE(); - sleep_ms(1000); - } -*/ }