Alarmanlage (Code in Variable)

OP #1210265
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
Angehängte Dateien:
Gast #1210273
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.
OP #1210295
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?
Gast #1210306
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.
OP #1210347
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.
1
while ( !(Keypad & (1<<Zeile4)) ){  // 1
2
Gelb_on;
3

4
Code = "1";
5
Code = Code + "1";
6
_delay_ms(500);
7
Gelb_off;
8
}
9

10

11
if (Code == "11"){
12

13
Rot_on;
14
}
#1210492
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.
OP #1212754
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!
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.