Début de la messagerie applicative : réception du message de position
This commit is contained in:
parent
c558152993
commit
7e76fbd088
74
main.c
74
main.c
@ -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];
|
||||||
|
|||||||
@ -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
12
messages_propulsion.h
Normal 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
|
||||||
Loading…
Reference in New Issue
Block a user