Pilotage via moniteur serie

Bonjour à tous,

Je suis débutant en Arduino, j'utilise un programme récupéré sur net pour piloter un simulateur de course (jeu vidéo). J'ai déjà expérimenté la chaine jeu de course - software d'extraction des data - Arduino sur une maquette LEGO avec servomoteur tout fonctionne bien. Actuellement je suis en phase de tester le pilotage d'un motoreducteur type moteur d'essuie-glace auto pour valider la partie carte moteur (Monster motoshield) donc j'envoie des données à l'Arduino via le moniteur serie sur la position souhaité du moteur et ce en hexadécimal, ça fonctionne bien seulement je voudrais pouvoir envoyer une série de positions successives pour tester le moteur sur des cycles plus long comment puis-je m'y prendre ? Est ce possible via le moniteur ou dois-je intégrer cela dans le code de l'Arduino ?

Merci d'avance.

Salut

Il te suffit d'envoyer plusieurs positions depuis le terminal en les séparant par des espaces.
L'arduino lit les caractères un à un, les stocke dans une chaîne en incrémentant un index.
Quand un espace ou une fin de ligne est détecté, tu convertis la chaîne en un nombre entier.
Un bout de code déjà utilisé ci-dessous :

void loop() {
  static char str[10];
  static int i;
  int n;

  if (Serial.available() > 0) {
    int in = Serial.read();
    if (in == ' ' || in == '\n') {
      str[i] = 0;
      sscanf(str, "%x", &n);
      Serial.println(n, HEX);
      i = 0;
      // remplace la ligne suivante par ton traitement
      delay(500);
    }
    else {
      str[i++] = in;
    }
  }
}

Ce code ne marche que si tu actives l'option "Nouvelle ligne" en bas du terminal ARDUINO.

@+

Merci pour ta réponse.

Si je comprend bien, j'implémente dans mon code les lignes amont et aval que tu m'a données et je pourrais ensuite envoyer une série de commande de position successives séparées par un espace entre elles.

Est ce que je pourrais implémenter dans le code un cycle de positions pour faire un test sur 5mn par exemple ?

Merci encore pour ton aide.

Le code fourni va exécuter le commandes moteurs reçues sur la ligne série, l'une après l'autre, peu importe leur nombre, dans la limite du buffer de réception du driver série, que je ne connais pas.
Ensuite, quel temps cela va t-il prendre ?
Tout dépend de la vitesse de déplacement du moteur.

@+

J'ai testé hier en rajoutant ton code comme expliqué mais au moment du transfert vers l'Arduino il me remonte un pb dans celui ci. Je te mets une capture d'écran du message et je te joins le code que j'utilise en attachement car trop de ligne pour l'insérer ici.

Un grand merci pour ton aide.

Arduino code 04042018.txt (9.64 KB)

Chez moi ton code compile parfaitement bien.
J'aurais préféré une copie texte des messages d'erreur plutôt qu'une copie d'écran.

@+

Ok je vais te sortir une copie texte du message d'erreur.

Par contre le code que je t'ai fourni n'intègre pas l'ajout de ton code, c'est le code original sans la modif.

Dis moi si tu ajoutes ton morceau de code si ça compile chez toi ?

Merci.

Fournis le code complet qui ne compile pas, ce sera plus simple.

@+

Voici les messages d'erreur détaillées et le code défaillant.

Erreur_01.txt (4.59 KB)

Erreur detaillee_01.txt (541 Bytes)

Arduino code 08052018_Commandes successives.txt (9.98 KB)

Il ne peut y avoir deux fonctions loop().
Il va falloir faire un choix.
Et j'ai l'impression que la fin de la première fonction loop() se trouve à la fin du fichier.

@+

Comment je dois m'y prendre ? Je supprime quelle fonction ?

Je comprends mieux la phrase :

Si je comprend bien, j'implémente dans mon code les lignes amont et aval que tu m'a données et je pourrais ensuite envoyer une série de commande de position successives séparées par un espace entre elles.

Tu as inséré ton code complet dans la fonction loop() que j'avais fourni.
Cela ne marche pas comme cela. Je ne pensais pas que tu étais débutant à ce point.

D'après ce que je vois, ton code d'origine est déjà capable d'exécuter plusieurs commandes l'une derrière l'autre.
Il suffit d'entrer plusieurs commandes séparées par des espaces, comme cela :
R11 R12 R13 R45 L22 L77

@+

Oui je suis un débutant de chez débutant, je sais modifier qq valeurs dans le code mais ça ne va pas plus loin.

J'ai essayé de passer des commande successives mais dans ce cas là aucune d'entre elle n'est exécutée.

Il va falloir ajouter des traces vers le moniteur série pour y voir plus clair.

Ajoutes des traces comme ceci :

Serial.println("un blabla quelconque");

pour savoir comment se passe le déroulement du code.

@+

Ok. Je te tiens au jus.