Ich finde den Fehler nicht :(

Gast #1885582
Lesenswert?

Hi Leute,

ich habe vor einer Woche angefangen mit BASCOM ein bischen zu 
programmieren. So jetzt möchte ich mit 2 Tastern einen Zähler hoch und 
runter zählen lassen. Jenachdem welchen Wert der Zähler hat soll eine 
LED mehr oder weniger anfangen zu leuchten. Aber ich bekomme beim 
Compelieren
immer folgende Fehler:

Error: 7 Line: 57 IF THEN expected [57] , in File ......
Error: 123 Line: 57 END IF expected , in File ......

Das Ding ist wenn ich doppelt auf den Fehler klicke springt er in eine 
Zeile wo ich gar nichts geschrieben habe! -.-

Hier mein Code:

$regfile = "m88def.dat"
$crystal = 8000000
$hwstack = 100

' Ausgänge

Led1 Alias Portb.1
Config Led1 = Output

Led2 Alias Portb.2
Config Led2 = Output

Led3 Alias Portb.3
Config Led3 = Output

' Eingänge

Lauter Alias Pind.3
Config Lauter = Input
Lauter = 1

Leiser Alias Pind.2
Config Leiser = Input
Leiser = 1

Dim Zaehler As Byte

' Variablen

Zaehler = 2


Schritt1:

Do
  If Lauter = 0 Then
    Zaehler = Zaehler + 1
    Goto Laut
    Else
    If Leiser = 0 Then
    Zaehler = Zaehler - 1
    Goto Laut
  End If
Loop

Laut:

If Zaehler = 1 Then
 Set Led1
 Reset Led2
 Reset Led3
End If

End



Ich hoffe Ihr könnt mir helfen.
Danke

lg DistanZ
Gast #1885610
Lesenswert?

Fehler müssen nicht unbedingt in der angezeigten Zeile sein.

Do
  If Lauter = 0 Then
                    Zaehler = Zaehler + 1
                    Goto Laut
                Else
                    If Leiser = 0 Then
                                      Zaehler = Zaehler - 1
                                      Goto Laut
                                  endif  '!!!!!!!!!!!
                     End If

loop
Gast #1885622
Lesenswert?

Hm aber irgendwie will das Ganze nicht so wie ich wohl will! ^^
Wenn ich einmal auf den Taster "Lauter" drücke geht eine LED an und wenn 
ich dann auf "leiser" drücke tut sich gar nichts mehr!
Wenn ich als erstes "leiser" drücke gehen alle LEDs an und dann tut sich 
nichts mehr. :(

Woran kann das liegen?

$regfile = "m88def.dat"
$crystal = 8000000
$hwstack = 100

' Ausgänge

Led1 Alias Portb.1
Config Led1 = Output

Led2 Alias Portb.2
Config Led2 = Output

Led3 Alias Portb.3
Config Led3 = Output

' Eingänge

Lauter Alias Pind.3
Config Lauter = Input
Lauter = 1

Leiser Alias Pind.2
Config Leiser = Input
Leiser = 1

Dim Zaehler As Byte

' Variablen

Zaehler = 2


Schritt1:

Do
  If Lauter = 0 Then
    Zaehler = Zaehler + 1
    Gosub Laut
    Elseif Leiser = 0 Then
    Zaehler = Zaehler - 1
    Gosub Laut
  End If
Loop

Laut:

If Zaehler = 1 Then
 Set Led1
 Reset Led2
 Reset Led3
 Return
End If

If Zaehler = 2 Then
 Set Led1
 Set Led2
 Reset Led3
 Return
End If

If Zaehler = 3 Then
 Set Led1
 Set Led2
 Set Led3
 Return
End If

End


Dankeschön!!! :)
Gast #1885659
Lesenswert?

Das geht leider irgendwie nicht! :(

$regfile = "m88def.dat"
$crystal = 8000000
$hwstack = 100

' Ausgänge

Led1 Alias Portb.1
Config Led1 = Output

Led2 Alias Portb.2
Config Led2 = Output

Led3 Alias Portb.3
Config Led3 = Output

' Eingänge

Lauter Alias Pind.3
Config Lauter = Input
Lauter = 1

Leiser Alias Pind.2
Config Leiser = Input
Leiser = 1

Dim Zaehler As Byte

' Variablen

Zaehler = 2
Goto Laut



Schritt1:
Do
  If Lauter = 0 Then
    Zaehler = Zaehler + 1
    Gosub Laut
  Elseif Leiser = 0 Then
    Zaehler = Zaehler - 1
    Gosub Laut
  End If
Loop

Laut:

If Zaehler = 1 Then
 Set Led1
 Reset Led2
 Reset Led3
End If
Return

If Zaehler = 2 Then
 Set Led1
 Set Led2
 Reset Led3
End If
Return

If Zaehler = 3 Then
 Set Led1
 Set Led2
 Set Led3
End If
Return

End
#1885680
Lesenswert?

Ähm... die Return gehören mit Sicherheit vor die End If's, sonst wird 
doch "If Zaehler = 2"... nie erreicht.
Außerdem steht da immernoch "Goto Laut" ;-)

Das Ende könnte man aber auch so schreiben:
Laut:

If Zaehler = 1 Then
 Set Led1
 Reset Led2
 Reset Led3
End If

If Zaehler = 2 Then
 Set Led1
 Set Led2
 Reset Led3
End If

If Zaehler = 3 Then
 Set Led1
 Set Led2
 Set Led3
End If
Return
Gast #1885760
Lesenswert?

Vielen Vielen Danke das funktioniert soweit wie ich das gerne möchte 
echt gut nur wenn ich die "leiser" taste gedrückt halte geht nach 1 
sekunde alles wieder an wenn ich aber lauter gedrückt halte gehen alle 
an und es bleibt so! Hm nun warum gehen aufeinmal alle LEDs wieder an 
wenn ich Leiser grdrückt halte?

lg

                         $regfile = "m88def.dat"
$crystal = 8000000
$hwstack = 100

' Ausgänge

Led1 Alias Portb.1
Config Led1 = Output

Led2 Alias Portb.2
Config Led2 = Output

Led3 Alias Portb.3
Config Led3 = Output

' Eingänge

Lauter Alias Pind.3
Config Lauter = Input
Lauter = 1

Leiser Alias Pind.2
Config Leiser = Input
Leiser = 1

Dim Lautstaerke As Byte

' Variablen
Lautstaerke = 2

' Ewige Hauptschleife
Do
  If Lauter = 0 Then
    Lautstaerke = Lautstaerke + 1
    Gosub Laut
    Elseif Leiser = 0 Then
    Lautstaerke = Lautstaerke - 1
    Gosub Laut
  End If
  Wait 1                                                    ' vor 
nächster Auswertung 1s Warten
Loop

'
Laut:
  If Lautstaerke < 0 Then
    Lautstaerke = 0
  End If

  If Lautstaerke > 3 Then
    Lautstaerke = 3
  End If

  If Lautstaerke = 0 Then
     Reset Led1
     Reset Led2
     Reset Led3
  End If


  If Lautstaerke = 1 Then
    Set Led1
    Reset Led2
    Reset Led3
  End If

  If Lautstaerke = 2 Then
    Set Led1
    Set Led2
    Reset Led3
  End If

  If Lautstaerke = 3 Then
    Set Led1
    Set Led2
    Set Led3
  End If
Return

End
Gast #1885768
Lesenswert?

...weil die Variable "Lautstärke" als BYTE definiert ist, welches den 
Wertebereich von 0...255 umfasst.

Die Abfrage

"  If Lautstaerke < 0 Then
    Lautstaerke = 0
  End If"

wird daher nicht funktionieren.
Definiere (spaßeshalber) "Lautstärke" 'mal als "SINGLE"...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren