PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabelle mit mehreren Spalten auslesen?



TobiasBlome
25.01.2008, 21:48
Hallo,
ich möchte jeweils 3 Werte aus einer Tabelle im Programm auslesen und in 3 Variablen schreiben.
Zum testen hab ich in jede Zeile 3 Werte geschrieben, die in 3 Variablen sollen. Per Timer soll dann in die nachste Zeile in der Tabelle gesprungen werden und wieder 3 neue Werte in die 3 Variablen geschrieben werden, so das sich die Verte zb. alle 2 sekunden ändern.

Wie hole ich nun die Werte aus der Tabelle? Position angeben?

Alles was ich gefunden habe war ein RN-Wissen Artikel, den ich aber nicht richtig verstehe.



'Konfiguration µC:

$regfile = "m8def.dat" 'AT-Mega8
$crystal = 3686400 'Quarz: 3.6864 MHz
$baud = 9600 'Baudrate der UART: 9600 Baud


'-------------------------------------------------------------------------------
'Variablen


Dim Wert1 As Byte
Dim Wert2 As Byte
Dim Wert3 As Byte
Dim Wert4 As Byte
Dim Wert5 As Byte
Dim Wert6 As Byte

Dim Tabelle(90) As Byte


'-------------------------------------------------------------------------------


Tabelle:
' W1 , W2 , W3 , W4 , W5 , W6
Data 0 , 120 , 255
Data 20 , 140 , 240
Data 40 , 160 , 220
Data 60 , 180 , 200
Data 80 , 200 , 180
Data 100 , 220 , 160
Data 120 , 240 , 140
Data 140 , 255 , 120
Data 160 , 0 , 100
Data 180 , 20 , 80
Data 200 , 40 , 60
Data 220 , 60 , 40
Data 240 , 80 , 20
Data 255 , 100 , 0

for_ro
25.01.2008, 22:22
Hallo,
schau mal unter Lookup(value,label)

Gruß

Rolf

TobiasBlome
25.01.2008, 23:17
hmmm
also bisher hab ich nur unter diesem Begriff gefunden wie ich die Werte einer Zeile nacheinander auslese.
Wie kann ich aber in Variable 1 immer den 1.Wert der jeweiligen Zeile schreiben und in Variable 2 den 2. Wert jeder Zeile usw. ?

for_ro
26.01.2008, 12:13
Ich dachte an sowas:


Dim Count As Byte 'oder word, falls nötig
Dim Next_led As Byte 'oder word, falls nötig
Dim Led_flag As Byte
Dim W1 As Byte , W2 As Byte , W3 As Byte
Dim Zeile As Byte , Position As Byte 'position evtl as word, falls die tabelle größer wird
On Timer0 Timer0_isr
Do
If Led_flag = 1 Then
Reset Led_flag
Incr Zeile
If Zeile = 14 Then Zeile = 0 'Annahme: wenn die 14 Zeilen durch sind geht's von vorne los
Position = Zeile * 3
W1 = Lookup(position , Tabelle) 'Dies liest die Werte 0,3,6,9 .. aus der Tabelle
Incr Position
W2 = Lookup(position , Tabelle) 'Dies liest die Werte 1,4,7,10 .. aus der Tabelle
Incr Position
W3 = Lookup(position , Tabelle) 'Dies liest die Werte 2,5,8,11 .. aus der Tabelle
End If

Loop

Timer0_isr:
Incr Count
If Count = Next_led Then 'dies so einstellen, dass alle 2 Sekunden das flag gesetzt wird
Set Led_flag
Count = 0
End If
Return

Tabelle:
' W1 , W2 , W3 , W4 , W5 , W6
Data 0 , 120 , 255
Data 20 , 140 , 240
Data 40 , 160 , 220
Data 60 , 180 , 200
Data 80 , 200 , 180
Data 100 , 220 , 160
Data 120 , 240 , 140
Data 140 , 255 , 120
Data 160 , 0 , 100
Data 180 , 20 , 80
Data 200 , 40 , 60
Data 220 , 60 , 40
Data 240 , 80 , 20
Data 255 , 100 , 0

Kompiliert ok, aber ist nicht getestet.

Gruß

Rolf

TobiasBlome
26.01.2008, 20:45
Super es funktioniert!
vielen Dank!

Das hatte ich aus dem RN-Wissenartikel nicht so heraus gelesen. Was mir unter anderem fehlte war die durchnummerierung. Hätte gadacht das man die Zeile angibt und dann Wert 1-3 und die nächste Zeile fängt wieder bei 1 an - ist ja aber nicht so.

Wenn ich es richtig verstanden habe muss ich wohl bei 6 Werten pro Zeile
->Position = Zeile * 6
rechnen

Also noch mal vielen Dank (auch für die guten Kommentare im Code!)

Tobias