Es gibt beim freundlichen Chinesen so kleine Mini-Joysticks.
Lassen sich in XY-Richtung, also in der ganzen Fläche verschieben.
Ein 4-poliger Stecker ist mit GND/VCC und den beiden analogen Ausgängen belegt.
Thumb Joystick Modul.png
Das WS2812 Feld mit 64 LEDs ist Zeilenweise organisiert. Es fängt (auf dem Bild) links oben an und geht zeilenweise nach rechts unten.
Die LEDs sind dabei hintereinander geschaltet. Die 23. LED ist z.B. in Zeile 3 die Nummer 7.
Die Software liest den Joystick ein und rechnet die Position des Leuchtpunktes um.
Joystick_Ws2812.jpg
Zusätzlich habe ich noch einen Pfeil als rudimentäre Grafik in einem Datafeld hinterlegt.
In den Daten zeigt der Pfeil nach links, andere Richtungen werden daraus mit entsprechender Zählweise generiert, sodass die Grafik nicht 4 mal vorhanden sein muss.
Alles anzeigen
Lassen sich in XY-Richtung, also in der ganzen Fläche verschieben.
Ein 4-poliger Stecker ist mit GND/VCC und den beiden analogen Ausgängen belegt.
Thumb Joystick Modul.png
Das WS2812 Feld mit 64 LEDs ist Zeilenweise organisiert. Es fängt (auf dem Bild) links oben an und geht zeilenweise nach rechts unten.
Die LEDs sind dabei hintereinander geschaltet. Die 23. LED ist z.B. in Zeile 3 die Nummer 7.
Die Software liest den Joystick ein und rechnet die Position des Leuchtpunktes um.
Joystick_Ws2812.jpg
Zusätzlich habe ich noch einen Pfeil als rudimentäre Grafik in einem Datafeld hinterlegt.
In den Daten zeigt der Pfeil nach links, andere Richtungen werden daraus mit entsprechender Zählweise generiert, sodass die Grafik nicht 4 mal vorhanden sein muss.
BASCOM-Quellcode: Joystick_WS2812
- 'Analoger Mini-Joystick steuert 8x8 LED Feld an mit WS2812
- 'Michael @bascomforum.de
- $regfile = "m328pdef.dat"
- $crystal = 8000000
- $hwstack = 80
- $swstack = 80
- $framesize = 100
- Led Alias Portb.5
- Ddrb.5 = 1 'auf Nano-Board
- Ddrb.4 = 1
- Led_rot Alias Portb.2
- Ddrb.2 = 1
- Links Alias Pind.4
- Portd.4 = 1
- Rechts Alias Pind.5
- Portd.5 = 1
- Oben Alias Pind.3
- Portd.3 = 1
- Unten Alias Pind.2
- Portd.2 = 1
- Config Adc = Single , Prescaler = Auto , Reference = Avcc
- 'Für Systemuhr
- Config Dcf77 = Pinc.0 , Timer = 1 , Update = 0 , Debug = 1 , Inverted = 0 , Check = 1 , Gosub = Sectic
- Enable Interrupts
- Dim X As Byte
- Dim Y As Byte
- Dim Z As Byte
- Dim Temp As Byte
- Dim X_analog As Word
- Dim Y_analog As Word
- Dim Timerzaehler As Byte
- Config Rainbow = 1 , Rb0_len = 64 , Rb0_port = Portb , Rb0_pin = 3
- ' ^ connected to pin 3
- ' ^-------------- connected to portB
- ' ^-------------------------- 8 leds on stripe
- ' ^------------------------------------- 1 channel
- 'Global Color-variables
- Dim Color(3) as Byte
- R alias Color(_base) : G alias Color(_base + 1) : B alias Color(_base + 2)
- 'CONST
- Const Numleds = 8
- '----[MAIN]---------------------------------------------------------------------
- Dim n as Byte
- RB_SelectChannel 0 ' select first channel
- R = 15 : G = 10 : B = 20 ' define a color
- RB_SetColor 0 , color(1) ' update leds
- Rb_setcolor 7 , Color(1) ' update leds
- Rb_send
- For X = 0 To 63
- Rb_setcolor X , Color(1)
- Rb_send
- Waitms 1
- Next
- R = 0 : G = 0 : B = 0
- For X = 0 To 63
- Rb_setcolor X , Color(1)
- Rb_send
- Waitms 1
- Next
- Do
- X_analog = Getadc(0) 'Joystick einlesen
- Y_analog = Getadc(1)
- X_analog = X_analog / 128 'auf 8x8 herunterrechnen
- Y_analog = Y_analog / 128
- Y = Y_analog * 8 'Zeilensprung
- X = X_analog + Y
- R = 50 : G = 50 : B = 50
- Rb_clearcolors
- Rb_setcolor X , Color(1)
- Rb_send
- If Timerzaehler > 0 Then 'Lebenszeichen
- Decr Timerzaehler
- Else
- Led_rot = 0
- End If
- Waitms 10
- ' ab hier rudimentäre Grafik
- If Links = 0 Then
- R = 30 : G = 0 : B = 0
- Restore Pfeil
- For X = 0 To 63
- Read Temp
- If Temp = 1 Then
- Rb_setcolor X , Color(1)
- End If
- Next
- Rb_send
- End If
- If Rechts = 0 Then
- R = 20 : G = 20 : B = 0
- Restore Pfeil
- For X = 63 To 0 Step -1
- Read Temp
- If Temp = 1 Then
- Rb_setcolor X , Color(1)
- End If
- Next
- Rb_send
- End If
- If Unten = 0 Then
- R = 0 : G = 30 : B = 0
- Restore Pfeil
- For X = 0 To 7
- For Y = 56 To 0 Step -8
- Z = X + Y
- Read Temp
- If Temp = 1 Then
- Rb_setcolor Z , Color(1)
- End If
- Next
- Next
- Rb_send
- End If
- If Oben = 0 Then
- R = 0 : G = 0 : B = 30
- Restore Pfeil
- For X = 7 To 0 Step -1
- For Y = 0 To 56 Step 8
- Z = X + Y
- Read Temp
- If Temp = 1 Then
- Rb_setcolor Z , Color(1)
- End If
- Next
- Next
- Rb_send
- End If
- ' If Links = 1 Then
- ' If Rechts = 1 Then
- ' If Oben = 1 Then
- ' If Unten = 1 Then
- ' R = 0 : G = 0 : B = 0
- ' For X = 0 To 63
- ' Rb_setcolor X , Color(1)
- ' Next
- ' Rb_send
- ' End If
- ' End If
- ' End If
- ' End If
- Loop
- End
- '-------------- DCF77 Interrupt --------------------
- Sectic:
- Toggle Led
- Toggle Led_rot
- Timerzaehler = 50
- Return
- Pfeil:
- Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
- Data 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0
- Data 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0
- Data 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1
- Data 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1
- Data 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1
- Data 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0
- Data 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0