So sieht das Programm nun erstmal aus. Wenns logischer, einfacher, etc. geht dann ruhig meckern![]()
Code:$regfile "m32def.dat" $crystal = 16000000 $framesize = 100 $swstack = 100 $hwstack = 100 Config Portd.7 = Output 'Ports/Pins definieren Config Portc = Output Config Porta = Input Config Pinb.0 = Input Declare Sub Stelle1 'Subroutinen festlegen Declare Sub Stelle2 Declare Sub Stelle3 Declare Sub Stelle4 Declare Sub Erfolg Led1 Alias Portc.7 'Alias Led2 Alias Portc.6 Led3 Alias Portc.5 Led4 Alias Portc.4 Taster Alias Pinb.0 Do If Taster = 0 Then 'Erste Stelle anwählen Gosub Stelle1 Else Toggle Portc '"Startsequenz" Waitms 500 Toggle Portc Waitms 500 End If Loop End 'end program Sub Stelle1 Do If Pina = 128 And Taster = 0 Then Gosub Stelle2 'Sprung zur nächsten Stelle wenn Eingabe richtig und bestätigung gedrückt wurde Else Toggle Led1 Waitms 500 Toggle Led1 Waitms 500 End If Loop End Sub Sub Stelle2 Do If Pina = 16 And Taster = 0 Then Gosub Stelle3 'Sprung zur nächsten Stelle wenn Eingabe richtig und bestätigung gedrückt wurde Else Toggle Led2 Waitms 500 Toggle Led2 Waitms 500 End If Loop End Sub Sub Stelle3 Do If Pina = 64 And Taster = 0 Then Gosub Stelle4 'Sprung zur nächsten Stelle wenn Eingabe richtig und bestätigung gedrückt wurde Else Toggle Led3 Waitms 500 Toggle Led3 Waitms 500 End If Loop End Sub Sub Stelle4 Do If Pina = 224 And Taster = 0 Then Gosub Erfolg 'Hier kann der Sprung zum entsperren bzw. freigabe oder wie auch immer geschehen Else Toggle Led4 Waitms 500 Toggle Led4 Waitms 500 End If Loop End Sub Sub Erfolg Sound Portd.7 , 1000 , 500 End Sub
Die Grundlegende Funktion ist schonmal erfüllt. Die If-Then-Elsif Sache zur Schalterabfrage hat sich als suboptimal herausgestellt. Als das Programm in den Subroutinen werkelte war die Abfrage aus der Hauptschleife wohl nicht verfügbar. Bei der angesprochenen Select-Case Methode ist bei mir noch kein Licht aufgegangen wie das richtig funktioniert.
Manipulationssicher ist das ganze auch noch nicht. Hält man den Taster gedrückt und dreht wild am Codierschalter, springt er natürlich von Stelle zu Stelle. Außerdem wäre dann auch noch ein Zähler notwendig, der die falschen Eingaben festhält und nach Eingabe X alles sperrt.
Gruß 128er







Zitieren

Lesezeichen