Améliorer/Réparer mon programme ?

Bonjour,
Pour mon projet de sciences de l’ingénieur qui est la création d’un bras bionique, je dois faire un programme visant à gérer l’ouverture et la fermeture de la pince (je ne peux pas le tester car je n’ai pas le matériel à disposition chez moi, il semble comporter des erreurs et je pense que il est assez mal optimisé). Or je suis une totale débutante en programmation D:, si une âme charitable pouvait me conseiller où m’aider ce serait super :)).
Merci beaucoup ? c:

L’idée serait que en fonction des contractions musculaires enregistrées par le capteur (analogique) (on considère que c’est contracté à partir d’une valeur de 500), on arrive à ouvrir, fermer, voire mettre en pause l’ouverture et la fermeture de la pince.
Je voudrais que tous les if soient indépendants
Voici le programme :

int sensorPin = A0;
int sensorValue = 0;
int temps = millis();
int tp1 = 0; //temps à la pulsation 1
int tp2 = 0;
int tp3 = 0;
int p = 0;  //pulsations


void setup() {
  Serial.begin(9600);
}
void loop() {
  sensorValue = analogRead(sensorPin);
  delay(3000);// je voudrais que les parties de mon code soient indépendantes (comme des boucles différentes sur scratch) et non que le programme se lise de manière linéaire, es-ce possible ? (si non, mon programme ne fonctionne clairement pas)

  if p = 0; {
  if sensorValue > 500; {
    tp1 = temps;
    p = p + 1;
    Serial.println("pause");// j'ai remplacé les parties du programme d'ouverture, de fermeture et de pause par du texte, car c'est une autre personne de mon groupe qui s'en charge, l'idée serait de ne rien faire ou de mettre en pause si une action est en train d'être effectuée
    }
  }
  if p = 1; {
  delay (500);
    if sensorValue > 500; {
    tp2 = temps;
    p = p + 1
        if tp2 - tp1 < 3000;
    Serial.println("fermerpince");
    }
  }
  if p = 2; {
  delay (500);
    if sensorValue > 500; {
    tp3 = temps;
    p = p + 1
        if tp3 - tp1 < 5000;
    Serial.println("ouvrirpince");
    }
  }
  else ; {
    delay (5000);
    tp1 = 0;
    tp2 = 0;
    tp3 = 0;
    p = 0;
  }
}

Bonjour.
Déjà, la bonne synthaxe:

if p = 0; {   ----> if (p == 0) {
else ; { -----> else {

Et ça serait mieux d'être plus précis concernant les fonctions demandées: à savoir si ça, il se passe ça, sinon ça etc....

hello
tu as des prob de syntaxe
les if s'écrivent : if(xxx==yyy){faire ceci;}

mais c'est tout le prg qu'il faut revoir

si j'ai suivi, tu veux ouvrir ou fermer une pince etpouvoir la laisser ouverte ou fermer.

donc, une contraction meme breve, la pince se ferme.
la pince à fini de se fermer et pas de nouvelle contarction: c'est une pause.
une nouvelle contraction, meme breve, la pince s'ouvre.
la pince à fini de s'ouvrir et reste ouverte jusqu'à la prochaine contraction.
donc elle est en pause.
ton prg devait plutot ressembler à celui ci

Attention, il est simpliste, c'est juste à titre d'exemple

int sensorPin   = A0;
byte pince_ouverte = true;
byte pince_fermee = false;

void setup()
{
  Serial.begin(9600);
}
void loop()
{
  if (analogRead(sensorPin) >= 500)
  {
    if (pince_ouverte == false)
    {
      ouverture_pince();
    }
    else
    {
      if (pince_fermee == false)
      {
        fermeture_pince();
      }
    }
  }
  else
  {
    Serial.println("pause");
  }
}
void ouverture_pince()
{
  bla bla;//on active le moteur
  bla bla;//on verifie qu'il est fermé
  bla bla;//avant de quitter la fonction
  pince_ouverte = true;
  pince_fermee = false;
}

Bonjour,
donc j’ai ajouté des commentaires et essayé de corriger les erreurs de syntaxe :smiley:
et je voudrais que l’ouverture, la fermeture et la pause soient indépendantes et que chaque action puisse interrompre les autres. Ainsi on pourrait attraper des objets de taille différentes.

int sensorPin = A0;
int sensorValue = 0;
int temps = millis();
int tp1 = 0; //temps à la pulsation 1
int tp2 = 0;
int tp3 = 0;
int p = 0;  //pulsations


void setup() {
  Serial.begin(9600);
}
void loop() {
  sensorValue = analogRead(sensorPin);
  delay(3000);// je voudrais que les parties de mon code soient indépendantes (comme des boucles différentes sur scratch) et non que le programme se lise de manière linéaire, es-ce possible ? (si non, mon programme ne fonctionne clairement pas)

  if (p == 0); {
    if (sensorValue > 500); {
      tp1 = temps;
      p = p + 1;
      Serial.println("pause");// j'ai remplacé les parties du programme d'ouverture, de fermeture et de pause par du texte, car c'est une autre personne de mon groupe qui s'en charge, l'idée serait de ne rien faire ou de mettre en pause si une action est en train d'être effectuée
    }
  }
  if (p == 1); {//je voudrais ici que si une pulsation a déjà été enregistrée, on puisse en enregistrer une deuxième, et donc si les deux se produisent dans un intervalle de moins de 3sec, la pince se ferme
    delay (500);//on attend 0,5sec pour éviter que la même contraction musculaire compte comme 2 pulsations
    if (sensorValue > 500); {
      tp2 = temps;
      p = p + 1;
      if (tp2 - tp1 < 3000);
      Serial.println("fermerpince");//faudrait-il que je mette un délai ici pour éviter que s'il y a volonté d'ouvrir la pince, que elle se ferme pendant un bref moment ???
    }
  }
  if (p == 2); {//ici, je voudrais que si deux pulsations ont déjà été enregistrées, qu'on puisse reconnaître une 3e et que si celles ci se produisent dans un intervalle inférieur à 6sec,qu'on ouvre la pince
    delay (500);
    if (sensorValue > 500); {
      tp3 = temps;
      p = p + 1;
      if (tp3 - tp1 < 6000);
      Serial.println("ouvrirpince");
    }
  }
  else {//je voudrais que si rien ne se passe dans 6sec de délai, que les variables retournent à 0 pour enregistrer un ?nouvel intervalle?
    delay (6000);
    tp1 = 0;
    tp2 = 0;
    tp3 = 0;
    p = 0;

  }
}

Merci :))

Donc ce que tu veux faire c'est une machine d'états : lis le tuto de J-M-L dans la section des tutos, ça te donnera des idées.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.