Go Down

Topic: Problème de compteur (Read 1 time) previous topic - next topic

dfgh

je viens de reprendre le prog sur le forum ( celui que je t'ai posté plus haut)

je l'ai téléversé dans un nano et j'ai ouvert le moniteur.
j'ai tapé en ligne de cde du moniteur:
MM,10100,1 puis "return"

et oh miracle le prg fonctionne et accepte les chiffres supérieurs à 10000

ce que n'accepte pas ton prg c'est de lire un nouvel ordre pendant qu'il exécute les 10100 pas sur ton moteur gauche

ton prg exécute dabord les pas ( distance) demandés pour le moteur gauche puis il passe au moteur droit puis il va voir s'il a reçu un nouvel ordre.

donc pas possible de stopper un mouvement en cours d'exécution.

ne me dit pas que le prg que je t'ai posté ne fonctionne pas.

je voulais en fait t'amener à voir que tu as utilisé:

"stepcounter2 = stepcounter2++;"

et pas moi...

Yab974

Je suis désolé si je t'ai offensé mais je suis entièrement d'accord avec toi que ton programme fonctionne.
Pourtant j'avais essayé de faire une sorte de top afin d'éviter d'envoyer des informations par la liaison série pendant que le programme se déroule mais je n'avais pas vu mon erreur vraiment bête du stepcounter = stepcounter ++.

j'ai remodifié mon code arduino et processing  et cela fonctionne correctement.
j'ai également rajouté le distance = 0 en fin de boucle pour chaque moteur.

Mais je ne comprends pas trop l'utilité c'est pour être sur que la variable soit nulle lorsque nous allons de nouveau lire la liaison série?

Voici mon code arduino :
Code: [Select]
char OrdreMarche[2]; // variable de stockage des valeurs reçues sur le port Série
int stepcounter1,stepcounter2;
int distance1;
int distance2;
int top = 0;

byte buffer[512];

void setup()   { // debut de la fonction setup()
  pinMode(8, OUTPUT);     
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);     
  pinMode(11, OUTPUT);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  Serial.begin(115200); // initialise connexion série à 115200 bauds
}

void loop(){ // debut de la fonction loop()


  while (Serial.available() > 0 ) { // si un octet en réception
//Serial.readBytes(buffer, longueur);
    Serial.readBytes(OrdreMarche,2);
    distance1 = Serial.parseInt();
    distance2 = Serial.parseInt();

if (Serial.read() == '\n')
    {
      top = 1;
      Serial.println(top);
      if (OrdreMarche[0]== 'M' ) { // si Octet reçu est le 1
        while(stepcounter1 <= distance1)
        {
          digitalWrite(9, HIGH);
          delayMicroseconds(30);         
          digitalWrite(9, LOW);
          delayMicroseconds(30);
          stepcounter1++;
          }
       distance1=0;
      }
      if (OrdreMarche[1]== 'M' ) { // si Octet reçu est le 1
        while(stepcounter2 <= distance2 )
        {
          digitalWrite(11, HIGH);
          delayMicroseconds(30);         
          digitalWrite(11, LOW);
          delayMicroseconds(30);
          stepcounter2++;
          }
       distance2=0;
      }
           
      if (OrdreMarche[0]== 'A' ) { // si octet reçu est le L

        stepcounter1 = 0;
      }
      if (OrdreMarche[1]== 'A' ) { // si octet reçu est le L

        stepcounter2 = 0;
      }
     top = 0;
    }
    Serial.println(top);
   
  }
}


si jamais tu as des remarques elles sont la bienvenu.

Je te remercie beaucoup pour ton aide précieuse.

Bonne journée,
Cordialement,

dfgh


Go Up