Go Down

Topic: Servomoteur avec 2 boutons poussoir (Read 154 times) previous topic - next topic

Sayless

Bonjour à tous, je viens vers vous car je suis un débutant dans le monde de l'Arduino et j'adore vraiment ça. En gros j'ai 1 servomoteur avec 2 boutons poussoir et donc quand j'appuie sur un des 2 boutons le servo tourne de 20 degrés à chaque pression du bouton jusqu'à 180° et des que le servo est à 180° on appuie sur l'autre bouton qui ramène le servo a 0°

Je pense que pour certain d'entre vous c'est assez basique mais j'ai cherché sur plein de forum notamment sur arduino et j'ai pas trouvé ce que je cherche.

J'ai fais ce code qui est certainement faux car mon servo tourne juste de 20° et ne reste pas a 20° et je ne sais pas comment faire


 
Code: [Select]

#include <Servo.h>

Servo monservo;

int bouton = 8; (c'est sur ce bouton que l'on appuie pour que le servo tourne de 20° a chaque préssion)     
int boutonreset = 7; (le bouton qui fait revenir le servo a 0°)
int servo_position = 0;
int etat;
int etat2;

void setup(){
pinMode (8, INPUT);
pinMode (7, INPUT);
monservo.attach(9);
monservo.write(0);
}

void loop(){
 etat = digitalRead(8);
 etat2 = digitalRead(7);

if (etat==HIGH) {
  if (servo_position <= 180); {
     (servo_position = servo_position =+ 20);
      monservo.write(servo_position);

  }   
}
else {
   if (etat2==HIGH); {
    if (servo_position = 180);
       monservo.write(0);

    }
  }
}




Je ne remercierais jamais asser ceux qui m'aideront et j'espère pouvoir aider les autres dans le futur

infobarquee

la question a se poser
comment faire pour que la pression du bouton soit gardée pour que l'on prenne cette variable qui va ajouter 20 ou multiplier par 20?
AUCUNE AIDE PAR MP

hbachetti

Code: [Select]
     (servo_position = servo_position =+ 20);

On voit de ces trucs  :o

Cette ligne ne fait certainement pas ce que tu crois.
Elle affecte la valeur +20 à la variable servo_position.

Code: [Select]
servo_position += 20; // plutôt comme ça

Ceci n'est pas un test mais une affectation :

Code: [Select]
    if (servo_position = 180);

Suivie d'un point-virgule ...

servo_position n'est jamais remis à zéro par l'appui sur bouton2.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

dbrion06

Code: [Select]

    if (servo_position = 180);
       monservo.write(0);

se compile, mais ne fait sans doute pas ce que vous voulez; des tentatives de télépathie me mènent à
Code: [Select]

    if (180 == servo_position ){ // protection contre la confusion = et == (affectation et test égalité)
       monservo.write(0);
      // autres acrions si on est en butée
   }

Sayless

Merci pour vos réponses

hbachetti j'ai essayé ce que vous m'avez dit mais mon servo tourne que quand je met ça
 
(servo_position =+20);

De plus comme la fait remarqué infobarquee, es qu'il est préférable d'utiliser un booléen pour garder la valeur ou pas ?

hbachetti

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Sayless

Code: [Select]


#include <Servo.h>

Servo monservo;

int bouton = 8; (c'est sur ce bouton que l'on appuie pour que le servo tourne de 20° a chaque préssion)     
int boutonreset = 7; (le bouton qui fait revenir le servo a 0°)
int servo_position = 0;
int etat;
int etat2;

void setup(){
pinMode (8, INPUT);
pinMode (7, INPUT);
monservo.attach(9);
monservo.write(0);
}

void loop(){
 etat = digitalRead(8);
 etat2 = digitalRead(7);

if (etat==HIGH) {
  if (servo_position <= 180); {
     (servo_position =+ 20);
      monservo.write(servo_position);

  }   
}
else {
   if (etat2==HIGH); {
    if (180 == servo_position);
       monservo.write(0);

    }
  }
}


dbrion06

Code: [Select]

  if (180 == servo_position); // va faire le test, puis plus rien; risque d'être enlevée par l'optimiseur -ne sert à rien!
       monservo.write(0); // aura lieu toujours

devrait être
Code: [Select]

  if (180 == servo_position){
       monservo.write(0); // cette ligne ne sera active QUE si le test de la ligne précédente est vrai
}[code]

Sayless

Merci dbrion06 grâce a toi mon servo reste à 20° et retourne pas a 0°

dbrion06

Non, grâce à HBachetti qui demandait de reposter et à votre batterie qui actionne le cerf veau.

lesept

Enlève les points virgules à la fin des lignes commençant par if
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Sayless

C'est bon j'ai fais ce que tu ma dis lesept , maintenant il faut que je trouve pour faire revenir mon servo a 0° quand j'appuie sur le bouton reset car la ça marche pas. Et aussi trouver comment je pourrais faire pour que quand j'appuie sur le bouton le servo tourne comme je l'ai expliqué au début

Go Up