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