Pololu Maestro 12 Kanal Scripte schreiben

Bernd Langner

Moderator
Teammitglied
Hallo

Wer hat auch einen Maestro Servocontroller mit PIC 18F4550 und hat dafür Scripte geschrieben?
Ich kriege es nicht gebacken eine Sequenc über einen Schalteingang zu starten.
Die Eingänge definieren und die Sequenc schreiben geht einfach über die Oberfläche
nur mir fehlt der Befehl über eine Schalterabfrage diese Sequenc per Script zu starten.

Eventuell kann mir ja einer auf den richtigen Weg helfen.

Gruß Bernd
 

k_wimmer

User
Hallo Bernd,

kannst du mal präzisieren was genau du erreichen möchtest?
Du kannst ja über einen Endless loop gehen und dann über eine if-Anweisung den einen oder anderen Zweig bedienen.
Wenn du einen der Eingänge mittels eines Schalters in die eine oder andere Endposition bringst, kannst du ja über:
(#input) get position
ja schonmal die Position des Einganges abfragen.
Danach dann mit if....else... in die passende Richtung gehen.

Zumindest habe ich lt. der Anleitung das script so verstanden.
 
Ich habe für einen (Panzer-) Kollegen so ein Ding programmiert, mit dem er seine Besatzung animiert. Gestartet wird die Sequenz ganz primitiv durch Anlegen der Versorgungsspannung via Elektronikschalter vom Empfänger aus. Nach dem Ablauf habe ich eine größere Pause eingefügt, ansonsten steht sie auf Wiederholung. So hat der Kollege die Möglichkeit, den Controller in der Pause entweder ganz abzuschalten oder eben die Wiederholung zuzulassen.
 

Bernd Langner

Moderator
Teammitglied
Hallo k_wimmer

Also ich definiere den Eingang 0 als Schalteingang. An vier Ausgänge kommen Servos.
Für diese Servos erstelle ich vier Sequencen mittels der Software und kopiere die in den Script.
Starte ich den Script per Softwarebutton wird die Sequenc abgearbeitet. Ich möchte aber das die Sequenc gestartet
wird wenn der Schalter am Eingang 0 betätigt wird.

Diese Verknüfung fehlt mir vermutlich geht das über die if....else... Anweisung.
Leider habe ich davon kaum ein Plan bleibt also nur ausprobieren.


Gruß Bernd
 

Bernd Langner

Moderator
Teammitglied
Hallo

Habe es jetzt zum laufen gebracht. Der Script sieht so aus

begin
0 get_position # Wert von Eingang 0 als eine Zahl von 0 bis 1023
512 less_than # Test, ob es weniger als 512 ist -> 1 wenn sie wahr ist, 0 wenn falsch
if
500 0 0 0 0 0 0
0 0 6000 6000 6000 frame_1..11 # Frame 0
500 3968 8000 3968 frame_9..11 # Frame 1
500 8000 3968 7941 frame_9..11 # Frame 2
500 6003 6003 6003 frame_9..11 # Frame 3

endif
repeat

sub frame_1..11
11 servo
10 servo
9 servo
8 servo
7 servo
6 servo
5 servo
4 servo
3 servo
2 servo
1 servo
delay
return

sub frame_9..11
11 servo
10 servo
9 servo
delay
return


Die 3 Servos sind am Kanal 9,10,11 angeschlosssen und fahren ein Sequenc die ich mit der Oberfläche erstellt habe.
Die Sequenc wird solange gefahren wie der Eingang auf Masse liegt. (Über Pull Up).
Jetzt muß ich noch herausbekommen was die beiden Sub Frames machen (wurden automatisch erstellt beim erstllen mit der Oberfläche).

Gruß Bernd
 

k_wimmer

User
Hallo Bernd,

nach dem if hast du:
500 0 0 0 0 0 0
0 0 6000 6000 6000 frame_1..11 # Frame 0

änderst du dies in :
500 6000 6000 6000 frame_9..11 # Frame 0

dann hast du nur noch einen Sub Frame.
Die Subframes geben an welche Servos in welche Position laufen.
Da du für denh Frame 0 die: 500 0 0 0 0 0 0 0 0 6000 6000 6000 frame_1..11 # Frame 0
hast du Srevo 1-8 auf Pos.0, Servo 9 auf 6000, 10 auf 6000 und 11 auf 6000 !
Na, erschliesst sich die Logik?

Der Sub Frame gibt nur an welche Servos gesteuert werden.
Die Enumeration im Sub Frame gibt dir die Reihenfolge der Servos im Aufruf.

So wird dann ein Schuh draus.

Ich kenn zwar den Pololu nicht, aber die Anleitung gibt hier schön Auskunft mit den ganzen Beispiel-Scripts.
 
Ansicht hell / dunkel umschalten
Oben Unten