Enjolivement du programme degeu caca et changement du system de rotation du robot
This commit is contained in:
parent
9b9cffec43
commit
e66a77b245
169
main.c
169
main.c
@ -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);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user