-         

Ergebnis 1 bis 8 von 8

Thema: meine Servo-ansteuerung ist zu groß für die Demo. mist!

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.09.2007
    Beiträge
    20

    meine Servo-ansteuerung ist zu groß für die Demo. mist!

    Anzeige

    Hi.

    Kann mir jemand bei einer Programm-verkürzung helfen?

    In meinem Programm fahren 2 Servos gleichzeitig eine Strecke ab. die sieht so aus:

    einmal hin:

    Code:
       If Pind.6 = 1 And Pind.7 = 0 And Pind.4 = 1 Then         'Monitor ist in Mitte & Relais1 eingeschalten
          Enable Timer0                                         'Servos anschalten
          Servo(1) = 48                                         'Servos schrittweise bis zum Endpunkt fahren
          Servo(2) = 152
          Waitms 20
          Servo(1) = 49
          Servo(2) = 151
          Waitms 20
          Servo(1) = 50
          Servo(2) = 150
     ...
    ...
    ...
          Servo(1) = 122                                        'erster Endpunkt (weiter geht nicht, wg Kante)
          Servo(2) = 78
          Waitms 20
          Disable Timer0
       End If
    und wieder zurück:

    Code:
       If Pind.6 = 1 And Pind.7 = 1 And Pind.3 = 1 Then         'Monitor zurück nach Mitte gefahren und noch unten
          Enable Timer0                                         'Servos anschalten
          Servo(1) = 122
          Servo(2) = 78
          Waitms 20
          Servo(1) = 121
          Servo(2) = 79
          Waitms 20
          Servo(1) = 120
          Servo(2) = 80
          Waitms 20
    ...
    ...
    ...
    ...
          Servo(1) = 49
          Servo(2) = 151
          Waitms 20
          Servo(1) = 48
          Servo(2) = 152
          Waitms 20
          Disable Timer0
       End If
    Diese dämliche Ansteuerung habe ich deshalb so geschrieben, weil die Servos in einer bestimmten Geschwindigkeit fahren sollen. Und wenn ich die Sprünge zu groß wähle, dann läufts abgehakt.
    Einziger Nachteil: Dieses Programm kommt locker auf 560 Zeilen und damit über das Ende der Demo.

    Hab mir schon die möglichen Servoansteuerungen angeschaut in der Hilfe.
    Der Befehl hier würde mir gefallen und wäre evtl. genau richtig für mich:

    Do

    For I = 0 To 100

    Servo(1) = I

    Waitms 1000

    Next


    Allerdings, wo pack ich da meinen 2ten Servo hin? Der müßte dann ja von 100 to 0 fahren!
    Geht das und wie?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.10.2004
    Ort
    Baoding
    Alter
    38
    Beiträge
    687
    z = 100 - I
    Servo(2)=z

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    34
    Beiträge
    979
    oder z.B. so (ist flexibler):
    Code:
    dim Servo1 as byte
    dim servo2 as byte
    
    servo1 = 48
    servo2 = 152
    
    for i = 0 to 30
       servo(1) = servo1
       servo(2) = servo2
       incr servo1
       decr servo2
       waitms 20
    next
    eventuell kann man auch gleich die servo(*) Variabeln erhöhen/erniedrigen und die hilfsvariablen servo* weglassen... bin mir da nicht ganz sicher...

    gruss bluesmash

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    21.09.2007
    Beiträge
    20
    mmh-
    so geht etwas. aber ich hab kein Plan, was ich grad mache

    die "z = 100 - I" hab ich vors Programm gepackt, ne dim z as byte dazu und im Programm stehts jetzt so:

    ' If Pind.6 = 1 And Pind.7 = 1 And Pind.3 = 1 Then
    For I = 0 To 100
    Servo(1) = I
    Servo(2) = Z
    Waitms 1000
    Next
    ' End If

    Wie gesagt, es geht was, nur was? Ich hab da bestimmt was völlig falsch geschrieben? Und die Zeit lässt sich mit waitms 1000 auch nicht wirklich beeinflussen.
    Und das if then musste ich auch ausklammern, weils mit dem gar nicht ging.

    n kleines Beispiel wäre cool

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377

    Re: meine Servo-ansteuerung ist zu groß für die Demo. mist!

    Zitat Zitat von >toxic<
    Code:
          Servo(1) = 48                                         'Servos schrittweise bis zum Endpunkt fahren
          Servo(2) = 152
          Waitms 20
          Servo(1) = 49
          Servo(2) = 151
          Waitms 20
          Servo(1) = 50
          Servo(2) = 150
     ...
    Hallo toxic!

    Du könntest die FOR-Schleife verwenden um wiederkehrende Aktionen durchzuführen:

    ungetestet:
    Code:
    dim schritt as byte
    dim startwert(2) as byte
    dim tmp as byte
    
    startwert(1) = 48
    startwert(2) = 152
    
    for schritt = 0 to 10
        tmp = startwert(1) + schritt
        servo(1) = tmp
        tmp = startwert(2) - schritt
        servo(2) = tmp
    next schritt
    mfg
    Gerold
    :-)

    PS:
    Was ist los?
    Sind wir alle gleichzeitig beim Antworten? :-)

    .

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    21.09.2007
    Beiträge
    20

    Re: meine Servo-ansteuerung ist zu groß für die Demo. mist!

    Zitat Zitat von python_rocks
    PS:
    Was ist los?
    Sind wir alle gleichzeitig beim Antworten?

    .
    Ha [-o<

    danke euch, ich werde die genannten Beispiele alle durchtesten. Super, die Hilfestellungen hier

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    21.09.2007
    Beiträge
    20
    coole Sache

    Hab es hinbekommen mit dem Code von Bluesmash. Danke euch nochmal!
    Für das hoch und runter brauchte ich nur den incr und decr Befehl tauschen.
    Das ganze WE gesucht, wie man die Variable einfach um eins hoch bzw. runter rechnen lassen kann.
    Nix gefunden und dann schritt für schritt geschrieben, jetzt kann ich die knapp 450 Zeilen wieder löschen
    Macht aber nix, denn so ists bei weitem übersichtlicher.

    Danke euch!

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Oder du trennst die Schrittfolgen vom eigentlichen Code und legst die im EEP ab. Da hast du dann auch keine Größenbeschränkung - oder generierst die Folgend direkt mit einem externen Programm und flashst sie dann nur nach.

    Im Prinzip ließt das Listing dann nur noch sequenziell das EEPROM aus und stellt die Servos. Mit externem EEPROM über I2C hast du dann auch ewig Platz für Schrittfolgen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •