2017-06-22 3 views
0

J'essaie d'obtenir un mouvement continu (180 à 0 et arrière de 0 à 180) d'un servo lorsque j'appuie sur un bouton de la télécommande et que j'arrête SEULEMENT quand j'appuie sur l'autre bouton. Jusqu'à présent, je l'ai fait bouger en continu, mais ça ne s'arrête pas quand j'appuie sur le bouton 'stop'. Je sais que c'est à cause de la boucle while. Cependant, j'ai essayé switch-case, si déclaration, rien n'a fonctionné jusqu'à présent. S'il vous plaît aider, tous les conseils pour le faire fonctionner est apprécié.Servo Arduino et télécommande IR

#include <Servo.h> 

#define code1 2534850111 //decimal value of button 1 
#define code3 16724175 //decimal value of button 1 
#define code 4294967295 //random value 
#define code2 16738455 //decimal value of button 0 
#define code4 3238126971 //decimal value of button 0 

Servo myservo; // servo object 
int RECV_PIN = 11; //receiveing pin IR remote 

int pos = 0; 

IRrecv irrecv(RECV_PIN); 

decode_results results; 

void setup() { 
    Serial.begin(9600); 
    irrecv.enableIRIn(); //start the receiver 
    myservo.attach(9); //servo connect to pin 9 
    pinMode(2, OUTPUT); //LED connect to pin 2 
} 

void loop() { 
    if(irrecv.decode(&results)){ 
    // if(results.value == code1 || results.value == code3){ 
    while(results.value == code1 || results.value == code3){ 
     digitalWrite(2,HIGH); //turn the led on 
     for(pos = 0; pos <= 180; pos += 1){ //servo goes form 0 to 180    degrees in steps of 1 degree 
    myservo.write(pos); 
    delay(7); 
    } 
    for(pos = 180; pos >= 0; pos -= 1){ //servo goes back from 180 to 0 degrees with 1 degree step 
    myservo.write(pos); 
    delay(7); 
} 
    } 

while(results.value == code2 || results.value == code4){ 
     digitalWrite(2, LOW); // turn the led off 
     myservo.write(pos); 
     delay(15); 
     break; 
} 

    Serial.println(results.value, DEC); //show the decimal value of the  pressed button 
    irrecv.resume(); //receive the next value 
    } 

} 
+1

S'il vous plaît modifier votre question et montrez-nous le code que vous avez actuellement. Sans cela (et souvent un schéma de câblage), nous ne pouvons vraiment pas vous aider. – stevieb

+0

Ma boule de cristal ne me dit rien au sujet de votre code ... :( –

+0

Désolé, je viens d'apprendre ce domaine.Je pensais qu'il y avait un meilleur moyen d'attacher les codes autres que les 4 espaces dans chaque ligne.Mais ce n'est pas le problème, j'espère que vous pouvez m'aider maintenant :) – theagleye

Répondre

0

Une façon de résoudre votre problème serait de vérifier la présence d'un bouton « push » plus profond à l'intérieur loop(). Mettez vos chèques pour le bouton presse à l'intérieur votre mouvement for boucle pour attraper les changements tout de suite. On dirait que vous pourriez avoir deux startcodes (?) De sorte que vous devrez peut-être modifier les instructions if ci-dessous, mais j'espère montrer comment vérifier la condition pour "continuer" dans l'exemple de code ci-dessous.

void loop() 
{ 
    if(irrecv.decode(&results)) 
    { 
     // turn one way 
     for(pos = 0; pos <= 180; pos += 1) 
     { 
      // only continue if the start code(s) still active 
      if(results.value == STARTCODE || results.value == OTHERSTARTCODE) 
      { 
       myservo.write(pos); 
       delay(7); 
       irrecv.resume(); //receive the next value 
      } 
     } 
     // turn the other way 
     for(pos = 180; pos >= 0; pos -= 1) 
     { 
      // only continue if the start code(s) still active 
      if(results.value == STARTCODE || results.value == OTHERSTARTCODE) 
      { 
       myservo.write(pos); 
       delay(7); 
       irrecv.resume(); //receive the next value 
      } 
     } 
    } 
} 
+0

Merci. Votre code semble meilleur que le mien, mais ne fait pas exactement ce que je voulais; le servo ne continue toujours pas à rouler de 0 à 180 et revient et continue à faire ça jusqu'à ce que j'appuie sur le "endcode". Il se déplace chaque fois que j'appuie sur le bouton pour 180 à 0 et aussi pour 0 à 180 (Ofc c'est ce que le code lui dit faire correctement). Je ne suis pas sûr si j'ai fait la question claire, j'espère que c'est bien, s'il vous plaît laissez-moi savoir si je peux l'effacer plus en quelque sorte. Aussi, oui, j'ai deux startcodes et aussi deux endcodes. – theagleye