projet crepp_git/crepp-projects/cocci-bot · branche main
Ecommunication.ino Voir sur GitLab
//MODULE COMMUNICATION PORT SERIE
// ce module permet de transmettre une rafale de parametres à Arduino sous forme d'un tableau
//Actuellement,10 parametres peuvent etre transmis.Si on ne tape que 4 parametres,ils correspondront 
//aux parametres moteurs

//valeurs des parametres transmis:

//param 0:vitesse PWM moteur gauche (min :0 max:255 )
//param 1:vitesse PWM moteur droit  (min :0 max:255 )
//param 2:sens moteur gauche.        0 en avant 1 en arriere
//param 3:sens moteur droit .        0 en avant 1 en arriere
//param 4:rotation camera.           angle min 0 ;angle max: 120?
//param 5:Elevation camera           angle min 0 ; angle max:120?
//param 6:Rotation bras              angle min 0 ; angle max:120?
//param 7:Elevation Bras             angle min 0 ; angle max:120?
//param 8:Avant/arriere Bras         angle min 0 ; angle max:120?
//param 9:Pince Bras                 angle min 0 ; angle max:120?

void ComSerie() {
        static int c =0;//compteur de parametres recus
        int caractere;// caractere unitaire recu sur le port serie
        int stock=1;//detection des virgules(2 a suivre ou pas)       
        int nombreReception = NULL;//nombre (parametre) en reception
  
  while ((Serial.available() > 0)) {   //tant qu'on recoit quelque chose...
        
        caractere = Serial.read();//...on le lit
                
           if (caractere == 10){// si c'est un saut de ligne(fin de sequence)
             
               params[c]=nombreReception;// le nombre precedemment stocké est le dernier du tableau
               nombreReception = NULL;// remise a zero des nombres recus   
               c = 0;   // remise a zero du compteur de parametres recus    
               break;// sortie de la boucle
           } // fin ifpour saut de ligne

       
          if (caractere == 44){// si c'est une virgule....
              
             if (stock==0){//si le caractere precedent n'etait pas une virgule
                params[c]= nombreReception;//on affecte la valeur precedente recue au tableau
                nombreReception = NULL;// on remet a zero la variable nombre recu
                stock=1;//on memorise le fait d'avoir recu une virgule
             }//fin if stock
                c++;// on passe a l indice parametre suivant                            
           }// fin if virgule      
          
          if (caractere == 102){
            ServosFin();
          }

          if ((caractere == 65) or (caractere == 97)){
            memauto = automatic;
            automatic =1;
            
          }

          if ((caractere == 77) or (caractere == 109)){
            if (memauto != automatic)
            params[0]=0;
            params[1]=0,
            Moteurs();
            automatic =0;
            memauto=0;
          }
          
          if ((caractere>47) & (caractere<58)){// si on recoit un chiffre...
            
              stock=0;//on memorise que l'on ne recoit pas une virgule
              caractere = caractere-48;//on transforme le chiffre ASCII en decimal
              nombreReception = (nombreReception*10)+caractere;// formule de reconstitution du nombre transmis
       
              delay(1);//laisse le temps au caractere suivant d'arriver
          }// fin if caractere

     
    }// fin while
  }//fin void comSerie