Enjolivement du programme degeu caca et changement du system de rotation du robot

This commit is contained in:
Samuel 2024-12-06 19:08:09 +01:00
parent 9b9cffec43
commit e66a77b245

169
main.c
View File

@ -8,15 +8,23 @@
#include "hardware/pwm.h" #include "hardware/pwm.h"
#include <stdio.h> #include <stdio.h>
#include "hardware/adc.h" #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_OUVERTE 0
#define PINCE_PLANTE 1 #define PINCE_PLANTE 1
#define PINCE_POT 2 #define PINCE_POT 2
// Différent états de l'ascenseur
#define ASCENSEUR_BAS 0 #define ASCENSEUR_BAS 0
#define ASCENSEUR_HAUT 1 #define ASCENSEUR_HAUT 1
#define ASCENSEUR_LACHE_POT_JARDINIERE 2 #define ASCENSEUR_LACHE_POT_JARDINIERE 2
@ -24,42 +32,14 @@
unsigned result0, result1; unsigned result0, result1;
int joystic_clicker; int joystic_clicker;
int pince = PINCE_OUVERTE; int pince;
int ascenceur = ASCENSEUR_BAS; int ascenseur;
void init_bouton(uint8_t bouton)
int M1_INITIALISE()
{ {
gpio_init(PIN_VITESSE_M1); gpio_init(bouton);
gpio_init(PIN_SENS_A_M1); gpio_set_dir(bouton, GPIO_IN);
gpio_init(PIN_SENS_B_M1); gpio_pull_up(bouton);
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);
} }
int Adc_Init() int Adc_Init()
@ -69,62 +49,33 @@ int Adc_Init()
adc_gpio_init(27); adc_gpio_init(27);
} }
int AdcRead0() int Adc_Read(short input)
{ {
adc_select_input(0); adc_select_input(input);
uint16_t resultadc = adc_read(); uint16_t result_adc = adc_read();
return resultadc; return result_adc;
} }
int AdcRead1() bool bouton_appui(uint8_t button)
{
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)
{ {
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}; 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]) bool is_button_pressed = gpio_get(button);
{ etat_bouton[button] = is_button_pressed;
etat_bouton[bouton] = gpio_get(bouton);
return 1;
}
else
{
etat_bouton[bouton] = gpio_get(bouton);
}
return 0; return is_button_pressed && is_button_pressed != etat_bouton[button];
} }
void main() void main()
{ {
char message [256];
stdio_init_all(); stdio_init_all();
// Communication // Communication
char message [256];
communication_init(); 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
adc_init(); Adc_Init();
adc_gpio_init(26);
adc_gpio_init(27);
// Boutons // Boutons
init_bouton(2); init_bouton(2);
@ -132,25 +83,41 @@ void main()
init_bouton(10); init_bouton(10);
init_bouton(14); init_bouton(14);
ascenceur = ASCENSEUR_BAS; ascenseur = ASCENSEUR_BAS;
pince = PINCE_OUVERTE; pince = PINCE_OUVERTE;
gpio_init(1); gpio_init(1);
gpio_pull_up(1); gpio_pull_up(1);
gpio_set_dir(1, GPIO_IN); 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 // Voie X
result1 = AdcRead1() / 16; result1 = Adc_Read(1) / 16;
// Voie Y // 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[0] = result0;
message[1] = 255 - result1; message[1] = 255 - result1;
//clic sur le joystic //clic sur le joystic
joystic_clicker = gpio_get(1); joystic_clicker = gpio_get(PIN_BUTTON_CLIC_JOYSTICK);
if (!joystic_clicker) if (!joystic_clicker)
{ {
if(result1 > 135) if(result1 > 135)
@ -171,6 +138,7 @@ void main()
{ {
message[2] = 128; message[2] = 128;
} }
*/
// Pince // Pince
// Bouton plante // Bouton plante
@ -202,33 +170,33 @@ void main()
// Commande simple // Commande simple
if(bouton_appui(2)) if(bouton_appui(2))
{ {
if(ascenceur == ASCENSEUR_HAUT) if(ascenseur == ASCENSEUR_HAUT)
{ {
ascenceur = ASCENSEUR_BAS; ascenseur = ASCENSEUR_BAS;
} }
else else
{ {
ascenceur = ASCENSEUR_HAUT; ascenseur = ASCENSEUR_HAUT;
} }
} }
// Commande évoluée // Commande évoluée
if(bouton_appui(14)) if(bouton_appui(14))
{ {
if(ascenceur == ASCENSEUR_HAUT) if(ascenseur == ASCENSEUR_HAUT)
{ {
if(pince == PINCE_PLANTE) if(pince == PINCE_PLANTE)
{ {
ascenceur = ASCENSEUR_LACHE_PLANTE; ascenseur = ASCENSEUR_LACHE_PLANTE;
} }
if(pince == PINCE_POT) 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 // 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) || else if((ascenseur == ASCENSEUR_LACHE_POT_JARDINIERE && pince == PINCE_POT) ||
(ascenceur == ASCENSEUR_LACHE_PLANTE && pince == PINCE_PLANTE)) (ascenseur == ASCENSEUR_LACHE_PLANTE && pince == PINCE_PLANTE))
{ {
pince = PINCE_OUVERTE; pince = PINCE_OUVERTE;
message [3] = pince; message [3] = pince;
@ -236,8 +204,8 @@ void main()
sleep_ms(500); sleep_ms(500);
ascenceur = ASCENSEUR_HAUT; ascenseur = ASCENSEUR_HAUT;
message[4] = ascenceur; message[4] = ascenseur;
communication_envoyer_message(message, 254); communication_envoyer_message(message, 254);
sleep_ms(500); sleep_ms(500);
@ -248,33 +216,22 @@ void main()
} }
else else
{ {
ascenceur = ASCENSEUR_HAUT; ascenseur = ASCENSEUR_HAUT;
} }
} }
message [3] = pince; message [3] = pince;
message[4] = ascenceur; message[4] = ascenseur;
printf(">x:%d\n", message[0]); printf(">x:%d\n", message[0]);
printf(">Y:%d\n", message[1]); printf(">Y:%d\n", message[1]);
printf(">Rz:%d\n", message[2]); printf(">Rz:%d\n", message[2]);
printf(">pince:%d\n", message[3]); printf(">pince:%d\n", message[3]);
printf(">ascenceur:%d\n", message[4]); printf(">ascenseur:%d\n", message[4]);
printf(">result0:%d\n", result0); printf(">result0:%d\n", result0);
sleep_ms(25); sleep_ms(25);
communication_envoyer_message(message, 254); communication_envoyer_message(message, 254);
} }
/*
M1_INITIALISE();
while(1)
{
M1_AVANCE();
sleep_ms(1000);
M1_RECULE();
sleep_ms(1000);
}
*/
} }