Hallo liebe µC- Freunde ich bin gerade dabei eine Password abfrage zu programmieren, habe bereits im Forum gesucht jedoch nichts brauchbares gefunden... Ich möchte ein Passwort abfragen und dann auswerten (funktioniert bereits) Nun zu meinem Problem: ich arbeite mit Bascom und möchte mit dem befehl Getkbg arbeiten der es ermöglicht ein 3x4 Zahlenfeld auszulesen... jedoch schaffe ich es nicht eine Ziffer aus meinem Eingegebenen String per Tastendruck zu löschen. Bitte daher um Hilfe... Mein Programm befindet sich im Anhang, habe es reichlich Kommentiert
Da du hier
1 | Keycode = Keycode + 1 'könnte aich incr KEYCODE sein |
den KeyCode um 1 erhöhst, sollte dann nicht eigentlich, laut deiner Tabelle, für # mit 15 verglichen werden und nicht mit 14?
1 | If Keycode = 15 Then 'wird die taste "#" gedrückt werden soll eine Ziffer im Passwort gelöscht werden |
Du hättest auch schreiben können if Taste = "#" Then aber da wäre dann das Potential sich selbst auszutricksen nicht so groß :-)
hallo... danke Karl Heinz... jetzt suche ich schon seit mehreren Tagen nach diesem Problem und dann ist es so einfach... muss jetzt noch hinzufügen das dass letzte Zeichen auch am Bildschirm gelöscht wird Funktioniert auch noch nicht richtig... schon mal vielen Dank für die Hilfe
Kriegst du sicher hin. Der Tip den ich dir gebe. Wenn du Text überschreibst, dann denk daran: Die Teile die du nicht überschreibst, sind nach wie vor sichtbar. Hast du also einen 3 buchstabigen String auf der Anzeige und überschreibst du ihn mit einem 2-buchstabigen, dann bleibt die 3. Stelle vom alten String sichtbar.
ach ja... ich habe da noch eine Frage... die jetzt nicht direkt etwas hiermit zu tun hat... Woran liegt das, dass beim übertragen eines Programmes (via Bascom) oftmals der Fehler " Differene at 00100" kommt (Zahl ändert immer... das ist ziemlich störend da ich sehr oft übertragen muss um mein Programm zu testen... Anfangs hatte ich dieses Problem nie... ein freund meinte das es am Quarz liegen könnte stimmt das? (P.S.: habe jetzt (if Taste = "#" then) ins Programm geschrieben da das mit den Keycode's sonst nur noch mehr durcheinander wird... wenn ich auch noch eine Bestätigung's Taste mache
zum überschreiben der alten Anzeige hab ichs jetzt so gemacht
>>>
Locate 2 , 1
'der gesamte String wird angezeigt "zur Kontrolle"
Lcd Eingabe ; " "
Waitms 100
' durch den Getadc Befehl müssen 100ms gewachtet werden
mir fällt gerade noch was auf... ich bekomme das erste Zeichen meiner Eingabe nicht gelöscht sieht jemand woran es liegen kann???
AT32_Bascom_Programmierer schrieb: > mir fällt gerade noch was auf... ich bekomme das erste Zeichen meiner > Eingabe nicht gelöscht sieht jemand woran es liegen kann??? Ohne jetzt in die BASCOM Hilfe geschaut zuhaben
1 | Anzahl = Len(eingabe) '!!!!!!!so sollte es meiner Meinung gehn... geht aber nicht...!!!!!!!!!!!!!!!!!!!!!!!!! |
2 | Anzahl = Anzahl - 1 '!!!!!!!!es wird immer ein "#" zeichen anstelle der geschriebennen Zahl geschrieben!!!! |
3 | Eingabe = Left(eingabe , Anzahl) '!!!!!!!wie kann ih das lösen?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
Left wird wohl verweigern, wenn du einen Substring der Länge 0 haben willst. (Btw. was passiert dann eigentlich wenn du dann nochmal # drückst :-)
in der Bascom Hilfe finde ich nichts , das darauf deutet das es keinen Substring der länge 0 geben darf... jedoch passiert nichts wenn ich weiter auf "#" drücke ich versuche dieses hier jetzt noch... jedoch dauert es immer sehr lange bis ich mal was übertragen bekomme, da ich immer diese Fehlmeldung am ende des Vorgangs erhalte
AT32_Bascom_Programmierer schrieb: > in der Bascom Hilfe finde ich nichts , das darauf deutet das es keinen > Substring der länge 0 geben darf... Na ja. Die Anforderung 'Gib mir die 0 linken Zeichen eines Strings' klingt ein wenig albern. Man muss kein Hellseher sein um das Ergebnis vorhersagen zu können. Kann gut sein, dass der Hersteller entschieden hat, dass diese Operation nicht geht. Aber: Im Zweifel - schreib dir ein Testprogramm und probiers aus. > jedoch dauert es immer sehr lange bis ich mal was übertragen bekomme, da > ich immer diese Fehlmeldung am ende des Vorgangs erhalte Dazu kann ich wenig sagen. Verkabelung checken. Kabel auf Defekte absuchen. An den Steckern wackeln, etc.
ich hab jetzt noch ne andere Idee, die evt schlauer ist als die vorherige If Taste = "#" Then ' = Keycode14+1 = Keycode 15 Anzahl = Len(eingabe) Anzahl = Anzahl - 1 Eingabe = Left(eingabe , Anzahl) If Anzahl = 1 Then 'überprüfen !$!$!$!$!$!!$!$!$!$!$!$!$!$!$! Eingabe = "" End If Else 'sollte eine andere Taste gedrücht werden: If Len(eingabe) < 4 Then 'muss die gesamt länge unter 4 zeichen sein Eingabe = Eingabe + Chr(taste) 'dann wird eine Ziffer dran gehangen End If End If End If hier sage ich einfach das wenn anzahl den Wert 1 erreicht , und nochmal auf löschen gedrückt wird der String "eingabe gelöscht wird...(>>>Eingabe = "")
AT32_Bascom_Programmierer schrieb: > hier sage ich einfach das wenn anzahl den Wert 1 erreicht , und nochmal > auf löschen gedrückt wird der String "eingabe gelöscht Anzahl ist aber zu diesem Zeitpunkt nicht mehr 1 :-) Du hast es vorher schon um 1 vermindert. Und wenn geht such nach einer Lösung, die auch dann funktioniert, wenn der String schon leer ist und in dem Fall Anzahl dann in Ruhe lässt :-) Sonst musst du nach 8 mal # drücken mindestens 3 mal eine andere taste drücken, damit dein System bei 'Kein Tastendruck vorhanden' angelangt ist. Frei nach: Wenn aus einem Raum mit 5 Leuten 9 hinausgehen, wieviele müssen wieder reingehen, damit keiner drinnen ist? (PS: das ELSE bei IF THEN ENDIF hast du aber schon entdeckt?)
Karl heinz Buchegger schrieb: > Anzahl ist aber zu diesem Zeitpunkt nicht mehr 1 :-) > Du hast es vorher schon um 1 vermindert. hmm... stimmt auch wieder... dann versuch ich's mal mit if anzahl = 0 then...
Karl heinz Buchegger schrieb: > PS: das ELSe bei IF THEN ENDIF hast du aber schon entdeckt?) wie darf ich das verstehen?
Überleg mal, was das hier logikmässig machen würde Anzahl = Len(eingabe) IF Anzahl < 2 THEN ' 1 oder 0 Anzahl = 0 Eingabe = "" ELSE Anzahl = Anzahl - 1 Eingabe = Left(eingabe , Anzahl) End If
Karl heinz Buchegger schrieb: > Anzahl = Len(eingabe) > > IF Anzahl < 2 THEN ' 1 oder 0 > Anzahl = 0 > Eingabe = "" > ELSE > Anzahl = Anzahl - 1 > Eingabe = Left(eingabe , Anzahl) > End If ja das würde nichts bringen...oder? ich habe das auch nicht so in meinem programm... siehe Anhang
AT32_Bascom_Programmierer schrieb: > Karl heinz Buchegger schrieb: >> Anzahl = Len(eingabe) >> >> IF Anzahl < 2 THEN ' 1 oder 0 >> Anzahl = 0 >> Eingabe = "" >> ELSE >> Anzahl = Anzahl - 1 >> Eingabe = Left(eingabe , Anzahl) >> End If > > > ja das würde nichts bringen...oder? Warum sollte das nichts bringen? Gehs doch mal durch Angenommen dein String in eingabe sei "2" Anzahl = Len(eingabe) Anzahl bekommt dann den Wert 1 IF Anzahl < 2 THEN Ist das der Fall? Da Anzahl 1 ist und 1 kleiner als 2 ist, ist das der Fall. Also gehts weiter mit ANzahl = 0 Eingabe = "" Das besagt: Es wurde keine Taste gedrückt und der Eingabestring ist leer. Genau das was man erwarten würde, wenn bei "2" ein Zeichen gelöscht wird. So, jetzt sei in Eingabe der leere String. Wieder drückst du #, was passiert? Anzahl bekommt daher den Wert 0, weil Len vom leeren String nun mal 0 ist. IF Anzahl < 2 THEN Ist das der Fall? Ja, das ist der Fall. 0 ist kleiner als 2. Also gehts wie weiter? ANzahl = 0 Eingabe = "" Hmm. Nichts passiert. Anzahl bleibt 0 und Eingabe wird wieder auf den leeren String gesetzt. Genau so wie es sein soll.
Hallo vielen lieben dank für diesen sehr ausführlichen Tipp... sorry das ich erst so spät schreibe...
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.