INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Servo in einem Bereich bewegen
08.10.2019, 09:48 (Dieser Beitrag wurde zuletzt bearbeitet: 08.10.2019 10:03 von koksi_92.)
Beitrag #1
Servo in einem Bereich bewegen
Hallo, ich versuche einen 270° Servo mit zwei Taster in einem bestimmten Bereich zu bewegen und bei gleichzeitigen drücken beider Taster auf eine definierte Position anzufahren. Leider wird der Befehl ignoriert.

Code:
/*
Servo 270°:
Reverse: 90°, 3 Stellungen
Forward: 150°, 5 Stellungen
*/

#include <Servo.h>

Servo myServo6;

int pos; // aktuelle Position
int i; // Schrittwinkel
int d; // Verzögerung
int buttonApin = 9;
int buttonBpin = 8;

void setup() {
  Serial.begin(9600);
  myServo6.attach(6);
  pos = 90;
  i = 30;
  d = 300;
  myServo6.write(pos);
  
  pinMode(buttonApin, INPUT_PULLUP);  
  pinMode(buttonBpin, INPUT_PULLUP);
  
}

void loop() {

  if (pos >= 0 && pos <= 180); { // !!! funktioniert nicht!!! pos nur erhöhen, wenn die Winkelposition zwischen 0° und 180° ist  
    if (digitalRead(buttonApin) == LOW) {
      pos = pos + i;
      myServo6.write(pos);
      Serial.print("A");
      Serial.println(pos);
      delay(d);
    }
    if (digitalRead(buttonBpin) == LOW) {
      pos = pos - i;
      myServo6.write(pos);
      Serial.print("B");
      Serial.println(pos);
      delay(d);
    }
    /*
    else if ((digitalRead(buttonApin) && digitalRead(buttonBpin)) == LOW) { // !!!funktioniert nicht einwandfrei!!! Beim Drücken des Tasters "A" und "B" soll immer 90° angefahren werden
      pos = 90;
      myServo6.write(pos);
      Serial.print("A & B");
      Serial.println(pos);
      delay(d);
    }
    */

  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2019, 09:54
Beitrag #2
RE: Servo in einem Bereich bewegen
Das ist kein PHP-Code, sondern C++.

Ich würde anders vorgehen:

1. Lesen beider Taster + entprellen (zur Not erstmal mit einem Delay von 10 ms)
2. Wenn beide gedrückt sind - Aktion 90°
3. ansonsten Taster 1/2 getrennt auswerten und bearbeiten

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2019, 10:24 (Dieser Beitrag wurde zuletzt bearbeitet: 08.10.2019 10:25 von koksi_92.)
Beitrag #3
RE: Servo in einem Bereich bewegen
Danke für die rasche Antwort.
Habe die Formatierung des Codes im Beitrag geändert, ich hoffe das passt jetzt?
Ich bin neu im Forum und absoluter Anfänger was programmieren betrifft.

Habe auch schon mal von entprellen gehört Smile, das ist aber momentan bei mir erst sekundär, darum habe ich diesen Teil im Programm vorerst ausgegliedert und werde mich später enlesen bzw. nochmal melden Smile.

Mir geht es momentan darum, dass obwohl ich den Bereich eingegrenzt habe [(pos >= 0 && pos <= 180)] wird die Variable bei Tastendruck dennoch erhöht.
Auch ein vereinfachtes Programm (if und else mit unterschiedlicher Verschachtelung) hat leider keine Abhilfe schaffen können, daher denke ich, dass ich grundsätzlich bei der if-Funktion etwas falsch gemacht habe.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2019, 10:27
Beitrag #4
RE: Servo in einem Bereich bewegen
Dein Fehler liegt in dieser Zeile:
Code:
if (pos >= 0 && pos <= 180); { // !!! funktioniert nicht!!! pos nur erhöhen, wenn die Winkelposition zwischen 0° und 180° ist
Und zwar bei dem Semikolon. Das muss raus. Es beendet die if-Bedingung, und der folgende Block wird damit unabhängig vom if-Ergebnis ausgeführt.
Code:
if (pos >= 0 && pos <= 180) { // pos nur erhöhen, wenn die Winkelposition zwischen 0° und 180° ist

Allerdings wird pos dann immer noch > 180, da Du es auch bei 180 noch erhöhst, und dann geht nichts mehr, weil er dann nicht mehr in das if springt um es zu erniedrigen ( bei 0 genauso umgekehrt)


P.S. warum beantwortest Du im anderen Forum die Fragen der Helfer nicht?

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2019, 11:06 (Dieser Beitrag wurde zuletzt bearbeitet: 08.10.2019 11:09 von koksi_92.)
Beitrag #5
RE: Servo in einem Bereich bewegen
super Danke! --> blöder Fehler
Jetzt ist es allerdings so, dass bei <= 180 bis 210 gezählt wird (Schrittweite 30°) und bei <180 bis 180 und sich bei Erreichen der Grenzwerte der Servo nicht mehr zurück bewegt, da die if Bedingung dann ja nicht mehr erfüllt ist.
Daher müsste ich noch eine 2. If Bedingung mit 210 und dann pos = pos - i; erstellen oder?
Gibt es hierfür eine einfachere Lösung?

P.S. Habe ich die Frage doppelt gepostet? Mir wird nur dieses Thema in meinen Rubriken angezeit.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2019, 11:28 (Dieser Beitrag wurde zuletzt bearbeitet: 08.10.2019 11:30 von MicroBahner.)
Beitrag #6
RE: Servo in einem Bereich bewegen
Du musst beim erhöhen/ernidedrigen von pos darauf achten, dass es nicht zu groß/zu klein wird. Das kannst Du mit if-Abfragen machen, es gibt aber auch die constrain-Funktion dafür
(08.10.2019 11:06)koksi_92 schrieb:  P.S. Habe ich die Frage doppelt gepostet? Mir wird nur dieses Thema in meinen Rubriken angezeit.
Hier hast Du exakt die gleiche Frage gestellt und auch schon Antworten bekommen, aber nicht darauf reagiert.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  PWM springt bei einem bestimmten Wert auf High fingerpfeifer 12 305 Heute 21:07
Letzter Beitrag: MicroBahner
  Wert von einem Arduino zu einem zweiten Arduino senden Thorsten_S 9 162 Heute 14:48
Letzter Beitrag: Thorsten_S
  Servo ansteuerung TheDnator 6 318 28.09.2019 09:02
Letzter Beitrag: MicroBahner
  Erstes Programmierungsprojekt, LED's und servo geist4711 165 5.081 13.09.2019 17:27
Letzter Beitrag: geist4711
Wink Solar Roboter- Servo dreht nach Stopp nicht weiter Stagneth.Alexander 37 2.413 20.08.2019 14:15
Letzter Beitrag: geist4711
  MPU-6050 und Servo Gian-Luca 0 647 27.03.2019 20:48
Letzter Beitrag: Gian-Luca
  Mehrere HX711 mit einem Arduino Uno be14b029 8 4.030 16.03.2019 18:22
Letzter Beitrag: charlie883
  mBlock und Arduino IDE gleichzeitig auf einem PC? mgbig 4 540 14.01.2019 08:39
Letzter Beitrag: mgbig
  Variablen zu einem CHAR verbinden und einbinden Frank_aus_WOB 3 843 02.01.2019 09:07
Letzter Beitrag: Tommy56
  Stepper und Servo ? Lanzet3 31 2.258 28.12.2018 15:09
Letzter Beitrag: MicroBahner

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste