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
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
Ahhh Ok vielen vielen Dank! Fehler gefunden und danke für den Tipp hab ich mit eingebunden! =) Dankeschön
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
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!!! :)
Bei den Input-Ports die PullUp-Widerstände aktivieren ! Oder sind externe Widerstände vorhanden ?
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
Bin ja nicht der BASCOM Kenner, aber sollte da nicht eine Entprellung der Tasten erfolgen?
Ä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
Schau mal hier: staff.ltam.lu/feljc/electronics/bascom/BASCOM_Tutorial_1.pdf Kapitel 10.
> Hm aber irgendwie will das Ganze nicht so wie ich wohl will! ^^
Das ist anfangs normal.
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
...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"...
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.