www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Alarmanlage (Code in Variable)


Autor: Alain F. (fox82)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

im Anhang ist eine Programmierung von einer Alarmanlage.

Das Problem ist, dass ich nun gerne den Tastendruck speichern möchte. 
Weiss aber nicht wie.

Wie kann ich z.B. 1234 in eine Varialble (int Code) speichern speichern?

Danach ist es einfach,

If Code = 123{
}

Danke für die Hilfe

Gruss Alain

Autor: schris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Coole Programmierung, mit einem Tastendruck blockiert einer dann die 
ganze Alarmanlage. Im Prinzip, sollte die Funktion abgesehen von besser 
Programmiert sein, ein byte von 0-15 zurückgeben. Damit lassen sich dann
4 Tastendrücke in eine 16bit Variable speichern, oder auch 8 in eine 
32bit Variable, da jede zahl 4bit sind.

Autor: Alain F. (fox82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das wird auch noch geändert mit die while schleife kommen noch von 
der Frequenzübermittlung an eine andere Controller. Es geht in erster 
Linie mal darum eine Zeichenfolge in einer Variable zu speichern. Der 
Rest kommt nacher.

Leider weiss ich nicht wie das geht. Die Zahl 1234 in einer Variable zu 
speichern ist leicht. Aber wie kann ich das Verknüpfen, dass ich 1 
danach 2 danach 3 danach 4 drücke?

Autor: Orikson (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde es so machen, nur mal ein Denkanstoß und kein Code:

Code = "";
If (Taste1_gedrückt) Code = Code + "1";
If (Taste2_gedrückt) Code = Code + "2";
If (Taste3_gedrückt) Code = Code + "3";
If (Taste4_gedrückt) Code = Code + "4";

Code muss natürlich ein String sein und vor der Eingabe gelöscht werden. 
Das Code + "x" heißt nur, dass hinten an den String noch was angefügt 
werden soll.

Autor: Alain F. (fox82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah danke probiere es gleich mal aus.

Autor: Alain F. (fox82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das mal so gelöst:
Wenn Bei Taste 1 Code = "1" ist und if Code == "1"
dann geht das rote LED an.

wenn ich aber das so mache wie unten, dann geht mir das rote LED nicht 
an.
while ( !(Keypad & (1<<Zeile4)) ){  // 1
Gelb_on;

Code = "1";
Code = Code + "1";
_delay_ms(500);
Gelb_off;
}


if (Code == "11"){

Rot_on;
}

Autor: Chris S. (schris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach aus der Tastaturabfrage einen Funktionsaufruf, ändere die while() 
{ ...}
in
unsigned char retval=-1;
if () { retval=1; } else if () { retval=0;}
delay().... ; led(); ...
return retval+1;

und im Main

uint32_t key=0;
byte keys=0;

...
if (c=keyboard()) { key<<=4; key|=--c; keys++; timeout=ticks+TIMEOUT; }


als Beispiel.

Autor: Alain F. (fox82)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Danke für die Antwort,

hmmm Danke für die Tipps, aber das von Chris S. ist eine Nummer zu hoch
für mich. Werde dies mal in Ruhe anschauen.

Bis jetzt funktioniert es mit diesem Code ganz gut.

LED Grün bleibt, Alarmanlage abgeschalten

Code + # --> Scharf warten ca. 30s (Verlassen des Hauses)
Alarm wird ausgelöst: ca. 8s Verzögerung danach wird Sirene aktiviert.
Alarm läuft ca. 30min danach wird automatisch beendet, respektive das 
Programm fällt in die Error-Schleife.

Das ganze hat sicherlich noch viel Verbesserungspotenzial.

Ach ja habe den Code getrickst! Jeder Tastendruck multipliziert die Zahl 
mit 10 und addiert diesen dazu. Das heisst 12 = 1 und 2 --> 1 * 10 = 10 
+ 2 = 12!

Haha!

Autor: Alain F. (fox82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja ganz komisch finde ich, wenn ich die while bei den Tasten in if 
mache dann funktioniert der Tastendruck nicht mehr bööö????

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.