Probleme mit Servos

Hallo zusammen,

ich habe einen MEGA 2560 im Einsatz, mit an Pin 6/7 angeschlossenen Servos.
(DIe Servos haben eine eigene Stromversorgung mit 3 A)
Auf Knopdruck meiner IR.Fernbedienung passiert folgendes:

case 0xFF7A85: // Taste 3
ServoA1position = 90;
ServoA2position = 90;
Serial.println(ServoA1position);
ServoA1.attach(7, 1000, 2000); //Servoeinstellung (3,1000,2000)
ServoA2.attach(6, 1000, 2000); //Servoeinstellung (3,1000,2000)
ServoA1.write(ServoA1position);
Pausieren(4000); //basiert auf millis
ServoA2.write(ServoA2position);
Pausieren(4000);
ServoA1.detach();
ServoA2.detach();
break;

Die Variable ServoA1position ist als int global definiert
Die Servos funktionieren mit der Funktion gut

Problem:
An anderer Stelle will ich per IR-Fernbedienung die Position des Servos verändern.
Ich attache vorher wie oben.

Dann folgt der Tastendruck:

case 0xFF30CF: // Taste 1
ServoA1position = ServoA1position + 10;
ServoA1.write(ServoA1position);
Serial.println(ServoA1position);
break;

Die Variable ServoA1position wird wie erwartet dekrementiert. Das Servo macht aber einen Riesensatz, der den 10 Grad nicht entspricht. Ansprechen lässt immer auch nur eins der beiden Servos. (Identisch programmiert) Das andere macht nichts.
So fährt entweder das ein oder das andere Servo an den mechanischen Anschlag.

Was mache ich hier falsch

Vielen Dank im Voraus
Peter

Hi

Ohne ganzen Sketch wird Das hier wieder eine Rate-Runde!

Uch denke, daß Deine Pausieren(x) ebenfalls, mehr oder minder, blockierend arbeitet.
Du wirst darin wohl zwar die Fernbedienung abfragen, aber das Programm bleibt aber an dem delay hängen.
Es kann z.B. während der Wartezeit NICHT in den anderen Case-Zweig kommen, da kann die Fernbedienung empfangen, was Sie will, es muß auch Jemanden geben, Den Das interessiert (die switch-Anweisung wird ja auch erst wieder im nächsten loop()-Duchlauf abgefragt).

MfG

Meiner Meinung darfst Du nicht dauernd ServoA1.attach(7, 1000, 2000); und ServoA1.detach(); machen. Der Servo bekommt dann kein Steuersignal und wenn dann wieder ein Steuersignal kommt macht er eine unkontrollierte Bewegung.

Wieso an anderer Stelle ein Servo funktioniert und der andere nicht sagt nur der Sketch. Du wirst einen Fehler gemacht haben.

Grüße Uwe

Hallo und Danke an alle, die geantwortet haben:

ich habe mal meinen Sourcecode gepostet.

Der attach-Befehl ist in den setup verschoben worden.

Ich habe den zweiten Servo komplett im Sourcecode auskommentiert, Trotzdem macht der Servo Sprünge zum Endanschlag. Und zwar nur, wenn die Funktion "Automatikbetrieb()" durchlaufen wird. Servo 1 arbeitet korrekt.

Ich bin jetzt am Ende angekommen. Ich habe keine Ahnung, warum sich Servo 2 bewegt, obwohl dieser nicht angesprochen wird.

Ich hoffe, es hat noch jemand eine Idee.
Danke
Gruß
Peter

Hier werden die Servos attached:

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
ServoA1.attach(7); //Servoeinstellung (3,700,2000)   // RELLY RS-606WP
//ServoA2.attach(6); //Servoeinstellung (6,1000,2000)   //RELLY RS-606WP
void Automatikbetrieb()
{
//Hier fahren die Servos im Betrieb ihre Positionen ab


Pausieren(1000);

//Oeffner in Ruheposition bringen
ServoA1.write(Pos1A1);
Pausieren(1500);
//ServoA2.write(Pos1A2);
Pausieren(1500);
//ServoA1.detach();
//ServoA2.detach();

//Oeffner unter Wagen stellen
ServoA1.write(Pos2A1);
Pausieren(1500);
//ServoA2.write(Pos2A2);
Pausieren(1500);

//Jetzt oeffnen
ServoA1.write(Pos3A1);
Pausieren(1500);
//ServoA2.write(Pos3A2);
Pausieren(1500);


//Oeffner in Ruheposition bringen
ServoA1.write(Pos1A1);
Pausieren(1500);
//ServoA2.write(Pos1A2);
Pausieren(1500);
ServoA1.detach();
//ServoA2.detach();
}

@ TO:

"ich habe mal meinen Sourcecode gepostet."

Stimmt nicht.

postmaster-ino:
Ohne ganzen Sketch wird Das hier wieder eine Rate-Runde!

sonst wird das nichts ... hänge meinetwegen die .ino ran.

Hallo zusammen, hallo Doc_Arduino,

ich have meinen ganzen INO beigefügt. Ich hoffe, dass es jemand versteht.
Vielen Dank im Voraus!
Viele Grüße
Peter

wagenentladung3.ino (9.47 KB)

Der attach-Befehl ist in den setup verschoben worden.

bei Taste 0, 2, 3, 4 machst du das immer noch.

bei 5 verschiebst du den Servo plötzlich zu
ServoA1.attach(3,

Was bezweckst du damit?

Ich habe den zweiten Servo komplett im Sourcecode auskommentiert, Trotzdem macht der Servo Sprünge zum Endanschlag. Und zwar nur, wenn die Funktion "Automatikbetrieb()" durchlaufen wird. Servo 1 arbeitet korrekt.

Ich bin jetzt am Ende angekommen. Ich habe keine Ahnung, warum sich Servo 2 bewegt, obwohl dieser nicht angesprochen wird.

bei Taste 3 und Taste 5 sprichst du den Servo2 noch immer an.

Hallo,

fahren die Servos tatsächlich dorthin wo sie hin sollen? Ich glaube nicht das sie überhaupt die Sollposition erreichen.
Das ewige PingPong mit attach und detach und die delays müssen raus.

Eine Servofunktion für alle Aufrufe wo die Servo-SOLL-Position übergeben wird. Diese wird in der loop ständig aufgerufen. Ohne delay! Du musst millis verwenden. Sonst reagiert deine Fernbedienung störrisch.