Go Down

Topic: Servomoteur, débutant (Read 5933 times) previous topic - next topic

icare

Re,
Autant pour moi, j'ai la vue qui baisse !!!  :smiley-mr-green:
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

roboazert

#16
Dec 31, 2013, 03:25 pm Last Edit: Dec 31, 2013, 03:28 pm by roboazert Reason: 1
Rebonjour,

Après avoir abandonné ce projet durant quelques semaines, j'ai décidé de m'y remettre.

J'aimerais y arriver de moi même mais malheureusement, je ne sais pas où chercher pour faire ce que je veux :

Je souhaiterais donc que ce bout de code :

Quote
#include <Servo.h>

Servo myservo;  
               /

int pos = 0;    

void setup()
{
 myservo.attach(9);  
}


void loop()
{
 for(pos = 0; pos < 180; pos += 1)  
 {                                  
   myservo.write(pos);              
   delay(15);                      
 }
 for(pos = 180; pos>=1; pos-=1)     
 {                                
   myservo.write(pos);             
   delay(15);                    
 }
}



s'exécute tout les 10 seconde (par exemple)

En suivant vos conseils précédents, je suis arriver à cela :

Quote
#include <Servo.h>
Servo myservo;      
int pos=90;

long previousMillis = 0;        


long interval = 1000;          

void setup() {
 
myservo.attach(9);
myservo.write (180);
}

void loop()
{

 unsigned long currentMillis = millis();

 if(currentMillis - previousMillis > interval) {
 
   previousMillis = currentMillis;  


   if (myservo.write = (pos))
     myservo.write = (pos);
   else
     myservo.write (pos);

 
 }
}


Malheureusement il y a encore des erreurs :

Quote
sketch_dec31a.ino: In function 'void loop()':
sketch_dec31a:26: error: invalid use of member (did you forget the '&' ?)
sketch_dec31a:27: error: invalid use of member (did you forget the '&' ?)



Je n'arrive pas à bien combiner les deux codes. Pourriez vous me mettre sur la piste et / ou me donner des adresses qui me permettraient d'avancer dans ce projet.


Merci d'avance,

Noé

Super_Cinci

Je trouve dommage que tu ne lises pas tout. Nous t'avons pourtant expliqué (rapidement) le principe du signe '='.

Donc
Code: [Select]
#include <Servo.h>
Servo myservo;     
int pos=90;
long previousMillis = 0;       
long interval = 1000;         

void setup() {
  myservo.attach(9);
  myservo.write (180);
}

void loop(){
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis; 

    if (myservo.write = (pos))
      myservo.write = (pos);
    else
      myservo.write (pos); 
  }
}

ne marchera jamais.

Code: [Select]

#include <Servo.h>

Servo myservo;     
int pos=90;
long previousMillis = 0;       
long interval = 1000;         

void setup() {
  myservo.attach(9);
  myservo.write (180);
}

void loop(){
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis; 
    myservo.write (pos); 
  }
}

saurais-tu expliquer la différence entre les deux codes? (c'est un exercice qu'il serait bon de faire si tu souhaite avancer...

roboazert

Merci de votre implication,

Dans le premier code il y a deux if ouverts donc cela ne va pas. Et je pense que ceci :

Quote
if (myservo.write = (pos))
      myservo.write = (pos);
    else
      myservo.write (pos);


Ne signifie pas grand chose vu que la valeur "pos" ne change pas.
Alors que dans le deuxième code vous déterminez la valeur de "pos" en faisant la différence de deux valeurs. (je ne vois pas bien ce qu'elles représentent)

Il faudrait alors rajouter un "else" dans le deuxième code pour faire bouger le servomoteur.

Pourriez vous me dire si mon résonnement est bon ?


Encore merci,

Noé

Super_Cinci

Code: [Select]
void loop(){
  unsigned long currentMillis = millis();    // relever la valeur actuelle du temps
  if(currentMillis - previousMillis > interval) {    // si le temps écoulé depuis la dernière action sur le servo est supérieur à 1000 ms :
    previousMillis = currentMillis;                               // Remettre "à zéro" le compteur de temps
    myservo.write (pos);                                              //  mettre le servo à jour
  }                                                // fin si
}

je ne vois pas où je détermine la valeur de "pos" en faisant la différence de deux valeurs, d'ailleurs, si personne ne modifie la valeur de "pos", ben ça va pas changer grand chose dans le monde... mais mon code marche.

roboazert

#20
Jan 02, 2014, 10:44 am Last Edit: Jan 03, 2014, 04:34 pm by roboazert Reason: 1
Ah ok je comprend, un "if" ne correspond pas obligatoirement à un "else"...
Il faut donc rajouter les instruction du servo dans la dernière ligne et j'arrive à cela:

Code: [Select]
#include <Servo.h>

Servo myservo;      
int pos=90;
long previousMillis = 0;        
long interval = 1000;          

void setup() {
 myservo.attach(9);
 myservo.write (180);
}

void loop(){
 unsigned long currentMillis = millis();
 if(currentMillis - previousMillis > interval) {
   previousMillis = currentMillis;  
   myservo.write (pos);  
   {
 for(pos = 0; pos < 180; pos += 1)  
 {                                  
   myservo.write(pos);              
   delay(15);                      
 }
 for(pos = 180; pos>=1; pos-=1)    
 {                                
   myservo.write(pos);              
   delay(15);                    
 }
}
 }
}



et il n'y a pas d'erreurs ...

Mais cela ne fonctionne pas sur le servo. Sauriez vous me dire pourquoi ?


roboazert

Bonjour,

Quelqu'un pourrait me mettre sur la voie ?


Merci d'avance,

Noé

Go Up