2017-06-22 4 views
0

Ich versuche eine kontinuierliche (180 zu 0 und zurück 0 zu 180) Bewegung von einem Servo zu bekommen, wenn ich eine Taste in der Fernbedienung drücke und NUR stop wenn ich die andere Taste drücke. Bisher habe ich es kontinuierlich bewegen lassen, aber dann höre ich nicht auf, wenn ich auf den "Stop" -Button drücke. Ich weiß, dass es wegen der while-Schleife ist. Allerdings habe ich switch-case versucht, wenn Aussage, bisher hat nichts funktioniert. Bitte helfen, jeder Rat dafür, damit es funktioniert, wird geschätzt.Arduino Servo und IR Fernbedienung

#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

Bitte bearbeiten Sie Ihre Frage und zeigen Sie uns den Code, den Sie derzeit haben. Ohne das (und oft ein Schaltplan) können wir Ihnen wirklich nicht helfen. – stevieb

+0

Meine Kristallkugel sagt mir nichts über Ihren Code ... :( –

+0

Tut mir leid, ich lerne gerade dieses Feld. Ich dachte, es gibt eine bessere Möglichkeit, die Codes als die 4 Leerzeichen in jeder Zeile anzuhängen. Das ist aber nicht Das Problem, ich hoffe du kannst mir jetzt helfen :) – theagleye

Antwort

0

Eine Möglichkeit, Ihr Problem zu lösen wäre für das Vorhandensein eines „Knopfdruck“ tiefer in loop() zu überprüfen. Setzen Sie Ihre Schecks für die Taste innerhalb Ihre Bewegung for Schleife drücken, um die Änderungen sofort zu erfassen. Sieht so aus, als hättest du vielleicht zwei Startcodes (?), Also musst du vielleicht die folgenden if Anweisungen ändern, aber ich zeige dir hoffentlich, wie man die Bedingung im folgenden Beispiel überprüfen kann.

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

Danke. Ihr Code sieht besser aus als meiner, tut aber nicht genau das, was ich wollte; der Servo rollt immer noch nicht von 0 auf 180 und zurück und macht so weiter, bis ich den "Endcode" drücke. Es bewegt sich jedes Mal, wenn ich den Knopf für 180 bis 0 und auch für 0 bis 180 drücke (Ofc das ist, was der Code es richtig macht). Ich bin mir nicht sicher, ob ich die Frage klargestellt habe, ich hoffe es ist es aber, bitte lassen Sie es mich wissen, wenn ich es irgendwie aufklären kann. Ja, ich habe zwei Startcodes und zwei Endcodes. – theagleye

Verwandte Themen