Also erstmal danke für eure Antworten. Ich hab jetzt schon einen Teil des Programs geschrieben, komm aber nicht weiter (wieder durch unzulängliche Kenntnis der Sprache Bascom):
Im folgenden Quellcode wird ein Servo (Servotreiber im Copozessor) von verschiedenen Positionen zu nächsten in langsamen Schritten bewegt:
Code:
$regfile = "m32def.dat"
Declare Sub Rnb_servo(byval Servonummer As Byte , Byval Go_to_pos As Byte)
$crystal = 8000000 'Quarzfrequenz
$baud = 9600
Dim Curr_pos As Byte
Dim Go_to_pos As Byte
Dim Servo_counter As Byte
Dim Steps_to_go As Byte
Call Rnb_servo(1 , 0)
Curr_pos = 0
Wait 5
'###############################################################################
Hauptschleife:
Call Rnb_servo(1 , 100)
Wait 3
Call Rnb_servo(1 , 150)
Wait 3
Call Rnb_servo(1 , 50)
Wait 3
Goto Hauptschleife
Sub Rnb_servo(byval Servonummer As Byte , Byval Go_to_pos As Byte)
If Go_to_pos > Curr_pos Then
For Servo_counter = Curr_pos To Go_to_pos
Print "#s" ; Chr(servonummer) ; Chr(servo_counter)
Waitms 10
Next Servo_counter
Elseif Go_to_pos < Curr_pos Then
Steps_to_go = Abs(curr_pos - Go_to_pos)
For Servo_counter = 0 To Steps_to_go
Print "#s" ; Chr(servonummer) ; Chr(curr_pos - Servo_counter)
Waitms 10
Next Servo_counter
End If
Curr_pos = Go_to_pos
End Sub
End
Die Bewegung von 0 nach 100, als auch die von 100 nach 150 funktionieren, weil jeweils die momentane Position kleiner als die zu erreichende Position ist (curr_pos < go_to_pos).
Beim Schritte von Position 150 nach 50 sollte also der zweite Teil der If-Abfrage in der Subroutine ausgeführt werden. Das Problem liegt jetzt in der Zeile "Print "#s" ; Chr(servonummer) ; Chr(curr_pos - Servo_counter)". Als Fehler wird "Error 31 : Invalid Data Type" angezeigt.
Ich kapier nicht, wie der Fehler zustande kommt. Kann jemand helfen?
mfg
jagdfalke
Lesezeichen