PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe...finde die fehler nicht heraus



Kuwe
21.04.2010, 15:15
Hi :-s ,
Ich arbeite an einem Projekt für ein Referat. Dabei lese ich eine Lichtschranke aus. Ich möchte aus dem Code der von der Lichtschranke kommt, buchstaben bekommen, ähnlcih wie ein bit-code....Nun bin ich am programmieren. Problem: Bascom findet fehler und ich finde nicht heraus wie ich diese behebe. Würde mich über Antworten sehr freuen.

Hier die Fehler:
Line 111 3 Parameters expected
Line 113 Source Variable does not match the target variable
line 0 If then expeted
und line 0 end if expected


Hier der Code....Ich weis er ist einfach geschrieben, ohne Funktionen und so.





$regfile = "m32def.dat"

$framesize = 32
$swstack = 32
$hwstack = 32



Config Pinc.4 = Input
Config Pinc.5 = Input
Config Pinc.6 = Output
Config Pind.7 = Output
Config Pina.1 = Output

Dim Wert As Integer
Dim Licht As Integer
Dim Eins As Integer
Dim Zwei As Integer
Dim Drei As Integer
Dim Vier As Integer
Dim Funf As Integer
Dim Sechs As Integer
Dim Sieben As Integer
Dim Acht As Integer
Dim Neun As Integer


Dim Zahl As String * 200
Dim Zeichen As String * 200

Pinc.4 = 1
Pinc.5 = 1
Pinc.6 = 1

Sound Portd.7 , 400 , 450 'als start
Waitms 500
Sound Portd.7 , 400 , 450

Config Adc = Single , Prescaler = Auto


Do


Start Adc
Licht = Getadc(1)
If Licht > 900 Then
Eins = 1
Else
If Licht < 900then
Eins = 0
Else


If Licht > 900 Then
Zwei = 2
Else
If Licht < 900 Then
Zwei = 0
Else


If Licht > 900 Then
Drei = 4
Else
If Licht < 900 Then
Drei = 0
Else


If Licht > 900 Then
Vier = 7
Else
If Licht < 900 Then
Vier = 0
Else


If Licht > 900 Then
Funf = 15
Else
If Licht < 900 Then
Funf = 0
Else

If Licht > 900 Then
Sechs = 30
Else
If Licht < 900then
Sechs = 0
Else


If Licht > 900 Then
Sieben = 60
Else
If Licht < 900 Then
Sieben = 0
Else


If Licht > 900 Then
Acht = 90
Else
If Licht < 900 Then
Acht = 0
Else
Wert = A + B + C + D + E + F + G + H
If Wert = 1 Then
Zeichen = A

If Wert = 2 Then
Zeichen = B
Else
If Wert = 4 Then
Zeichen = C
Else
If Wert = 7 Then
Zeichen = D
Else
If Wert = 15 Then
Zeichen = E

If Wert = 30 Then
Zeichen = F

If Wert = 60 Then
Zeichen = G

If Wert = 90 Then
Zeichen = H

If Wert = 3 Then
Zeichen = I

If Wert = 5 Then
Zeichen = J

If Wert = 16 Then
Zeichen = K

If Wert = 31 Then
Zeichen = L

If Wert = 61 Then
Zeichen = M
If Wert = 91 Then
Zeichen = N
If Wert = 6 Then
Zeichen = O
If Wert = 9 Then
Zeichen = P
If Wert = 17 Then
Zeichen = Q
If Wert = 32 Then
Zeichen = R
If Wert = 62 Then
Zeichen = S
If Wert = 64 Then
Zeichen = T
If Wert = 94 Then
Zeichen = U
If Wert = 11 Then
Zeichen = V
If Wert = 19 Then
Zeichen = W
If Wert = 34 Then
Zeichen = X
If Wert = 94 Then
Zeichen = Y



End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If

Print Zeichen





Loop

Jaecko
21.04.2010, 15:46
Tausch mal dieses Monster an If...Then..Endif-Verschachtelungen gegen ne Select Case aus. So ist das nicht gerade übersichtlich. Und Nachzählen, ob die Anzahl an End If stimmt will glaub ich keiner.

Select Case Wert
Case 1: Zeichen = A
Case 2: Zeichen = B
....
End Select

jo_robot
21.04.2010, 15:47
1. fehler: outputs als Port nicht als pin configuren
2. fehler bei den pullups port= 1 nicht pin
3. warum machst du die end ifs alle am schluss? und nicht nach jedem if satz? weil so wie es jetzt ist macht er im unterren teil nur was wenn wert = 1 ist :) tipp: um sowas zu lösen ist select case auch ganz schön.

4. ganz am ende fehlt noch ein (formales) "end"

Kuwe
21.04.2010, 16:12
super vielen dank.... aber die probleme bestehen weiterhin.

Jaecko
21.04.2010, 16:25
Wie sieht denn der Code jetzt aus?

jo_robot
21.04.2010, 16:44
das wäre das einfachste wenn du den code nochmal postest. am besten makierst du den code dann noch und drückst oben auf den "code" butten (du kannst auch von hand [ code ] CODECODECOEDECODE [ / code ] ohne den leerzeichen in den klammern natürlich machen. Dann wird der Code schön formatiert angezeigt

Kuwe
21.04.2010, 16:51
$regfile = "m32def.dat"

$framesize = 32
$swstack = 32
$hwstack = 32



Config Portc.4 = Input
Config Portc.5 = Input
Config Portc.6 = Output
Config Portd.7 = Output
Config Porta.1 = Output

Dim Wert As Integer
Dim Licht As Integer
Dim Eins As Integer
Dim Zwei As Integer
Dim Drei As Integer
Dim Vier As Integer
Dim Funf As Integer
Dim Sechs As Integer
Dim Sieben As Integer
Dim Acht As Integer
Dim Neun As Integer


Dim Zahl As String * 200
Dim Zeichen As String * 200

Portc.4 = 1
Portc.5 = 1
Portc.6 = 1

Sound Portd.7 , 400 , 450 'als start
Waitms 500
Sound Portd.7 , 400 , 450

Config Adc = Single , Prescaler = Auto


Do


Start Adc
Licht = Getadc(1)
If Licht > 900 Then
Eins = 1
End If
If Licht < 900then
Eins = 0
End If


If Licht > 900 Then
Zwei = 2
End If
If Licht < 900 Then
Zwei = 0

End If
If Licht > 900 Then
Drei = 4
End If
If Licht < 900 Then
Drei = 0
End If


If Licht > 900 Then
Vier = 7
End If
If Licht < 900 Then
Vier = 0
End If


If Licht > 900 Then
Funf = 15
End If
If Licht < 900 Then
Funf = 0
End If

If Licht > 900 Then
Sechs = 30
End If
If Licht < 900then
Sechs = 0
End If


If Licht > 900 Then
Sieben = 60
End If
If Licht < 900 Then
Sieben = 0
End If


If Licht > 900 Then
Acht = 90
End If
If Licht < 900 Then
Acht = 0
End If
Wert = A + B + C + D + E + F + G + H
If Wert = 1 Then
Zeichen = A
End If
If Wert = 2 Then
Zeichen = B
End If

If Wert = 4 Then
Zeichen = C
End If
If Wert = 7 Then
Zeichen = D
End If
If Wert = 15 Then
Zeichen = E
End If
If Wert = 30 Then
Zeichen = F
End If
If Wert = 60 Then
Zeichen = G
End If
If Wert = 90 Then
Zeichen = H
End If
If Wert = 3 Then
Zeichen = I
End If
If Wert = 5 Then
Zeichen = J
End If
If Wert = 16 Then
Zeichen = K
End If
If Wert = 31 Then
Zeichen = L
End If
If Wert = 61 Then
Zeichen = M
End If
If Wert = 91 Then
Zeichen = N
End If
If Wert = 6 Then
Zeichen = O
End If
If Wert = 9 Then
Zeichen = P
End If
If Wert = 17 Then
Zeichen = Q
End If
If Wert = 32 Then
Zeichen = R
End If
If Wert = 62 Then
Zeichen = S
End If
If Wert = 64 Then
Zeichen = T
End If
If Wert = 94 Then
Zeichen = U
End If
If Wert = 11 Then
Zeichen = V
End If
If Wert = 19 Then
Zeichen = W
End If
If Wert = 34 Then
Zeichen = X
End If
If Wert = 94 Then
Zeichen = Y

End If





Print Zeichen





Loop
End

Kuwe
21.04.2010, 16:52
Über das select case weis ich nicht genau bescheid., deshalb würde ich gerne beim if bleiben

jo_robot
21.04.2010, 17:13
Das mit If ist auch ok.

am anfang sollte noch baudrate rein:

d.h. $baud = 9600
oder was auch immer du benützt

dann die inputs müssen mit pin declariert werden.. da ist bascom ein wenig eigen. Output --> port input-->pin und pullups ein port

dann If Licht < 900then fehlt ein leerzeichen

jo_robot
21.04.2010, 17:15
was macht die zeile

wert = A+B....

ich seh nirgends ein A,B oder C :)

Kuwe
21.04.2010, 17:35
oh....da sollten eig die einzelnen werte zusammengezählt werden.
mhh die probleme die er mir angibt sind noch folgende

in der zeile:

Wert = eins + zwei + drei + vier +funf + sechs +sieben +acht

also ich wollte dort die einzelnen variablen addieren und den Wert in einer neuen Variable (Wert (integer)) Speichern.
Doch basom sagt mir 3 parameters expeckted

andere Fehler zusätzlich

Ich kann in der Var. Zeichen keine Buchstaben speichern<


und:
er findet kein if und kein end if in zeile 0

hier nochmal der code






$regfile = "m32def.dat"

$framesize = 32
$swstack = 32
$hwstack = 32



Config Portc.4 = Input
Config Portc.5 = Input
Config Portc.6 = Output
Config Portd.7 = Output
Config Porta.1 = Output

Dim Wert As Integer
Dim Licht As Integer
Dim Eins As Integer
Dim Zwei As Integer
Dim Drei As Integer
Dim Vier As Integer
Dim Funf As Integer
Dim Sechs As Integer
Dim Sieben As Integer
Dim Acht As Integer
Dim Neun As Integer


Dim Zahl As String * 200
Dim Zeichen As String * 200

Portc.4 = 1
Portc.5 = 1
Portc.6 = 1

Sound Portd.7 , 400 , 450
Waitms 500
Sound Portd.7 , 400 , 450

Config Adc = Single , Prescaler = Auto


Do


Start Adc
Licht = Getadc(1)
If Licht > 900 Then
Eins = 1
End If
If Licht < 900then
Eins = 0
End If


If Licht > 900 Then
Zwei = 2
End If
If Licht < 900 Then
Zwei = 0

End If
If Licht > 900 Then
Drei = 4
End If
If Licht < 900 Then
Drei = 0
End If


If Licht > 900 Then
Vier = 7
End If
If Licht < 900 Then
Vier = 0
End If


If Licht > 900 Then
Funf = 15
End If
If Licht < 900 Then
Funf = 0
End If

If Licht > 900 Then
Sechs = 30
End If
If Licht < 900then
Sechs = 0
End If


If Licht > 900 Then
Sieben = 60
End If
If Licht < 900 Then
Sieben = 0
End If


If Licht > 900 Then
Acht = 90
End If
If Licht < 900 Then
Acht = 0
End If

Wert = Eins + Zwei + Drei + Vier + Funf + Sechs + Sieben + Acht




If Wert = 1 Then
Zeichen = A
End If
If Wert = 2 Then
Zeichen = B
End If

If Wert = 4 Then
Zeichen = C
End If
If Wert = 7 Then
Zeichen = D
End If
If Wert = 15 Then
Zeichen = E
End If
If Wert = 30 Then
Zeichen = F
End If
If Wert = 60 Then
Zeichen = G
End If
If Wert = 90 Then
Zeichen = H
End If
If Wert = 3 Then
Zeichen = I
End If
If Wert = 5 Then
Zeichen = J
End If
If Wert = 16 Then
Zeichen = K
End If
If Wert = 31 Then
Zeichen = L
End If
If Wert = 61 Then
Zeichen = M
End If
If Wert = 91 Then
Zeichen = N
End If
If Wert = 6 Then
Zeichen = O
End If
If Wert = 9 Then
Zeichen = P
End If
If Wert = 17 Then
Zeichen = Q
End If
If Wert = 32 Then
Zeichen = R
End If
If Wert = 62 Then
Zeichen = S
End If
If Wert = 64 Then
Zeichen = T
End If
If Wert = 94 Then
Zeichen = U
End If
If Wert = 11 Then
Zeichen = V
End If
If Wert = 19 Then
Zeichen = W
End If
If Wert = 34 Then
Zeichen = X
End If
If Wert = 94 Then
Zeichen = Y

End If





Print Zeichen





Loop
End

Jaecko
21.04.2010, 18:11
Achja... da war was...
Das hier:
Wert = eins + zwei + drei + vier +funf + sechs +sieben +acht
kann Bascom nicht.
Es kann immer nur 1 Operator verwendet werden.
Also Wert = Eins + Zwei, dann Wert = Wert + Drei etc...

Kuwe
21.04.2010, 18:25
danke für die vielen mühen......entlich klappt es super.
kai

jo_robot
21.04.2010, 20:29
Immerwieder gerne :) Wir haben alle mal so angefangen xD

danke für die vielen mühen......entlich klappt es super.
kai