Approche Gradin + amélioration du Wifi
L'algorythme d'approche du gradin prend forme. Les capteurs sont bien lus et interprétés. Côté Wifi : - Les identifiants sont renseignés dans un fichier qui n'est pas suivi par Git. - Début d'une page statu pour le cerveau
This commit is contained in:
parent
09579d31bd
commit
2513404cfd
1
Cerveau/.gitignore
vendored
Normal file
1
Cerveau/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
Wifi_settings.ino
|
@ -27,14 +27,16 @@
|
||||
|
||||
#define gst_server;
|
||||
|
||||
extern const char *ssid;
|
||||
extern const char *password;
|
||||
|
||||
|
||||
struct triangulation_reception_t {
|
||||
int pos_x_mm, pos_y_mm;
|
||||
float angle_rad;
|
||||
bool validite;
|
||||
};
|
||||
|
||||
const char* ssid = "riombotique";
|
||||
const char* password = "password";
|
||||
// adresse du >Pi qui gere le serveur : 192.168.99.100
|
||||
IPAddress local_IP(192, 168, 99, 101);
|
||||
IPAddress gateway(192, 168, 99, 1);
|
||||
@ -187,7 +189,7 @@ void Initialisation_wifi(){
|
||||
//Initialisation wifi
|
||||
//------------WIFI------------
|
||||
//Initialisation wifi
|
||||
WiFi.config(local_IP, gateway, subnet);
|
||||
//WiFi.config(local_IP, gateway, subnet);
|
||||
WiFi.begin(ssid, password);
|
||||
int test_wifi = 0;
|
||||
while (WiFi.status() != WL_CONNECTED){
|
||||
@ -205,23 +207,27 @@ void Initialisation_wifi(){
|
||||
M5.Lcd.print("Connecte au reseau ;-)");
|
||||
M5.Lcd.setCursor(10,30);
|
||||
M5.Lcd.print(ssid);
|
||||
}
|
||||
else {
|
||||
// le routeur riombotique n'a pas été trouvé - création d'un point d'accès
|
||||
WiFi.mode(WIFI_OFF);
|
||||
if (!WiFi.softAP("cerveau", "ilestsecret")) {
|
||||
log_e("Soft AP creation failed.");
|
||||
while(1);
|
||||
}
|
||||
IPAddress myIP = WiFi.softAPIP();
|
||||
M5.Lcd.clear();
|
||||
M5.Lcd.setCursor(10,10);
|
||||
M5.Lcd.print("Creation Hotspot ;-)");
|
||||
M5.Lcd.setCursor(10,30);
|
||||
M5.Lcd.print("cerveau 192.168.4.1");
|
||||
M5.Lcd.setCursor(10,50);
|
||||
M5.Lcd.print("mdp : ilestsecret");
|
||||
M5.Lcd.print(WiFi.localIP());
|
||||
delay(3000);
|
||||
return;
|
||||
}
|
||||
// le routeur riombotique n'a pas été trouvé - création d'un point d'accès
|
||||
WiFi.config(local_IP, gateway, subnet);
|
||||
WiFi.mode(WIFI_OFF);
|
||||
if (!WiFi.softAP("cerveau", "ilestsecret")) {
|
||||
log_e("Soft AP creation failed.");
|
||||
while(1);
|
||||
}
|
||||
IPAddress myIP = WiFi.softAPIP();
|
||||
M5.Lcd.clear();
|
||||
M5.Lcd.setCursor(10,10);
|
||||
M5.Lcd.print("Creation Hotspot ;-)");
|
||||
M5.Lcd.setCursor(10,30);
|
||||
M5.Lcd.print("cerveau 192.168.4.1");
|
||||
M5.Lcd.setCursor(10,50);
|
||||
M5.Lcd.print("mdp : ilestsecret");
|
||||
|
||||
delay(1500);
|
||||
}
|
||||
|
||||
@ -388,8 +394,9 @@ void gestion_match(){
|
||||
}while(fabs(detect_gradin.angle_rad / M_PI * 180) > 0.5);
|
||||
//index_Maitre = ATTENTE_ORDRE;
|
||||
//affichage_standard_init();
|
||||
*/
|
||||
break;
|
||||
*/
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -497,10 +504,11 @@ enum etat_action_t gradin_approche(void){
|
||||
GA_CHERCHE_GAUCHE,
|
||||
GA_CHERCHE_DROIT,
|
||||
GA_GOTO_LARGE,
|
||||
GA_TOURNE_LARGE,
|
||||
GA_GOTO_PROCHE,
|
||||
GA_GOTO_PREND
|
||||
} statu_approche_gradin = GA_INIT;
|
||||
static float angle_parcouru;
|
||||
static float angle_parcouru, angle_mem;
|
||||
static int nb_erreur;
|
||||
int translation_x, translation_y;
|
||||
struct detect_gradin_t detect_gradin;
|
||||
@ -521,9 +529,11 @@ enum etat_action_t gradin_approche(void){
|
||||
if(detect_gradin.status == 2){
|
||||
// On a trouvé !
|
||||
statu_approche_gradin = GA_GOTO_LARGE;
|
||||
angle_mem = detect_gradin.angle_rad;
|
||||
nb_erreur = 0;
|
||||
}else if(detect_gradin.status == 0){
|
||||
// On a perdu la détection
|
||||
while(deplacement_relatif(0, 0, -3. * M_PI / 180., 0) == ACTION_EN_COURS);
|
||||
statu_approche_gradin = GA_CHERCHE_DROIT;
|
||||
}else{
|
||||
// On tourne à gauche de quelques degrés
|
||||
@ -535,6 +545,7 @@ enum etat_action_t gradin_approche(void){
|
||||
if(detect_gradin.status == 2){
|
||||
// On a trouvé !
|
||||
statu_approche_gradin = GA_GOTO_LARGE;
|
||||
angle_mem = detect_gradin.angle_rad;
|
||||
nb_erreur = 0;
|
||||
}else if(detect_gradin.status == 0){
|
||||
// On a perdu la détection
|
||||
@ -555,9 +566,29 @@ enum etat_action_t gradin_approche(void){
|
||||
while(1);
|
||||
}
|
||||
}
|
||||
translation_x = detect_gradin.centre_y_mm - 400 * cos(detect_gradin.angle_rad);
|
||||
translation_y = -400 * sin(detect_gradin.angle_rad);
|
||||
translation_x = (detect_gradin.centre_y_mm + 150) * tan(detect_gradin.angle_rad);
|
||||
translation_y = -(detect_gradin.centre_y_mm + 150) * sin(detect_gradin.angle_rad) - detect_gradin.centre_x_mm;
|
||||
|
||||
if(deplacement_relatif(translation_x, translation_y, 0, 0) == ACTION_TERMINEE){
|
||||
statu_approche_gradin = GA_TOURNE_LARGE;
|
||||
}
|
||||
break;
|
||||
|
||||
case GA_TOURNE_LARGE:
|
||||
if(deplacement_relatif(0, 0, -angle_mem, 0) == ACTION_TERMINEE){
|
||||
Detect_gradin(&detect_gradin);
|
||||
if(detect_gradin.status != 2 || fabs(detect_gradin.angle_rad) > 0.009){
|
||||
statu_approche_gradin = GA_CHERCHE_GAUCHE;
|
||||
}else{
|
||||
statu_approche_gradin = GA_GOTO_PROCHE;
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case GA_GOTO_PROCHE:
|
||||
Detect_gradin(&detect_gradin);
|
||||
if(deplacement_relatif((detect_gradin.centre_y_mm - 20), 0, 0, 0) == ACTION_TERMINEE){
|
||||
statu_approche_gradin = GA_INIT;
|
||||
return ACTION_TERMINEE;
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ struct chassis_emission_t {
|
||||
int vitesse, acceleration;
|
||||
};
|
||||
|
||||
void Scan_chassis(struct chassis_reception_t * chassis_reception);
|
||||
int Scan_chassis(struct chassis_reception_t * chassis_reception);
|
||||
void send_Chassis(struct chassis_emission_t * chassis_emission);
|
||||
void send_Chassis_RAZ(void);
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
|
||||
/// @brief Lit l'état du chassis en I2C
|
||||
void Scan_chassis(struct chassis_reception_t * chassis_reception){
|
||||
int Scan_chassis(struct chassis_reception_t * chassis_reception){
|
||||
unsigned char tampon2[14];
|
||||
//(Adresse I2c, Adresse dans le registre, tampon, longueur de donnée)
|
||||
error = I2C_lire_registre(I2C_SLAVE_chassi, 0, tampon2, 12);
|
||||
@ -19,6 +19,7 @@ void Scan_chassis(struct chassis_reception_t * chassis_reception){
|
||||
Mvt_finit = (MOUVEMENT_FINI == tampon2[0]);
|
||||
chassis_reception->status = tampon2[0];
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
void send_Chassis(struct chassis_emission_t * chassis_emission){
|
||||
|
@ -57,6 +57,7 @@ WebServer server(80);
|
||||
void Web_init(){
|
||||
server.begin();
|
||||
server.on("/form", handleForm);
|
||||
server.on("/statu", showStatus);
|
||||
}
|
||||
|
||||
bool Web_nouveau_message(){
|
||||
@ -99,3 +100,27 @@ void handleForm() {
|
||||
Web_nouvelle_entree=1;
|
||||
}
|
||||
|
||||
void showStatus() {
|
||||
char chassis[50], gradin[50], triangulation[50], detection_adversaire[50];
|
||||
char message_statu[500];
|
||||
const char message_statu_tmplt[] = "<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><title>A simple form</title></head>\
|
||||
<body>\n<h1>Statu du robot</h1>\n\
|
||||
<p>Chassis: %s</p><p>Gradin: %d</p><p>Triangulation: %d</p><p>Detection_adversaire: %d</p>";
|
||||
struct chassis_reception_t chassis_reception;
|
||||
|
||||
statu_to_string(chassis, !Scan_chassis(&chassis_reception) );
|
||||
|
||||
sprintf(message_statu, message_statu_tmplt, chassis, 0, 0, 0);
|
||||
server.send(200, "text/html", message_statu);
|
||||
|
||||
}
|
||||
|
||||
/// @brief convertir un statu boolean en message web.
|
||||
/// @param statu 0 NOK, 1 OK
|
||||
void statu_to_string(char * statu_str, bool statu){
|
||||
if(!statu){
|
||||
strcpy(statu_str, "<span style=\"color:red;\">NOK</span>");
|
||||
}else{
|
||||
strcpy(statu_str, "<span style=\"color:green;\">OK</span>");
|
||||
}
|
||||
}
|
||||
|
3
Cerveau/Wifi_settings.ino.example
Normal file
3
Cerveau/Wifi_settings.ino.example
Normal file
@ -0,0 +1,3 @@
|
||||
const char *ssid = "Mon SSID";
|
||||
const char *password = "Ma clé WiFi";
|
||||
|
15
Readme.md
15
Readme.md
@ -1,3 +1,14 @@
|
||||
WiFi
|
||||
====
|
||||
|
||||
Pour compiler le code du "Cerveau", il est nécessaire de copier le fichier Wifi_settings.ino.example en Wifi_settings.ino.
|
||||
Vous pouvez ensuite éditer le fichier Wifi_settings pour indiquer les identifiants Wifi.
|
||||
|
||||
Communication I2C
|
||||
=================
|
||||
|
||||
La documentation de notre protocole I2C est [disponible sous forme de PDF ici](Doc/Communication%20I2C.pdf).
|
||||
|
||||
Déplacement fonctionnel
|
||||
=======================
|
||||
|
||||
@ -10,7 +21,3 @@ Vidéo réalisée le 24 février 2024, paramètres :
|
||||
- vitesse : 2000
|
||||
- acceleration : 1500
|
||||
|
||||
Communication I2C
|
||||
=================
|
||||
|
||||
La documentation de notre protocole I2C est [disponible sous forme de PDF ici](Doc/Communication%20I2C.pdf).
|
||||
|
Loading…
Reference in New Issue
Block a user