robot autonome, gestion spatial et temporel, erreurs général ou moniteur série

Un seul 0 derrière la virgule suffit.

Oui si on parle d'arrondir mais dans le cas d'un stockage dans un type inapproprié, on a plutôt ceci, et dans le cas d'une condition d'égalité, on ne peut pas l'obtenir car très proche ne veux pas dire identique.

pas de soucis je travaille que sur des conditions d'encadrement.

sinon j'ai enfin mis au propre tout se que nous avions dit en voici le résultat

// INITIALISATION DES VARIABLEs          
float tempjeu = 0.0;//temps réel
float tempprog = 0.0;// ?temps soustrayant les poses du aux arrets imprévus sur le parcour, permet le repére dans les etapes de parcours sans bug de saut d'étape
const float sud = (3*PI)/2000; // orientation primaire utile en milli radiant 
const float nord = PI/2000;
const float est = 0.0;
const float ouest = PI/1000;
float oriente = 0.0;
int contact = 1; // varible on off coup d'envois 
int danger = 0;// détection d'un obstacle imprévus arrêt du véicule 
const int margesecu = 200.0;// distance maximal entre le robot et un obstacle inconu en mm
const int margemur = 100.0; // distance maximal entre le robot et un obstacle de l'environnement connue en mm
float ecartp = 0.0; //tempjeu-tempprog en milliseconde 
const float finjeu = 100000.0; // temps de fin de jeux en mili seconde
float calcutemp = 0.0; //variable de comparaison du tempprograme pour déterminé l'étape 
float temparduino = 0.0; //retard du milisse avant début du programe  
float tempboucle = 0.0; // temp entre chaque boucle pour calculer la position à chaque boucle remis à O en sortent de la boucle pas danger (sinon cumul sur plusieur boucle et ereur de calcule de trajectoir)
int b = 0; //simple varible de conte 
const float n = 1/30000; //marge de radiant minimal éxigé pour validé l'attainte d'une orientation demandé en radiant


const float vmaxrec = 0.25;// vitesse max sur sol plat en mm par milli seconde 
const float vmaxcirc = PI/6;//vitesse max circulaire sur sol plat  en milliradant par milliseconde  
float parcour [2][7]{{5000.0,4000.0,6000.0,2000.0,4000.0},             // déterminé la distance en mm 
                   {nord,sud,est,ouest,PI/4000}}; //déterminer la direction tableau servant d'interface pour stocker la trajectoire et les action à réaliser en dgrée
float x = 0.0; // position d'origine en x en mm (nb: verifier le set utilisé)
float y = 0.0; // position d'origine en y en mm
float degresReel = 0.0; //direction de la tête du robot dans le repére x y en mradiant radiant au démarage 

          
//SETUP
void setup() { 
  Serial.begin(1200);
  
}
// BOUCLE
void loop() {
  Serial.print ("x= ");
  Serial.println(x);
  Serial.print ("y= ");
  Serial.println(y);
  Serial.print ("degresReel= ");
  Serial.println(degresReel);
  Serial.print("millis = ");
  Serial.println(millis());
  Serial.print("tempjeu = ");
  Serial.println(tempjeu);
  Serial.print("oriente = ");
  Serial.println(oriente);
  Serial.print("tempprog = ");
  Serial.println(tempprog);
  Serial.print("ecart temp = ");
  Serial.println(ecartp);
  

// detection du coup d'envois 
    //lire on off et assigner 1 à contact si ON ( à ajouté) 
      if ((contact == 1)&&(tempjeu == 0)){//si jeux tout juste lancé initialisé temparduino 
      temparduino = millis();
      tempjeu =millis()-temparduino;
      }
    
// aprés coup d'envois
    if (temparduino != -1 ){
     tempjeu = millis()-temparduino;
     //prise valeur capteur..... (à ajouté)
     // si x y proche murs alors réduire marge de sécurité sur côté concerné, variable(x,y,margemur; margesecu;non cpateur)
     // si capteurs inférieur à marge alors danger = 1 sinon danger = 0
       
    //si danger ou jeux fini
         if ((danger == 1)||(tempjeu > finjeu)){ // si danger ou jeux fini
          ecartp = ecartp+tempjeu-(millis()-temparduino);// commencer à calculer l'écart temporelle
         //alor tout moteur = low (à ajouté)
         tempboucle = 0; //réinitialise l'écart de temp entre chaque boucle ou il y a mouvement pour ne pas cumulé le temp quand le robot et arété 
         }
         
    // lire étape de trajectoire en fonction du tempprog
        calcutemp = 0;
        tempprog = tempjeu-ecartp;
        for (int i=1; calcutemp <= tempprog; i++){calcutemp = calcutemp + (parcour[1][i])/(vmaxrec); //tester les diférente étape 
        b = i;}
        oriente = parcour [2][b]; //choisire l'orientation de l'étape trouvé


    //si pas de danger   
        if (danger == 0){

             //si direction changer 
             while (degresReel < 0){ degresReel += PI/500;} //rendre positif degresReel
             while (degresReel >= PI/500){degresReel -= PI/500;} // le réduire sous PI/500 
             
                  if(((oriente + n < degresReel)||(oriente + n - PI/500 < degresReel))&&((degresReel < oriente - n)||(degresReel < oriente - n + PI/500))){ //si degresReel ne convient pas à l'orientation demandé avec une marge n 
                       tempboucle = tempboucle - millis();
                        if(((oriente - PI/1000 <= degresReel)||(oriente + PI/1000 <= degresReel))&&(degresReel < oriente)){ // si le chemine le plus cours et ds le sens horaire 
                          // alumer les moteurs dans le sence horaire  (à faire)
                          degresReel = degresReel - vmaxcirc * tempboucle;//calculer degresReel possiblement remplacé par un giroscope dans la cboucle principal 
                          } 
                        if((oriente <= degresReel)&&((degresReel < oriente + PI/1000)||(degresReel < oriente - PI/1000))){ // si le chemin le plus cour et dans le sens trigo 
                          // alumer les moteurs dans le sence trigo (à faire) 
                          degresReel = degresReel + vmaxcirc * tempboucle;//calculer degresReel possiblement remplacé par un giroscope dans la cboucle principal
                          ecartp = tempjeu - tempprog;//calcule ecart tp  
                          }
                       tempboucle = millis(); 
                  }
                  tempprog = tempjeu - ecartp ;
                  if(((oriente + n >= degresReel)||(oriente + n - PI/500 >= degresReel))&&((degresReel >= oriente - n)||(degresReel >= oriente - n + PI/500))){
                    //alumer les moteurs pour avencer (à faire) 
                    tempboucle = tempboucle - millis();
                    x = x + cos(degresReel * 1000) / 1000 * tempboucle * vmaxrec ;//calculé x y théorique en m m, possiblement remplacé par un accélérométre dans la boucle principal 
                    y = y + sin(degresReel * 1000) / 1000 * tempboucle * vmaxrec ;
                    tempboucle = millis();
                    }
                  }
        }
     }

j'ai testé les résultat sur le moniteur série

le temps semble bien se déroulé mais la position reste fixe contrairement à se qui lui est demandé.