-         

Ergebnis 1 bis 8 von 8

Thema: Joystick + RN-Control

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Alter
    21
    Beiträge
    355

    Joystick + RN-Control

    Anzeige

    Dieser Artikel beschreibt, wie ich ein Windows Programm schreibe und dann mithilfe von Bascom diese Daten dann weitervererbeite:

    http://www.roboternetz.de/wissen/ind...eines_Roboters

    Nun habe ich eine Frage:

    Mein Code sieht derzeit so aus:

    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 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.

    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

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Hallo,

    wie sieht denn die Hardware aus?
    Die Denkweise der meisten Menschen ist vergleichbar mit einer Sicht durch ein Strohhalm.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Code:
    For X = -1 To -4 
     Portc.4 = 0 
     Portc.5 = 0 
     Portc.6 = 0 
     Portc.7 = 0 
     Next X
    Kann das so richtig sein?!

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Alter
    21
    Beiträge
    355
    wie sieht denn die Hardware aus?
    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:

    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
    Loop
    Code:
    For X = -1 To -4
     Portc.4 = 0
     Portc.5 = 0
     Portc.6 = 0
     Portc.7 = 0
     Next X
    Kann das so richtig sein?!
    Das ist doch die Frage die ich habe
    Liegt es möglicherweise an den For-Schleifen?

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    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:
    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
    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.

    Grüße,
    Bernhard

  6. #6
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Alter
    21
    Beiträge
    355
    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?
    Du hasts erfasst!

    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#

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    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?

  8. #8
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Alter
    21
    Beiträge
    355
    ich versteh nicht was der code machen soll
    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.

    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 -4
    Code:
    If X < -3 Then
          Portc.7 = 0
       End If
    WENN X kleiner als -3 ist (also: -4, -5, -6....), DANN soll die 4. linke LED leuchten.

    Ich hoffe das ist verständlich

    EDIT:
    -1 to-4 step-1 ohne step -1 zählt der nur +1 und da wird das nie -4
    Achso du meinst das mit den For-Schleifen. Ja das funzt so nicht da hast du recht

Berechtigungen

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