mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Passwort per Tastendruck um ein Zeichen minimieren,Getkbg


Autor: AT32_Bascom_Programmierer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da du hier
      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?
      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ß 
:-)

Autor: AT32_Bascom_Programmierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: AT32_Bascom_Programmierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: AT32_Bascom_Programmierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: AT32_Bascom_Programmierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mir fällt gerade noch was auf... ich bekomme das erste Zeichen meiner 
Eingabe nicht gelöscht sieht jemand woran es liegen kann???

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
         Anzahl = Len(eingabe)                              '!!!!!!!so sollte es meiner Meinung gehn... geht aber nicht...!!!!!!!!!!!!!!!!!!!!!!!!!
         Anzahl = Anzahl - 1                                '!!!!!!!!es wird immer ein "#" zeichen anstelle der geschriebennen Zahl geschrieben!!!!
         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 :-)

Autor: AT32_Bascom_Programmierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: AT32_Bascom_Programmierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 = "")

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?)

Autor: AT32_Bascom_Programmierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: AT32_Bascom_Programmierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> PS: das ELSe bei IF THEN ENDIF hast du aber schon entdeckt?)


wie darf ich das verstehen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ü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

Autor: AT32_Bascom_Programmierer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: AT32_Bascom_Programmierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo vielen lieben dank für diesen sehr ausführlichen Tipp...

sorry das ich erst so spät schreibe...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.