Forum: Mikrocontroller und Digitale Elektronik Ich finde den Fehler nicht :(


von [BASCOM] If else Fehler? (Gast)


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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Zähle die Zahl der If und die Zahl der End If
Die sind bei deinem Programm ungleich.

Check auch ob du statt goto ein gosub/return magst, damit die 
Unterroutine Laut: auch nach do ... loop zurückkehrt

von [BASCOM] If else Fehler? (Gast)


Lesenswert?

Ahhh Ok vielen vielen Dank!
Fehler gefunden und danke für den Tipp hab ich mit eingebunden! =)

Dankeschön

von PeterL (Gast)


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

von [BASCOM] If else Fehler? (Gast)


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!!! :)

von Joe (Gast)


Lesenswert?

Das Return muss hinter dem End If stehen !

von Joe (Gast)


Lesenswert?

Bei den Input-Ports die PullUp-Widerstände aktivieren !

Oder sind externe Widerstände vorhanden ?

von [BASCOM] If else Fehler? (Gast)


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

von hp-freund (Gast)


Lesenswert?

Bin ja nicht der BASCOM Kenner, aber sollte da nicht eine Entprellung 
der Tasten erfolgen?

von Torsten K. (ago)


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

von hp-freund (Gast)


Lesenswert?

Schau mal hier:

staff.ltam.lu/feljc/electronics/bascom/BASCOM_Tutorial_1.pdf

Kapitel 10.

von Stefan B. (stefan) Benutzerseite


Angehängte Dateien:

Lesenswert?

> Hm aber irgendwie will das Ganze nicht so wie ich wohl will! ^^
Das ist anfangs normal.

von [BASCOM] If else Fehler? (Gast)


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

von DrSeltsam (Gast)


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

von Weingut P. (weinbauer)


Lesenswert?

ein Byte kann nicht kleiner als 0 werden, das geht nur von 0 bis 255.
Negative Werte gibt es erst ab Integer und Single.

Der "kleinere" Wert von 0 ist beim Byte 255

die "+1" kannst Du auch einfach per

Incr Lautstaerke

die "-" einfach per

Decr Lautstaerke

von [BASCOM] If else Fehler? (Gast)


Lesenswert?

Ok Supper jetzt funzt es wunderbar =)

Vielen dank für die supper Hilfe =)

Schön Abend noch!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.