Aller au contenu


Photo
* * * * * 1 note(s)

Guide linéaire motorisé


  • Veuillez vous connecter pour répondre
172 réponses à ce sujet

#81 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 175 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 29 avril 2020 - 07:44

cook, il est important que ce soit toi qui explique comment tu veux le faire marcher. 

Ne cherche pas forcément à suivre ce que Sandro a dit, ou encore ce que moi je dit =) 
Tu peux t'appuyer sur les idées qu'on souffle, mais c'est à toi d'expliquer comment tu veux que ça marche ;) 
 

 

1 bouton pour régler les centimètres 

1 bouton pour régler les millimètres

1 bouton pour valider la distance choisie

1 bouton pour faire avancé le moteur

 

 

 

ça c'est un bon début de description mais ce n'est pas suffisant =). 

 

Décrit ce que tu veux  avec des phrases simple et on y va ;)
On décortiquera tes phrases une par une et on les découpera en autant de morceaux qu'il faut pour que tu codes la chose telle que tu veux que ça fonctionne ;) en y allant morceaux par morceaux. 

Mais c'est à toi de faire la première étape =)
 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#82 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 29 avril 2020 - 08:16

Euh non, à priori, je pensais que dès que la distance est validée, le moteur y vas. Du coup, il n'y a que 3 boutons (les deux derniers de la liste serraient le même). Mais si tu veux un bouton pour valider et un autre pour faire avancer, ça me vas aussi, ça change rien aux 4 étapes (ça changera dans les étapes suivantes). Après, je vois pas trop ce que tu veux faire entre la validation et le fait d'avancer : pour moi, c'est plus simple si dès qu'on valide le moteur avance. Mais c'est comme tu veux.


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#83 cook

cook

    Membre

  • Membres
  • 120 messages

Posté 29 avril 2020 - 08:22

J'ai  compris 4 boutons , mais en fait si la validation fait avancer le moteur , va pour 3 .

Nickel 

Je te refait un résumé .



#84 cook

cook

    Membre

  • Membres
  • 120 messages

Posté 29 avril 2020 - 08:53

 Le but est d'afficher une nouvelle distance sur l’écran LCD . ( qui est sur 30 cm du fait de l'initialisation )

 

Réglage des centimètre avec un premier bouton

je reste appuyé et les centimètre se déroule de 30.0 à 190,0 cm en boucle . Environ 1 cm  par seconde ( réglable serai bien , des fois que  1 cm par seconde soit trop rapide ou inversement )   .  Je relâche le bouton le compteur s’arrête .

 

 

Réglage des millimètres avec un second bouton

Pour les millimètres c'est un peut différent . Je fait un simple appuis , (donc j'appuis et je relâche) une impulsion en fait ! les millimètres s’incrémentent de 1 mm . 

Pour exemple le compteur est sur 30.0 après la réinitialisation . Je fait un appuis et le compteur passe à 30.1 cm .

Autre cas de figure , le compteur est réglé sur 30.9 et je fait un appuis. Le compteur passe à 30.0

.

 

Avec le troisième boutons , je valide . Donc le moteur se déplace à la mesure affichée sur l'écran .

 

J’espère que l'explication est plus précise . C'est pas facile à expliquer .



#85 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 29 avril 2020 - 10:35

Je crois bien qu'on a enfin exactement la même interprétation.

 

Pour l'intervalle de 1s réglable, c'est pas un problème : il suffira de changer une valeur dans le code pour le changer (ou dans un second temps on pourra ajouter un potentiomètre si tu désires que l'utilisateur puisse modifier l'intervalle de temps sans avoir à recompiler le code).

 

Du coup, je pense que tu peux te lancer dans les 4 étapes du message #77


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#86 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 175 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 30 avril 2020 - 01:00

On va commencer par la première phrase :

"Réglage des centimètre avec un premier bouton

je reste appuyé et les centimètre se déroule de 30.0 à 190,0 cm en boucle . Environ 1 cm  par seconde ( réglable serai bien , des fois que  1 cm par seconde soit trop rapide ou inversement )   .  Je relâche le bouton le compteur s’arrête . "
 

 

Premier truc à faire : tu ajoutes le bouton dans ton code et tu le câbles sur ta platine et tu fais un petit bout de code tout simple pour vérifier que ça marche comme tu veux / que ton bouton est bien câblé =). 

 

Ensuite : On veut faire un code propre => On va faire une fonction
 au vu du besoin tu vas "rester appuyer" => donc tu vas chercher à faire une action " tant que tu restes appuyer ". ( ça tombe bien on a vu un truc presque similaire avec la butée mais tant qu'elle est pas appuyée :P
Tu veux un compteur qui s'incrémente et on cherche à éviter au maximum les variables globales => On va mettre faire une variable qu'on va incrémenter et la fonction va nous retourner le résultat. 
On veut mettre une notion de temps qui va être réglable => On va mettre une constante dans notre code qu'on va pouvoir comparer avec une le temps actuel - le temps où on a commencé à regarder .... ( la fonction millis() permet d'avoir le temps écoulée en ms depuis que la carte est allumée permettant ainsi d'avoir le "temps actuel ") => il faudra prendre une variable qui servira de "référence " du temps où on a commencé à appuyer ... 

 



Maintenant il y a plus qu'à !








 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#87 cook

cook

    Membre

  • Membres
  • 120 messages

Posté 01 mai 2020 - 10:49

Bonjour à tous ,

C'est chaud le codage ! un petit oubli de ponctuation , et Wahou le temps qui passe pour trouver la solution !

 

Voila ou cela m'a mener .

J'ai rajouté la fonction void ReglageAffichageDistance () ;

ou j'ai pu afficher une variable que je modifie en appuyant sur un nouveau bouton avec l'aide d'un while !

  :dance2:

Je ne sais ce que l'on va garder , mais bon ça fait du bien ! . 

#include <AccelStepper.h>
AccelStepper stepper (1, 9, 8);
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int PinBoutonInit = A0; //Bouton qui déplacera le chariot vers la buté à 30 cm
const int PinContactButé = A1;// Contact qui stope le chariot à 30 cm
const int PinBoutonReglageDistanceCm = A2;//Bouton de reglage distance en Cm

void ReglageAffichageDistance () {
float NouvelleDistance = 30.1;
  while (digitalRead(PinBoutonReglageDistanceCm ) == 0) {
     NouvelleDistance = NouvelleDistance +1 ;
     delay(1000);
     
    Serial.println (NouvelleDistance );
  }
}


void  AfficherLaDistance  (float Distance) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (  " Butée " );
  lcd.setCursor(7, 0);
  lcd.print (  Distance  );
  lcd.setCursor(13, 0);
  lcd.print (  " cm "   );
}



void  AfficherInitTerminée () {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (" Initialisation  "  );
  lcd.setCursor(0, 1 );
  lcd.print (" terminée "  );
  Serial.println ("Initialisation terminée " );
}

void  AfficherInitEnCours () {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (" Initialisation  "  );
  lcd.setCursor(0, 1 );
  lcd.print (" en cours "  );
  Serial.println (" Initialisation en cours "  );

}
void initMoteur () {
  if (digitalRead(PinBoutonInit) == 0) {
    AfficherInitEnCours ();
    stepper.setSpeed(3900);

    while (digitalRead(PinContactButé) == 1) {
      stepper.runSpeed();
      // on attends la buté
    }
    stepper.stop(); // On remet à 0 les consignes de vitesse ...
    float Distance = 30.0;

    AfficherInitTerminée ();
    delay(3000);
    AfficherLaDistance(Distance) ;
    
  }
}
void setup() {

  Serial.begin(9600);
  pinMode(A0, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  pinMode(A1, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  pinMode(A2, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  stepper.setMaxSpeed(4000);
  lcd.begin(16, 2);
  lcd.print("START PRESS INIT");
}

void loop() {
  initMoteur ();
 ReglageAffichageDistance ();
}


#88 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 175 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 01 mai 2020 - 05:11

1) Premier truc, on va chercher dès maintenant à retirer la fonction delay et la remplacer par autre chose. 

=> La fonction delay est une fonction " bloquante " et souvent on veut quand même faire des trucs pendant qu'on attend ( exemple afficher trois point qui se déplace sur l'écran pour montrer que même si ça n'a pas l'aire de bouger le programme fait bien quelque chose ) 

 

Je t'invite à lire la discussion sur l'arrosage du bonsai : toutes les explications qui sont faites dans ce code sont aussi valable pour toi, et dans la page 3 tu verras notamment l'usage d'une fonction " attendre " non bloquante qui va remplacer l'usage de ton delay =)  Pour l'instant ça ne changera rien dans l'exécution de ton programme mais c'est une bonne habitude à prendre dès maintenant. 

Donc je te laisse faire la fonction qui permet d'attendre des millisecondes ;)  et que tu utiliseras dans ta fonction.

2) Ensuite j'avais spécifiquement demandé que la fonction retourne le résultat. 
Ok tu as retourné le resultat sur l'affichage ^^ C'est une façon de faire :P Mais on va aussi retourner le résultat par la fonction tant qu'à faire ! =) De sorte à pouvoir utiliser le résultat ailleurs dans notre programme. 

Pour cela il faut changer le type de ta fonction en float au lieu de void
float ReglageAffichageDistance ()
( void c'est quand on retourne rien du tout, float c'est quand on retourne un float etc ...)

 

et à la fin de ta fonction tu feras : 

return NouvelleDistance;

 

C'est parti ! =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#89 cook

cook

    Membre

  • Membres
  • 120 messages

Posté 02 mai 2020 - 06:03

Je suis coincé dans ma fonction float ReglageAffichageDistance () { .  Ou peut être cela ne peut être différent ? Je vous explique: 

 

Quand j'appuis sur mon bouton  PinBoutonReglageDistanceCm, ma variable nouvelle distance s’incrémente bien , nickel . 

Mais si je lâche le bouton et que je rappuis je repart à zéro . Vu le code je le comprends très bien , mais es ce que je peux le changer ? chui pas arriver .

 

De même que si je rajoute "return NouvelleDistance;" ma variable ne s'incrémente plus .C'est normal aussi . Alors j'aurai du commencer par vous demander , mais à quoi elle va servir cette variable return ? En fait j'était trop loin pour me poser cette question en sachant le problème que  millis () pouvais me poser dans un  premier temps .

 

Voila . J'ai bien d'autre question toujours dans cette fonction, comme, comment on fait pour créer une boucle de 30.0 à 290 cm par exemple ? Par exemple ,  si je dépasse 290.0 comment repasser à 30.0 . Eh bien d'autre question aussi !

 

Toute aide sera la bienvenue . Merci

// essais reglage nouvelle distance
#include <AccelStepper.h>
AccelStepper stepper (1, 9, 8);
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int PinBoutonInit = A0; //Bouton qui déplacera le chariot vers la buté à 30 cm
const int PinContactButé = A1;// Contact qui stope le chariot à 30 cm
const int PinBoutonReglageDistanceCm = A2;//Bouton de reglage distance en Cm



float ReglageAffichageDistance () {

   float NouvelleDistance = 0;
  while(digitalRead(PinBoutonReglageDistanceCm )== 0){ // J'appuis sur réglage des cm
    
    NouvelleDistance = NouvelleDistance + 1 ;   // Le compteur s'incrémente de 1 cm
    long InstantouJappuis = millis();           // Variable qui enregistre le Déroulement du temps qui passe depuis l'appuis
    while (millis() - InstantouJappuis < 600) { // décompte de 600ms en cours
      
    }
   Serial.println(NouvelleDistance);
   
   //return NouvelleDistance;
  }
}

void  AfficherLaDistance  (float Distance) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (  " Butée " );
  lcd.setCursor(7, 0);
  lcd.print (  Distance  );
  lcd.setCursor(13, 0);
  lcd.print (  " cm "   );
}



void  AfficherInitTerminée () {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (" Initialisation  "  );
  lcd.setCursor(0, 1 );
  lcd.print (" terminée "  );
  Serial.println ("Initialisation terminée " );
}

void  AfficherInitEnCours () {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (" Initialisation  "  );
  lcd.setCursor(0, 1 );
  lcd.print (" en cours "  );
  Serial.println (" Initialisation en cours "  );

}
void initMoteur () {
  if (digitalRead(PinBoutonInit) == 0) {
    AfficherInitEnCours ();
    stepper.setSpeed(3900);

    while (digitalRead(PinContactButé) == 1) {
      stepper.runSpeed();
      // on attends la buté
    }
    stepper.stop(); // On remet à 0 les consignes de vitesse ...
    float Distance = 30.0;

    AfficherInitTerminée ();
    delay(3000);
    AfficherLaDistance(Distance) ;

  }
}
void setup() {

  Serial.begin(9600);
  pinMode(A0, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  pinMode(A1, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  pinMode(A2, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  stepper.setMaxSpeed(4000);
  lcd.begin(16, 2);
  lcd.print("START PRESS INIT");
}

void loop() {
  initMoteur ();
  ReglageAffichageDistance ();
}


#90 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 175 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 02 mai 2020 - 07:36

Oula, beaucoup de questions, ^^

Avoir beaucoup de question c'est pas un problème mais il faut chercher à les résoudre une par une. 

 

Donc premièrement on fait d'abord un truc qui marche tel qu'on l'avait dit et ensuite on améliore d'accord ? :P 

car c'est deux points suivant :

 

 

 

Mais si je lâche le bouton et que je rappuis je repart à zéro . Vu le code je le comprends très bien , mais es ce que je peux le changer ? chui pas arriver .

 

J'ai bien d'autre question toujours dans cette fonction, comme, comment on fait pour créer une boucle de 30.0 à 290 cm par exemple ? Par exemple ,  si je dépasse 290.0 comment repasser à 30.0 . Eh bien d'autre question aussi !

 

 

J'ai bien prévu de te les faire résoudre juste après ;)

Donc minute papillon on y arrive =)

 

première chose : le " return " . Il est très important de regarder où on le met :

 

Peux tu m'expliquer la différence entre : 

Ton précédent code : 

float ReglageAffichageDistance () {

   float NouvelleDistance = 0;
  while(digitalRead(PinBoutonReglageDistanceCm )== 0){ // J'appuis sur réglage des cm
    
    NouvelleDistance = NouvelleDistance + 1 ;   // Le compteur s'incrémente de 1 cm
    long InstantouJappuis = millis();           // Variable qui enregistre le temps qui passe depuis l'appuis
    while (millis() - InstantouJappuis < 600) { // décompte de 600ms en cours
      
    }
   Serial.println(NouvelleDistance);
   
   return NouvelleDistance;
  }
}

Ma micro modification : 


 

float ReglageAffichageDistance () {

   float NouvelleDistance = 0;
  while(digitalRead(PinBoutonReglageDistanceCm )== 0){ // J'appuis sur réglage des cm
    
    NouvelleDistance = NouvelleDistance + 1 ;   // Le compteur s'incrémente de 1 cm
    long InstantouJappuis = millis();           // Variable qui enregistre le temps qui passe depuis l'appuis
    while (millis() - InstantouJappuis < 600) { // décompte de 600ms en cours
      
    }
   Serial.println(NouvelleDistance);
   
  }

  return NouvelleDistance;
}

Ensuite est ce que le code ne serait pas plus lisible ainsi : 

 

float ReglageAffichageDistance () {

   float NouvelleDistance = 0;
  while(digitalRead(PinBoutonReglageDistanceCm )== 0){ // J'appuis sur réglage des cm
    
    NouvelleDistance = NouvelleDistance + 1 ;   // Le compteur s'incrémente de 1 cm
    attendreMs(600);                            // on attend 600 ms sans utiliser la fonction delay()
    Serial.println(NouvelleDistance);
   
  }

  return NouvelleDistance;       // quand on a fini d'incrémenter on retourne la valeur au reste du programme
}

Du coup fais moi la petite fonction attendreMs comme j'ai demandé plus tôt : une vraie petite fonction ;) en plus ça te demandera de savoir passer un paramètre dans une fonction ce dont on aura besoin pour les prochaines améliorations ;) 

Bref essaye de suivre ce que je te demande et fais moi confiance quant au étapes que je te suggères ;) ( Mais garde l'esprit critique pour autant ;) : Il y a toujours plusieurs méthodes pour faire quelque choses => moi je ne fais que t'en proposer une  parmi d'autre mais qui je sais va marcher ;) )


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#91 cook

cook

    Membre

  • Membres
  • 120 messages

Posté 03 mai 2020 - 05:12

A chaud là , le codage me demande vraiment un effort de concentration comme pas possible  .
Faire des fonctions c'est pas vraiment mis en avant dans ce que je peux lire pour apprendre à coder .
. Dans tous les cas , je fais beaucoup d'essais à cotés pour comprendre . Remplacer une led par un moteur pas a pas , ça marche pas vraiment  . Il faut une méthode .  
Avec les fonctions , le moteur tourne rond . 
 

Avec Millis() , mettre du  temps dans une variable , c'est pas très naturel . Pour imager "bonjour" .

Pour l'accolade , eh bien je suis passé à coté ! Je pourrai dire qu'elle représente  des boucles dans une boucle .

Il faut bien regarder le moment ou on veux en sortir . Ou quelle information on veut retenir .

Il est balez le gars qui à créer le code de fonctionnement Arduino !

 

Sans quoi , voila j'ai modifier . Je suis long , mais il y a tellement de paramètresssss .

J'ai rajouté le bouton pour les millimètre au cas ou . Il marche .

A demain

// essais reglage nouvelle distance
#include <AccelStepper.h>
AccelStepper stepper (1, 9, 8);
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int PinBoutonInit = A0; //Bouton qui déplacera le chariot vers la buté à 30 cm
const int PinContactButé = A1;// Contact qui stope le chariot à 30 cm
const int PinBoutonReglageDistanceCm = A2;//Bouton de reglage distance en Cm
const int PinBoutonReglageDistanceMm = A3;//Bouton de reglage distance en Mm



float ReglageAffichageDistance () {

  float NouvelleDistance = 0;
  while (digitalRead(PinBoutonReglageDistanceCm ) == 0) { // J'appuis sur réglage des cm

    NouvelleDistance = NouvelleDistance + 1 ;   // Le compteur s'incrémente de 1 cm
    attendreMs(500);                            // on attend 500 ms sans utiliser la fonction delay()
    Serial.println(NouvelleDistance);
  }
  return NouvelleDistance;       // quand on a fini d'incrémenter on retourne la valeur au reste du programme
}


void attendreMs (unsigned int attente) {
  unsigned long InstantouJappuis = millis();           // Variable qui enregistre le déroulement du temps qui passe depuis l'appuis
  while (millis() - InstantouJappuis <  attente ) { // décompte de 500ms en cours
  }
}



void  AfficherLaDistance  (float Distance) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (  " Butée " );
  lcd.setCursor(7, 0);
  lcd.print (  Distance  );
  lcd.setCursor(13, 0);
  lcd.print (  " cm "   );
}



void  AfficherInitTerminée () {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (" Initialisation  "  );
  lcd.setCursor(0, 1 );
  lcd.print (" terminée "  );
  Serial.println ("Initialisation terminée " );
}

void  AfficherInitEnCours () {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (" Initialisation  "  );
  lcd.setCursor(0, 1 );
  lcd.print (" en cours "  );
  Serial.println (" Initialisation en cours "  );

}
void initMoteur () {
  if (digitalRead(PinBoutonInit) == 0) {
    AfficherInitEnCours ();
    stepper.setSpeed(3900);

    while (digitalRead(PinContactButé) == 1) {
      stepper.runSpeed();
      // on attends la buté
    }
    stepper.stop(); // On remet à 0 les consignes de vitesse ...
    float Distance = 30.0;

    AfficherInitTerminée ();
    delay(3000);
    AfficherLaDistance(Distance) ;

  }
}
void setup() {

  Serial.begin(9600);
  pinMode(A0, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  pinMode(A1, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  pinMode(A2, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  stepper.setMaxSpeed(4000);
  lcd.begin(16, 2);
  lcd.print("START PRESS INIT");
}

void loop() {
  initMoteur ();
  ReglageAffichageDistance ();
}


#92 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 175 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 03 mai 2020 - 11:33

 

A chaud là , le codage me demande vraiment un effort de concentration comme pas possible  .
Faire des fonctions c'est pas vraiment mis en avant dans ce que je peux lire pour apprendre à coder .
 

 

 

Peut être que cet article peut t'intéresser : Astuces pour apprendre à programmer

 

Peut être que cela te convaincra d'avantage sur l'intérêt de faire des fonctions ... 

Car programmer c'est réussir à identifier et décomposant un problème en autant de sous problème que nécessaire de manière récursive jusqu'à obtenir des problèmes élémentaires que tu peux résoudre et d"assembler ensemble les résolutions de ces sous problèmes pour résoudre le problème final... 

Dès que tu as compris ça et que tu as le bon état d'esprit tu fuses ! =)

 

Ensuite pour revenir sur le code que tu as fais c'est déjà très bien. Par contre je te recommande de lire ce petit tuto : https://www.robot-ma...variables-en-c/

 

Pour le reste avant de faire le bouton mm et de juste copier coller le code on va améliorer ta fonction actuelle pour résoudre : 

 

 

 

  • Quand j'appuis sur mon bouton  PinBoutonReglageDistanceCm, ma variable nouvelle distance s’incrémente bien , nickel . Mais si je lâche le bouton et que je rappuis je repart à zéro . Vu le code je le comprends très bien , mais es ce que je peux le changer ? chui pas arriver .

 

 

  • comment on fait pour créer une boucle de 30.0 à 290 cm par exemple ? Par exemple ,  si je dépasse 290.0 comment repasser à 30.0 . 

 

 

 

 

Pour le premier point, maintenant que tu sais passer une variable en entré dans une fonction, tu vas passer un float en entré de ta fonction.
que tu peux appeler " startValue " par exemple =) 
 

float ReglageAffichageDistance (float startValue) {

  float NouvelleDistance = startValue;
  //...
}

ensuite pour le deuxième point dans à l'intérieur de while tu peux juste faire

NouvelleDistance = NouvelleDistance + 1 ; 
if (NouvelleDistance > 270) {
  NouvelleDistance = 30;
} 

fais les petites modifications et dit moi si tout fonctionne bien pour toi ;) 

 

 

 



 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#93 cook

cook

    Membre

  • Membres
  • 120 messages

Posté 06 mai 2020 - 08:19

Bonsoir Mike ,

Pour le type de variable c'est pas l'heure pour moi . Au même titre que gérer le pull up (inverser les 1 et 0) .

Il me faut choisir mes priorités . Je le ferai à l'usage . 

 

j'ai commencé par le deuxième point parce que je l'ai compris instantanément en le lisant . D'ailleurs bravo . J'ai modifier aussi float NouvelleDistance = 30 pour ne pas repartir à 0 à chaque fois .

 

Pour le premier point , je comprends pas du tout la manœuvre .

StartValue , il y a une erreur ? .Dans tous les cas ça bogue dans le loops . Je me suis dit que peut être  dans le code pour arrosage bonsaï , je vais trouver la raison  .

Si je veux rajouter float ReglageAffichageDistance (float startValue) { même sans en connaitre la raison ,il faut que je déclare StartValue dans le loops comme dans arrosage bonsaï !

Mais pour en revenir au premier point , c'est quoi le but de ce changement avec StartValue ? A cotés de quoi je passe ? c'est quoi le truc avec cette ligne qui me fait repartir à 30 et qu'il faut pourtant changer ?

#include <AccelStepper.h>
AccelStepper stepper (1, 9, 8);
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int PinBoutonInit = A0; //Bouton qui déplacera le chariot vers la buté à 30 cm
const int PinContactButé = A1;// Contact qui stope le chariot à 30 cm
const int PinBoutonReglageDistanceCm = A2;//Bouton de reglage distance en Cm
const int PinBoutonReglageDistanceMm = A3;//Bouton de reglage distance en Mm


float ReglageAffichageDistance () {

  float NouvelleDistance = 30;

  while (digitalRead(PinBoutonReglageDistanceCm ) == 0) { // J'appuis sur réglage des cm

    NouvelleDistance = NouvelleDistance + 1 ;   // Le compteur s'incrémente de 1 cm
    if (NouvelleDistance > 290) {
  NouvelleDistance = 30;
} 
    attendreMs(500);                            // on attend 500 ms sans utiliser la fonction delay()
    Serial.println(NouvelleDistance);
  }
  return NouvelleDistance;       // quand on a fini d'incrémenter on retourne la valeur au reste du programme
}


void attendreMs (unsigned int attente) {
  unsigned long InstantouJappuis = millis();           // Variable qui enregistre le déroulement du temps qui passe depuis l'appuis
  while (millis() - InstantouJappuis <  attente ) { // décompte de 500ms en cours
  }
}



void  AfficherLaDistance  (float Distance) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (  " Butée " );
  lcd.setCursor(7, 0);
  lcd.print (  Distance  );
  lcd.setCursor(13, 0);
  lcd.print (  " cm "   );
}



void  AfficherInitTerminée () {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (" Initialisation  "  );
  lcd.setCursor(0, 1 );
  lcd.print (" terminée "  );
  Serial.println ("Initialisation terminée " );
}

void  AfficherInitEnCours () {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (" Initialisation  "  );
  lcd.setCursor(0, 1 );
  lcd.print (" en cours "  );
  Serial.println (" Initialisation en cours "  );

}
void initMoteur () {
  if (digitalRead(PinBoutonInit) == 0) {
    AfficherInitEnCours ();
    stepper.setSpeed(3900);

    while (digitalRead(PinContactButé) == 1) {
      stepper.runSpeed();
      // on attends la buté
    }
    stepper.stop(); // On remet à 0 les consignes de vitesse ...
    float Distance = 30.0;

    AfficherInitTerminée ();
    delay(3000);
    AfficherLaDistance(Distance) ;

  }
}
void setup() {

  Serial.begin(9600);
  pinMode(A0, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  pinMode(A1, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  pinMode(A2, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  stepper.setMaxSpeed(4000);
  lcd.begin(16, 2);
  lcd.print("START PRESS INIT");
}

void loop() {
  initMoteur ();
  ReglageAffichageDistance ();
}


#94 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 175 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 06 mai 2020 - 09:50

#include <AccelStepper.h>
AccelStepper stepper (1, 9, 8);
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
const int PinBoutonInit = A0; //Bouton qui déplacera le chariot vers la buté à 30 cm
const int PinContactBute = A1;// Contact qui stope le chariot à 30 cm
const int PinBoutonReglageDistanceCm = A2;//Bouton de reglage distance en Cm
const int PinBoutonReglageDistanceMm = A3;//Bouton de reglage distance en Mm
 
 
float ReglageAffichageDistance (float startValue) {
 
  float NouvelleDistance = startValue;
 
  while (digitalRead(PinBoutonReglageDistanceCm ) == 0) { // J'appuis sur réglage des cm
 
    NouvelleDistance = NouvelleDistance + 1 ;   // Le compteur s'incrémente de 1 cm
    if (NouvelleDistance > 290) {
  NouvelleDistance = 30;
} 
    attendreMs(50);                            // on attend 500 ms sans utiliser la fonction delay()
    Serial.println(NouvelleDistance);
  }
  return NouvelleDistance;       // quand on a fini d'incrémenter on retourne la valeur au reste du programme
}
 
 
void attendreMs (unsigned int attente) {
  unsigned long InstantouJappuis = millis();           // Variable qui enregistre le déroulement du temps qui passe depuis l'appuis
  while (millis() - InstantouJappuis <  attente ) { // décompte de 500ms en cours
  }
}
 
 
 
void  AfficherLaDistance  (float Distance) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (  " Butée " );
  lcd.setCursor(7, 0);
  lcd.print (  Distance  );
  lcd.setCursor(13, 0);
  lcd.print (  " cm "   );
}
 
 
 
void  AfficherInitTermine () {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (" Initialisation  "  );
  lcd.setCursor(0, 1 );
  lcd.print (" terminée "  );
  Serial.println ("Initialisation terminée " );
}
 
void  AfficherInitEnCours () {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print (" Initialisation  "  );
  lcd.setCursor(0, 1 );
  lcd.print (" en cours "  );
  Serial.println (" Initialisation en cours "  );
 
}
void initMoteur () {
  if (digitalRead(PinBoutonInit) == 0) {
    AfficherInitEnCours ();
    stepper.setSpeed(3900);
 
    while (digitalRead(PinContactBute) == 1) {
      stepper.runSpeed();
      // on attends la buté
    }
    stepper.stop(); // On remet à 0 les consignes de vitesse ...
    float Distance = 30.0;
 
    AfficherInitTermine ();
    delay(3000);
    AfficherLaDistance(Distance) ;
 
  }
}
void setup() {
 
  Serial.begin(9600);
  pinMode(A0, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  pinMode(A1, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  pinMode(A2, INPUT_PULLUP); //  pour le mettre en INPUT_PULLUP
  stepper.setMaxSpeed(4000);
  lcd.begin(16, 2);
  lcd.print("START PRESS INIT");
}
 
void loop() {
  static float maDistance = 30; // Variable qui va stocker la distance de consigne
  initMoteur ();  // Repositionne le moteur si jamais on appuis sur le bouton
  maDistance = ReglageAffichageDistance (maDistance); // Stock le résultat de la distance modifiée
  AfficherLaDistance(maDistance);  // on met à jour l'affichage
 }

Tu peux essayer ça =) 

Et ensuite je te laisse me reposer des questions ( avec des numéros  :P Comme ça je pourrais répondre à chaque question spécifiquement ! =) 

 

Le but c'est de chercher à éviter d'avoir des variables globales tant qu'on en a pas besoin. 
éviter les variables permet de faire du code propre


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#95 cook

cook

    Membre

  • Membres
  • 120 messages

Posté 06 mai 2020 - 10:05

J'avais pas vu la réponse .



#96 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 175 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 06 mai 2020 - 10:12

J'ai pas compris ton dernier message ...  

Tu as testé le dernier code que j'ai envoyé ? 
ça marche bien ?  


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#97 cook

cook

    Membre

  • Membres
  • 120 messages

Posté 07 mai 2020 - 10:35

Mon dernier message est une erreur . Je ne peu pas l’effacer .

 

  J'ai fais les essais du nouveau code et dès le téléversement, l'écran affiche "Butée" suivis de clignotement anarchique .

Il y a trop de de chose qui me mélange quand je relie ce code pour comprendre son fonctionnement .

 

a) Je peux supposé qu'il y a conflit avec l'affichage de l'écran entre le setup  et l'affichage de la variable "distance "( Pour info, le code d'affichage de l'ecran écrit dans le setup est devenu inutile pour moi maintenant) .

 

bb) B) Une chose m'étonne dans se code c'est les différentes appellations de la variable Distance ou maDistance ou NouvelleDistance

 

c) Comment vous avez fait ? . Lors de l'appuis et de relâchement du bouton réglage des centimètres du compteur , il ne repasse plus par zéro ! Je n'arrive pas à comprendre . Faut que je trouve 

 

En tous les cas , y'a du bon . C'est cool 



#98 Sandro

Sandro

    Membre chevronné

  • Modérateur
  • PipPipPipPip
  • 1 321 messages
  • Gender:Male

Posté 07 mai 2020 - 11:44

J'ai fais les essais du nouveau code et dès le téléversement, l'écran affiche "Butée" suivis de clignotement anarchique .

Il y a trop de de chose qui me mélange quand je relie ce code pour comprendre son fonctionnement .

 

a) Je peux supposé qu'il y a conflit avec l'affichage de l'écran entre le setup  et l'affichage de la variable "distance "( Pour info, le code d'affichage de l'ecran écrit dans le setup est devenu inutile pour moi maintenant) .

Non, le setup n'y est très probablement pour rien (il n'est exécuté qu'une fois, donc ne peut pas "contredire" ce qui se fait dans le loop.

J'ai jamais utilisé d'afficheur LCD (j'en ai jamais eu l'utilité), mais il est possible qu'il faille un peu de temps pour rafraichir l'affichage : vu que tu rafraichi l'affichage à chaque tour du loop, et qu'un tour de loop vas très vite, bah ça clignote vite.

Pour vérifier si c'est ça, deux petits tests :

- si tu appuis sur le bouton d'incrémentation des cm, ça continue à clignoter?

- si tu rajoute un delay(5000) à la fin du loop, est-ce que ça reste affiché pendant 5 secondes avant de disparaitre pour un très court instant (<0.1s)?

Si la réponse aux deux questions est oui, alors c'est probablement ça.

 

 

B)

La raison est que ce n'est pas UNE variable unique, mais TROIS variables DISTINCTES : simplement, on se débrouille pour copier les valeurs de l'une vers l'autre.

 

c)

void loop() {
  static float maDistance = 30; // Variable qui va stocker la distance de consigne
  initMoteur ();  // Repositionne le moteur si jamais on appuis sur le bouton
  maDistance = ReglageAffichageDistance (maDistance); // Stock le résultat de la distance modifiée
  AfficherLaDistance(maDistance);  // on met à jour l'affichage
 }

1) le "static" devant "float maDistance = 30;" : ça fait qu'au premier tour du loop, on donne la valeur 30.0 à maDistance, mais aux tours suivant, maDistance garde sa valeur

2) "ReglageAffichageDistance (maDistance);" : on passe la valeur de maDistance à la fonction ReglageAffichageDistance  (ie on la copie dans startValue) : de cette manière, on peut reprendre le réglage là où on en était

3) "maDistance = ReglageAffichageDistance (maDistance);" : on récupère le résultat de ReglageAffichageDistance (ie la valeur de la variable NouvelleDistance, qu'on renvoi avec return) et on le stocke dans maDistance.

Pour résumer 2 et 3), on actualise la valeur de maDistance, en fonction de son ancienne valeur et des appuis sur les boutons

 


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#99 cook

cook

    Membre

  • Membres
  • 120 messages

Posté 08 mai 2020 - 12:32

Bonsoir Sandro . Merci pour ta réponse .

Je vais commencer par la question si dessous 

 

 

  J'ai fais les essais du nouveau code et dès le téléversement, l'écran affiche "Butée" suivis de clignotement anarchique .

Suivant  tes conseils de vérification 

 

Pour vérifier si c'est ça, deux petits tests :

- si tu appuis sur le bouton d'incrémentation des cm, ça continue à clignoter?

 

Effectivement , quand j'appuis ça ne clignote plus . Et même mieux , tous s'affiche en entier sur l'écran comme le code l'indique .

 

- si tu rajoute un delay(5000) à la fin du loop, est-ce que ça reste affiché pendant 5 secondes avant de disparaitre pour un très court instant (<0.1s)?

 

J'ai rajouté le delay en question . Et là tous s'affiche nickel mais le bouton marche plus très bien . P¨robablement à cause du long  delay .

 

Donc j'ai diminué le délay à 40 . Et la çà marche . Mais , mais il y a un truc bizarre.

Si j'appuis un coup et que je lâche le bouton ,  l'écran s'incrémente bien de 1 cm .

Maintenant si je reste appuyé je ne vois pas l'écran s'incrémenté tout de suite . Il faut que je le lâche le bouton pour voir apparaître le changement de distance .

Ce qui n'est pas le cas pour le moniteur série qui lui marche normalement .

C'est un peu tard , je vous relirai demain soir .

Merci pour le coup de main .



#100 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 10 175 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 08 mai 2020 - 01:30

Mon dernier message est une erreur . Je ne peu pas l’effacer .

 

  J'ai fais les essais du nouveau code et dès le téléversement, l'écran affiche "Butée" suivis de clignotement anarchique .

Il y a trop de de chose qui me mélange quand je relie ce code pour comprendre son fonctionnement .

 

a) Je peux supposé qu'il y a conflit avec l'affichage de l'écran entre le setup  et l'affichage de la variable "distance "( Pour info, le code d'affichage de l'ecran écrit dans le setup est devenu inutile pour moi maintenant) .

 

b ) Une chose m'étonne dans se code c'est les différentes appellations de la variable Distance ou maDistance ou NouvelleDistance

 

c) Comment vous avez fait ? . Lors de l'appuis et de relâchement du bouton réglage des centimètres du compteur , il ne repasse plus par zéro ! Je n'arrive pas à comprendre . Faut que je trouve 

 

En tous les cas , y'a du bon . C'est cool 

 

 

Ok je suis peut être allé un peu vite en te fournissant directement un code modifié à tester, mais c'est une façon comme une autre d'apprendre =). 


Mais du coup on va chercher à répondre aux différentes questions : 

Problème 1 : 
Le clignotement bizarre avec " Buté " . 
Comme l'a mentionné sandro oui c'est lié à l'affichage, 
J'avais hésité a commenter cette ligne mais je me suis dit que ça serait bien de te laisser expérimenter un peu =) . 

Le système affiche en boucle ( du moins essaye ) la valeur dans le loop sur ton écran. 

Un truc très simple pour éviter le problème sans mettre de " delais d'attente " c'est de chercher à afficher quelque chose que si il y a eu un changement 

Exemple de loop : 


 

void loop() {
  static float maDistance = 30; // Variable qui va stocker la distance de consigne
 
  initMoteur ();  // Repositionne le moteur si jamais on appuis sur le bouton

  float oldDistance = maDistance;                     // variable pour tester si on change maDistance
  maDistance = ReglageAffichageDistance (maDistance); // Stock le résultat de la distance modifiée
  if(oldDistance == maDistance)     // Si on a un changement
   AfficherLaDistance(maDistance);  // on met à jour l'affichage
 }

Pour b ) et c) je pense que les explications de Sandro son bien suffisantes mais si tu veux plus d'info n'hésite pas à poser des questions plus précises ! =)

Je te laisse tester le loop modifié que je viens de poster et qui devrais corriger le problème d'affichage mais que ne change rien à cette remarque :

 

 

 

Si j'appuis un coup et que je lâche le bouton ,  l'écran s'incrémente bien de 1 cm .

Maintenant si je reste appuyé je ne vois pas l'écran s'incrémenté tout de suite . Il faut que je le lâche le bouton pour voir apparaître le changement de distance .

Ce qui n'est pas le cas pour le moniteur série qui lui marche normalement .

 

 

En effet le code fait exactement ce qui a été codé. 

Si tu regardes bien le loop : 
on met à jour la variable "maDistance " avec la fonction bloquante : ReglageAffichageDistance (maDistance); 

Puis on l'affiche . 

 

Sauf que la fonction de mise à jour est bloquante et attend que tu relâches pour se terminer ... 

Du coup, 

Comment modifier ce code pour que l'affichage se mette à jour en continu ? 
Où est ce qu'on doit déplacer l'exécution de notre fonction  " afficherLaDistance "  pour que l'affichage se mette à jour alors que je suis toujours en train d'appuyer sur le bouton? 

 

Modifie le code et test pour vérifier ;)



 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 





0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users