Début de la messagerie applicative : réception du message de position

This commit is contained in:
Samuel 2026-01-28 19:13:59 +01:00
parent c558152993
commit 7e76fbd088
3 changed files with 85 additions and 2 deletions

74
main.c
View File

@ -17,8 +17,52 @@ void stdio_usb_out_chars(const char *buf, int length);
#define NB_MORCEAUX 100 #define NB_MORCEAUX 100
absolute_time_t envoie_nb_char(int nb_char); absolute_time_t envoie_nb_char(int nb_char);
uint8_t memoire_echange[200];
char chaine_envoie[10000]; char chaine_envoie[10000];
bool mise_a_jour_position = false;
bool mise_a_jour_mode = false;
bool mise_a_jour_pwm = false;
bool mise_a_jour_vitesse_roues = false;
bool mise_a_jour_vitesse_robot = false;
bool mise_a_jour_trajectoire = false;
void écriture_données(unsigned int adresse, uint8_t donnée){
if( adresse <= 11){
// Position du robot
mise_a_jour_position = true;
}else if(adresse <= 12){
// Read only
}else if(adresse <= 13){
// Mode
mise_a_jour_mode = true;
}else if(adresse <= 17){
// PWM moteur
mise_a_jour_pwm = true;
}else if(adresse <= 25){
// Vitesse roues
mise_a_jour_vitesse_roues = true;
}else if(adresse <= 33){
// Vitesse robot
mise_a_jour_vitesse_robot = true;
}else if(adresse <= 86){
// Trajectoire
mise_a_jour_trajectoire = true;
}else if(adresse >86){
// Hors mémoire
printf("adresse = %d\n", adresse);
return;
}
memoire_echange[adresse] = donnée;
}
void envoie_donnees(char * donnees, uint16_t length){ void envoie_donnees(char * donnees, uint16_t length){
@ -134,14 +178,40 @@ void main(void)
// données[1]: id de la carte // données[1]: id de la carte
// données[2]: 1er registre // données[2]: 1er registre
// données[3 à tailles_données -1]: valeurs // données[3 à tailles_données -1]: valeurs
memcpy(&message_applicatif, message.donnees, message.taille_donnees); memcpy(&message_applicatif, message.donnees, message.taille_donnees);
printf("id_carte:%c %d\n", message_applicatif.id_carte, message_applicatif.id_carte);
if(message_applicatif.id_carte == 'P'){
mise_a_jour_position = false;
mise_a_jour_mode = false;
mise_a_jour_pwm = false;
mise_a_jour_vitesse_roues = false;
mise_a_jour_vitesse_robot = false;
mise_a_jour_trajectoire = false;
// Copie des données dans la mémoire d'échange
for (int num_octet=0; num_octet<message_applicatif.taille_donnees; num_octet++){
écriture_données(message_applicatif.adresse_registre + num_octet, message_applicatif.donnees_applicative.donnees[num_octet]);
}
if(mise_a_jour_position){
struct msg_propulsion_position_t msg_propulsion_position;
memcpy(&msg_propulsion_position, &(memoire_echange[0]), sizeof(msg_propulsion_position));
printf("mise à jour de la position, x:%2.2f, y:%2.2f, orientation: %2.2f\n", msg_propulsion_position.position_x_mm,
msg_propulsion_position.position_y_mm, msg_propulsion_position.orientation_rad);
}
}
/*
if(message_applicatif.id_carte == USB_ID_PROPULSION && message_applicatif.adresse_registre == REG_PROPULSION_POSITION){ if(message_applicatif.id_carte == USB_ID_PROPULSION && message_applicatif.adresse_registre == REG_PROPULSION_POSITION){
printf("x:%x, y:%x, rot:%x\n", message_applicatif.donnees_applicative.msg_propulsion_position.position_x_mm, printf("x:%x, y:%x, rot:%x\n", message_applicatif.donnees_applicative.msg_propulsion_position.position_x_mm,
message_applicatif.donnees_applicative.msg_propulsion_position.position_y_mm, message_applicatif.donnees_applicative.msg_propulsion_position.position_y_mm,
message_applicatif.donnees_applicative.msg_propulsion_position.orientation_rad); message_applicatif.donnees_applicative.msg_propulsion_position.orientation_rad);
} }*/
id_carte = message.donnees[1]; id_carte = message.donnees[1];
registre = message.donnees[2]; registre = message.donnees[2];

View File

@ -22,6 +22,7 @@ struct message_applicatif_t{
uint8_t adresse_registre; // Adresse du registre lu ou écrit uint8_t adresse_registre; // Adresse du registre lu ou écrit
uint8_t taille_donnees; uint8_t taille_donnees;
union{ union{
uint8_t donnees[100];
#ifdef MESSAGE_PROPULSION_H #ifdef MESSAGE_PROPULSION_H
struct msg_propulsion_position_t msg_propulsion_position; struct msg_propulsion_position_t msg_propulsion_position;
#endif #endif

12
messages_propulsion.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef MESSAGE_PROPULSION_H
#define MESSAGE_PROPULSION_H
#define USB_ID_PROPULSION 'P'
#define REG_PROPULSION_POSITION 0x00
struct msg_propulsion_position_t{
float position_x_mm, position_y_mm, orientation_rad;
};
#endif