Du hast "I" als Byte definiert, da gibt's kein Vorzeichen. deshalb geht wohl die For schleife zum runterzählen nicht. (Step -10)
Ich habe diese Programm geschrieben, und daran drei verschiedene Conrad 5 Euro Servos angeschlossen, jedoch drehen alle drei Servos nach rechts und machen dann gar nichts mehr . Könnt ihr mir helfen hab keine Ahnung was sein könnte.
Mfg
Sven
+ Codetags (PicNick)Code:Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 Config Portb = Output Servo(1) = 10 Do Loop Dim I As Byte Print "Mittelstellung" Servo(1) = 48 Wait 1 Servo(1) = 48 'servo nach ganz links fahren Wait 1 Print "Rechtsdrehung" For I = 48 To 172 Step 10 Servo(1) = I Waitms 10 Next Wait 1 Print "linksdrehung" For I = 172 To 48 Step -10 Servo(1) = I Waitms 10 Next Wait 1 Print "mittelstellung" Servo(1) = 108
Du hast "I" als Byte definiert, da gibt's kein Vorzeichen. deshalb geht wohl die For schleife zum runterzählen nicht. (Step -10)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hi PicNick,
was würdest du sagen was am besten für I ist zum definieren, dass sich die Servos wieder drehen:
DIM i as integer
das sollte eigentlich klappen
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hi,
das Bascom-Beispiel für die Servos verwendet auch ein Byte in den Zählschleifen, und warum sollte man von einem Byte nicht subtrahieren können?
Könnte das Verhalten möglicherweise etwas damit zu tun haben, dass Startwert, Endwert und Step nicht zusammenpassen und somit die Abbruchbedingung der For-Next-Schleife nicht erreicht wird?
48 + (n*10) wird nämlich niemals 172 und 172 - (n*10) nicht 48... [-X
Versuchs doch mal mit Step 1 bzw. Step-1 oder gleiche Start-, Step- und Endwert so aufeinander ab, dass die Sache genau aufgeht.
Viele Grüße
Torsten
HI Leute,
danke für eure Hilfe, ich hab das Byte auf Integer geändert und als step 1 genommen, jedoch drehen die Servos, die ich an Portb.0 angeschlossen hab immer noch nach rechts und geht nicht weiter wieder nach links oder in die Mittelsatellung.
Habt ihr noch andere Ideen an was es liegen könnte.
Mfg
Sven
Hi,
laufen denn die ganzen Schleifen abwechselnd durch oder hängt das Programm irgendwo?
Kommen die ganzen Print-Befehle raus?
Programmier doch mal ein "Print I" in jede Schleife und erhöhe waitms auf 500, damit es im Terminal nicht rast wie dolle.
Oder alternativ, toggle einen Port mit LED, damit Du weisst, ob die Schleife hängt oder nicht.
Du kannst Dir auch ein einfaches Testrogramm schreiben:
Code:Do Servo(1) = 108 wait 2 Servo(1) = 172 wait 2 Servo(1) = 108 wait 2 Servo(1)= 48 wait 2 loop
Und schließ doch erstmal nur EIN Servo an B.0 an, nicht gleich alle drei.
Grüße
Torsten
Edit:
Och nööö... ist ja nicht wahr, grade gesehen in Deinem geposteten Code:
...
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Config Portb = Output
Servo(1) = 10
Do
Loop
Dim I As Byte
Print "Mittelstellung"
Servo(1) = 48
Wait 1
...
HI Torsten,
ich hab immer nur einen an Portb.0 hab nur als getauscht ob vielleicht einer kaputt ist. Ich bekommen kein Printbefehl an´gezeigt, der servo dreht sich von links nach rechts und dann macht er nix mehr..
Aha... s.o. !![]()
Vielen Dank Leute,
nachdem ich do und loop entfernt hab funktioniert das Ganze jetzt.
Lesezeichen