Déplacements relatifs fonctionnels
This commit is contained in:
parent
ba2ba761ee
commit
9023ae64bc
@ -9,6 +9,9 @@
|
||||
|
||||
#define Rad_Deg 57.2957795130823
|
||||
|
||||
#define MOUVEMENT_FINI 0x4
|
||||
#define MOUVEMENT_EN_COURS 0x2
|
||||
|
||||
#define gst_server;
|
||||
const char* ssid = "riombotique";
|
||||
const char* password = "password";
|
||||
@ -80,15 +83,15 @@ char* statu[] = {"/..","./.","../"};
|
||||
int index_statu=0;
|
||||
|
||||
struct chassis_reception_t {
|
||||
char status;
|
||||
unsigned char status;
|
||||
};
|
||||
|
||||
struct chassis_emission_t {
|
||||
char status;
|
||||
unsigned char status;
|
||||
int translation_x, translation_y, rotation_y;
|
||||
};
|
||||
|
||||
|
||||
void Scan_chassis(struct chassis_reception_t * chassis_reception);
|
||||
|
||||
#define FORM \
|
||||
"<!DOCTYPE html>\n" \
|
||||
@ -197,31 +200,9 @@ void loop() {
|
||||
static int64_t time;
|
||||
struct chassis_reception_t chassis_reception;
|
||||
|
||||
Serial.println("Scan_chassis");
|
||||
|
||||
erreur = Scan_Chassi(&chassis_reception);
|
||||
Serial.println("fin Scan_chassis");
|
||||
|
||||
// Si le chassis est disponible
|
||||
// Attente 1 seconde avant d'envoyer un messa
|
||||
|
||||
Serial.println("if 0x04");
|
||||
if(chassis_reception.status == 0x04 && wait == 0){
|
||||
time = esp_timer_get_time();
|
||||
wait = 1;
|
||||
}
|
||||
|
||||
Serial.println("wait 1s");
|
||||
if(wait == 1 && esp_timer_get_time() > time + 1000000){
|
||||
Serial.println("send_Chassis");
|
||||
send_Chassis();
|
||||
wait = 0;
|
||||
}
|
||||
|
||||
|
||||
//strategie();
|
||||
//affichage_resultats();
|
||||
//delay(500);
|
||||
strategie();
|
||||
affichage_resultats();
|
||||
delay(500);
|
||||
}
|
||||
|
||||
void affichage_resultats() {
|
||||
@ -335,29 +316,34 @@ void strategie(){
|
||||
break;
|
||||
|
||||
case 2 : //---------------------------------------------------------------------------------------------------------
|
||||
Scan_Chassi(&chassis_reception); //Verif de la fin de mouvement remonté par le chassis
|
||||
Scan_chassis(&chassis_reception); //Verif de la fin de mouvement remonté par le chassis
|
||||
if(Err_Chassi_com !=0){
|
||||
affiche_erreur("case 2", "Err_Chassi_com !=0");
|
||||
for(int j=0; j<10; j++){
|
||||
affichage_resultats();
|
||||
Scan_Chassi(&chassis_reception);
|
||||
Scan_chassis(&chassis_reception);
|
||||
//delay(500);
|
||||
}
|
||||
// ********************************* ERREUR DE COM FATAL ***********************
|
||||
}
|
||||
if(Mvt_finit==0){
|
||||
cmd_chassi_x = xA;
|
||||
cmd_chassi_y = yA;
|
||||
Cmd_Angle = rot;
|
||||
send_Chassis(); //Envoie des coordonées à atteindre
|
||||
while(Mvt_finit!=1){
|
||||
Scan_Chassi(&chassis_reception); //Verif de la fin de mouvement remonté par le chassis (time out ?**********)
|
||||
Serial.println("while Mvt_finit");
|
||||
Scan_chassis(&chassis_reception); //Verif de la fin de mouvement remonté par le chassis (time out ?**********)
|
||||
delay(50);
|
||||
}
|
||||
Scan_Chassi(&chassis_reception); //Verif de la fin de mouvement remonté par le chassis (time out ?**********)
|
||||
Scan_chassis(&chassis_reception); //Verif de la fin de mouvement remonté par le chassis (time out ?**********)
|
||||
}else{
|
||||
send_Chassis_RAZ(); //Envoie des coordonées à atteindre
|
||||
}
|
||||
//M5.Lcd.clear();
|
||||
//M5.Lcd.clear();
|
||||
Serial.println("case 2 fin1/2");
|
||||
|
||||
index_Maitre = 0;
|
||||
Serial.println("case 2 fin2/2");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -405,29 +391,32 @@ void compar_cinematique(){
|
||||
}
|
||||
|
||||
/// @brief Lit l'état du chassis en I2C
|
||||
/// @return renvoi 0 si tout s'est bien passé, un code d'erreur sinon
|
||||
int Scan_Chassi(struct chassis_reception_t * chassis_reception){
|
||||
unsigned char tampon2[10];
|
||||
void Scan_chassis(struct chassis_reception_t * chassis_reception){
|
||||
unsigned char tampon2[14];
|
||||
//(Adresse I2c, Adresse dans le registre, tampon, longueur de donnée)
|
||||
//Serial.println("avant lire registre");
|
||||
error = I2C_lire_registre(I2C_SLAVE_chassi, 0, tampon2, 8);
|
||||
Serial.println("avant lire registre");
|
||||
error = I2C_lire_registre(I2C_SLAVE_chassi, 0, tampon2, 12);
|
||||
Serial.println("apres lire registre");
|
||||
if (error !=0){
|
||||
Serial.println("Erreur I2C");
|
||||
Err_Chassi_com =1;IndexErr = 2;
|
||||
affiche_erreur("Scan_Chassi", "Erreur I2C");
|
||||
while(1);
|
||||
}else{
|
||||
Serial.println("I2C OK");
|
||||
Err_Chassi_com =0;
|
||||
IndexErr = 0;
|
||||
int valeur;
|
||||
|
||||
Mvt_finit = (0x04 == tampon2[0] & 0x04);
|
||||
char chaine[32];
|
||||
sprintf(chaine, "tampon2: %x %x %x %x %x %x %x %x\n", tampon2[0], tampon2[1], tampon2[2], tampon2[3], tampon2[4],
|
||||
tampon2[5], tampon2[6], tampon2[7]);
|
||||
Mvt_finit = (MOUVEMENT_FINI == tampon2[0]);
|
||||
char chaine[100];
|
||||
sprintf(chaine, "tampon2: %x %x %x %x %x %x %x %x %x %x %x %x %x %x\n", tampon2[0], tampon2[1], tampon2[2], tampon2[3], tampon2[4],
|
||||
tampon2[5], tampon2[6], tampon2[7], tampon2[8], tampon2[9], tampon2[10], tampon2[11], tampon2[12], tampon2[13]);
|
||||
affiche_msg("Scan_Chassi", chaine);
|
||||
Serial.println("Affect struct");
|
||||
chassis_reception->status = tampon2[0];
|
||||
Serial.println("apres Affect struct");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief Récupère position (X, Y) et l'orientation du robot
|
||||
@ -467,9 +456,8 @@ void send_Chassis_RAZ(){
|
||||
|
||||
void send_Chassis(){
|
||||
//if(nbr_essai<=10){
|
||||
Cmd_Angle = MemCmd_A;
|
||||
// Prévient le chassis d'un nouveau mouvement avec le 2eme bit du premier Octet
|
||||
Mot[0] = 2;
|
||||
Mot[0] = MOUVEMENT_EN_COURS;
|
||||
//y*=-1;
|
||||
//y = y*direction;
|
||||
Mot[1] = cmd_chassi_x >>8; Mot[2] = cmd_chassi_x;
|
||||
|
@ -17,7 +17,7 @@
|
||||
#define serialP;
|
||||
#define gst_I2C;
|
||||
|
||||
byte * I2C_memory;
|
||||
volatile byte * I2C_memory;
|
||||
|
||||
//*********************************************************************
|
||||
//******************** Integration et config Moteur *******************
|
||||
@ -52,9 +52,9 @@ int com[] = {0, 0, 0};
|
||||
|
||||
// -------------- Direction des moteurs ( pour un sens de marche commun )
|
||||
int dirX= +1;
|
||||
int dirY= -1;
|
||||
int dirY= +1;
|
||||
int dirZ= +1;
|
||||
int dirA= -1;
|
||||
int dirA= +1;
|
||||
|
||||
int cli_led=0; // initial value of input
|
||||
int Move = 0;
|
||||
@ -84,17 +84,10 @@ int h=0;
|
||||
void setup()
|
||||
{
|
||||
pinMode(Men,OUTPUT);
|
||||
digitalWrite(Men, LOW);// Low Level Enable
|
||||
stop();
|
||||
#ifdef serialP
|
||||
Serial.begin(115200);
|
||||
#endif
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
for(int i=0; i<6;i++){
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
delay(150);
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
delay(150);
|
||||
}
|
||||
|
||||
// X
|
||||
stepperX.setMaxSpeed(vitesse); stepperX.setAcceleration(accel);
|
||||
@ -109,18 +102,17 @@ void setup()
|
||||
//Serial.println(Men);
|
||||
I2C_Slave_init(0x55);
|
||||
I2C_memory = get_i2c_data();
|
||||
I2C_memory[0] = 0x1;
|
||||
I2C_memory[1] = 0x2;
|
||||
I2C_memory[2] = 0x3;
|
||||
I2C_memory[3] = 0x4;
|
||||
I2C_memory[4] = 0x5;
|
||||
I2C_memory[5] = 0x6;
|
||||
I2C_memory[6] = 0x7;
|
||||
I2C_memory[7] = 0x8;
|
||||
|
||||
|
||||
//digitalWrite(Men, LOW);// Low Level Enable
|
||||
pinMode(pul1, OUTPUT);
|
||||
pinMode(pul2, OUTPUT);
|
||||
pinMode(pul3, OUTPUT);
|
||||
pinMode(pul4, OUTPUT);
|
||||
pinMode(dir1, OUTPUT);
|
||||
pinMode(dir2, OUTPUT);
|
||||
pinMode(dir3, OUTPUT);
|
||||
pinMode(dir4, OUTPUT);
|
||||
|
||||
}
|
||||
|
||||
@ -135,17 +127,6 @@ void loop()
|
||||
}
|
||||
Serial.printf("\n");
|
||||
|
||||
// Reset octet 0 à 0 au bout d'une seconede
|
||||
if(I2C_memory[0] !=0 && wait == 0){
|
||||
time = esp_timer_get_time();
|
||||
wait = 1;
|
||||
}
|
||||
if(esp_timer_get_time() > time + 1000000 && wait == 1){
|
||||
I2C_memory[0] = 0x4;
|
||||
wait = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
if(((I2C_memory[0] & 0x02)==2) && Modif_Mvt==0){
|
||||
Modif_Mvt = 1;
|
||||
@ -162,6 +143,7 @@ void loop()
|
||||
}
|
||||
Position_Calculation(); //************* Calcul du Vecteur XY (incrémental)
|
||||
Mvmt(); //************* Envoie de la position à ateindre pour chaque moteur + Execution du mouvement
|
||||
stop(); // Servo Off
|
||||
|
||||
I2C_memory[0] = 0x04;
|
||||
I2C_envoi_8bits(I2C_memory[0] ,0);
|
||||
@ -180,17 +162,17 @@ void loop()
|
||||
}
|
||||
|
||||
//Dé-asservissement des moteurs
|
||||
stop(); // Servo Off
|
||||
*/
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void Position_Calculation(){
|
||||
PosX = Target[0];
|
||||
AxeX[0] = {PosX}; //x
|
||||
AxeX[1] = {-PosX}; //y
|
||||
AxeX[1] = {PosX}; //y
|
||||
AxeX[2] = {-PosX}; //z
|
||||
AxeX[3] = {PosX}; //a
|
||||
AxeX[3] = {-PosX}; //a
|
||||
PosY = Target[1];
|
||||
AxeY[0] = {PosY}; //x
|
||||
AxeY[1] = {PosY}; //y
|
||||
@ -199,8 +181,8 @@ void Position_Calculation(){
|
||||
Rot = Target[2];
|
||||
AxeRot[0] = {-Rot}; //x
|
||||
AxeRot[1] = {Rot}; //y
|
||||
AxeRot[2] = {-Rot}; //z
|
||||
AxeRot[3] = {Rot}; //a
|
||||
AxeRot[2] = {Rot}; //z
|
||||
AxeRot[3] = {-Rot}; //a
|
||||
|
||||
vitesse = Target[3];
|
||||
accel = Target[4];
|
||||
@ -261,14 +243,8 @@ void Mvmt(){
|
||||
// Serial.print(stepperX.distanceToGo());Serial.print("/");Serial.print(stepperY.distanceToGo());Serial.print("/");Serial.print(stepperZ.distanceToGo());Serial.print("/");Serial.print(stepperA.distanceToGo());Serial.print("\t");Serial.print(Interrupt);Serial.print("\t");Serial.println(Modif_Mvt);
|
||||
// delay(100);
|
||||
#endif
|
||||
if(esp_timer_get_time() > time + 100000){
|
||||
time = esp_timer_get_time();
|
||||
digitalWrite(LED_BUILTIN, cli_led);
|
||||
cli_led = !cli_led;
|
||||
}
|
||||
}
|
||||
}
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
// if(Modif_Mvt == 1){
|
||||
// Position_Calculation();
|
||||
// Serial.println("\t\tRe Calculation !!!");
|
||||
|
@ -20,7 +20,6 @@ void onRequest(){
|
||||
}
|
||||
|
||||
void onReceive(int len){
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
memoire_I2C_index = Wire.read();
|
||||
while(Wire.available()){
|
||||
nouveau_message=true;
|
||||
|
11
Readme.md
11
Readme.md
@ -1,10 +1,7 @@
|
||||
Test de la liaison I2C entre le châssis et le cerveau
|
||||
=====================================================
|
||||
Déplacement fonctionnel
|
||||
=======================
|
||||
|
||||
Ce code permet de tester la communication I2C entre le châssis et le cerveau. Le cerveau demande 8 octet au châssis.
|
||||
Si l'octet 0 vaut 4, au bout d'une seconde, le cerveau envoi une trame pour réinitialise l'octet à 2.
|
||||
Côté cerveau, un serveur web qui permet d'envoyer un ordre de déplacement relatif au châssis.
|
||||
|
||||
Le châssis scrute l'octet 0 et si celui-ci vaut 2, il attend une seconde puis le passe à 1.
|
||||
Calibration des sens des moteurs pour les translations en X, Y et pour la rotation.
|
||||
|
||||
Le châssis envoie l'état de sa mémoire par la liaison USB.
|
||||
Le cerveau affiche l'état de sa mémoire sur l'écran.
|
||||
|
Loading…
Reference in New Issue
Block a user