Hallo,
wie sieht denn die Hardware aus?
Dieser Artikel beschreibt, wie ich ein Windows Programm schreibe und dann mithilfe von Bascom diese Daten dann weitervererbeite:
https://www.roboternetz.de/wissen/in...eines_Roboters
Nun habe ich eine Frage:
Mein Code sieht derzeit so aus:
Wenn ich nun mein Windows-Programm starte, leuchten die ersten 4 LED's, d.h. PORTC.0 bis PORTC.3 sind Low, obwohl eigentlich keine Daten gesendet werden.Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 64 $crystal = 16000000 $baud = 9600 Dim X As Integer Config Portc = Output Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc.4 = 1 Portc.5 = 1 Portc.6 = 1 Portc.7 = 1 Do 'Darauf warten dass irgendwas gesendet wird Input "" , X 'Joystick nach rechts If X = 0 Then Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc.4 = 1 Portc.5 = 1 Portc.6 = 1 Portc.7 = 1 End If If X = 1 Then Portc.3 = 0 Else Portc.3 = 1 End If For X = 1 To 2 Portc.3 = 0 Portc.2 = 0 Next X For X = 1 To 3 Portc.3 = 0 Portc.2 = 0 Portc.1 = 0 Next X For X = 1 To 4 Portc.3 = 0 Portc.2 = 0 Portc.1 = 0 Portc.0 = 0 Next X 'Joystick nach links If X = 0 Then Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc.4 = 1 Portc.5 = 1 Portc.6 = 1 Portc.7 = 1 End If If X = -1 Then Portc.4 = 0 Else Portc.4 = 1 End If For X = -1 To -2 Portc.4 = 0 Portc.5 = 0 Next X For X = -1 To -3 Portc.4 = 0 Portc.5 = 0 Portc.6 = 0 Next X For X = -1 To -4 Portc.4 = 0 Portc.5 = 0 Portc.6 = 0 Portc.7 = 0 Next X Loop End
Wenn dann die Positionsdaten des Joystick gesendet werden, tut sich nichts; die 4 LED's leuchten weiterhin.
Hat irgendjemand eine Idee was das Problem ist? Liegt es möglicherweise an den For-Schleifen?
Torrentula
MfG Torrentula
Hallo,
wie sieht denn die Hardware aus?
Die Denkweise der meisten Menschen ist vergleichbar mit einer Sicht durch ein Strohhalm.
Kann das so richtig sein?!Code:For X = -1 To -4 Portc.4 = 0 Portc.5 = 0 Portc.6 = 0 Portc.7 = 0 Next X
Ein USB-Joystick, einen USB-Serialadapter und das RN-Control (12 V Versorgungsspannung). Die Hardware und das Windows-Programm sind einwandfrei, es scheitert nur an dem eigenen BASIC-Programm, denn dieses Funktioniert:wie sieht denn die Hardware aus?
Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 64 $crystal = 16000000 $baud = 9600 Dim X As Integer Dim Y As Integer Dim X1 As Word Dim X2 As Word Dim Y1 As Word Dim Y2 As Word Do 'Darauf warten dass irgendwas gesendet wird Input "" , X Input "" , Y 'Die Variablen umskalieren X1 = X + 20 X2 = X1 * 40 Y1 = Y + 20 Y2 = Y1 * 40 'Einen Ton (Tonhöhe = Joystick Position) ausgeben Sound Portd.7 , 10 , X2 Sound Portd.7 , 10 , Y2 LoopDas ist doch die Frage die ich habeKann das so richtig sein?!Code:For X = -1 To -4 Portc.4 = 0 Portc.5 = 0 Portc.6 = 0 Portc.7 = 0 Next X
Liegt es möglicherweise an den For-Schleifen?
Hallo,
die For-Schleifen sind da völlig fehl am Platz.
Ich vermute eher, dass du abhängig von der gesendeten Zahl die LEDs schalten möchstest, also bei "+1" eine LED, bei "+2" zwei LEDs usw. und für das negative wahrscheinlich entsprechend (nur in die andere Richtung).
Also auf gut Deutsch: große Auslenkung des Joysticks, viele LEDs an. Und das in beide Richtungen rechts/links. Liege ich da richtig?
Hab von Bascom zwar keine Ahnung (von Blitzplus, einem Basicdialekt aber schon, und C++), würde das so ähnlich lösen:
Hast dich mit dem "For" vielleicht am deutschen Sprachgebrauch zu sehr leiten lassen (Für X von -1 bis -4 mache dieses hier...), macht hier aber echt keinen Sinn.Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 64 $crystal = 16000000 $baud = 9600 Dim X As Integer Config Portc = Output Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc.4 = 1 Portc.5 = 1 Portc.6 = 1 Portc.7 = 1 Do 'Darauf warten dass irgendwas gesendet wird Input "" , X 'Mittelstellung, aus '------------------- If X = 0 Then Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc.4 = 1 Portc.5 = 1 Portc.6 = 1 Portc.7 = 1 End If 'Joystick nach rechts '-------------------- If X > 0 Then Portc.3 = 0 End If If X > 1 Then Portc.2 = 0 End If If X > 2 Then Portc.1 = 0 End If If X > 3 Then Portc.0 = 0 End If 'Joystick nach links '------------------- If X < 0 Then Portc.4 = 0 End If If X < -1 Then Portc.5 = 0 End If If X < -2 Then Portc.6 = 0 End If If X < -3 Then Portc.7 = 0 End If Loop End
Grüße,
Bernhard
Du hasts erfasst!Ich vermute eher, dass du abhängig von der gesendeten Zahl die LEDs schalten möchstest, also bei "+1" eine LED, bei "+2" zwei LEDs usw. und für das negative wahrscheinlich entsprechend (nur in die andere Richtung).
Also auf gut Deutsch: große Auslenkung des Joysticks, viele LEDs an. Und das in beide Richtungen rechts/links. Liege ich da richtig?
Ich hatte vorher das Programm mit If gelöst aber da natürlich übersehen, dass die LED's IMMER dann leuchten wenn die Bedingung erfüllt ist. Denkfehler
Vielen Dank
Torrentula
#Closed#
ich versteh nicht was der code machen soll
-1 to-4 step-1 ohne step -1 zählt der nur +1 und da wird das nie -4
wie gesagt wass soll das programm bei welcher joystickstelllung?
Wenn durch das Auswertungsprogramm des Computers dem RN-Control z.B. +2 übergeben wird, dann lässt der Code 2 LEDs auf der rechten Seite leuchten.ich versteh nicht was der code machen soll
Das Auswertungsprogramm übergibt Zahlen im Wertebereich von -4 bis +4.
Die 8 LEDs auf dem RN-Control dienen als Anzeige. Die vier 4 LEDs rechts von der gedachten Mitte von +1 bis +4 und die anderen 4 LEDs links von der gedachten Mitte für den Bereich von -1 bis -4.
Eine positive Zahl bedeutet Aussteuerung des Joystick nach rechts, eine negative Aussteuerung nach links. Je weiter man den Stick in eine Richtung bewegt, desto größer/kleiner wird der übergebene Wert.
-1 to-4 step-1 ohne step -1 zählt der nur +1 und da wird das nie -4WENN X kleiner als -3 ist (also: -4, -5, -6....), DANN soll die 4. linke LED leuchten.Code:If X < -3 Then Portc.7 = 0 End If
Ich hoffe das ist verständlich
EDIT:
Achso du meinst das mit den For-Schleifen. Ja das funzt so nicht da hast du recht-1 to-4 step-1 ohne step -1 zählt der nur +1 und da wird das nie -4
Lesezeichen