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


von Alain F. (fox82)


Angehängte Dateien:

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

von schris (Gast)


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.

von Alain F. (fox82)


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?

von Orikson (Gast)


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.

von Alain F. (fox82)


Lesenswert?

Ah danke probiere es gleich mal aus.

von Alain F. (fox82)


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

von Chris S. (schris)


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.

von Alain F. (fox82)


Angehängte Dateien:

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!

von Alain F. (fox82)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.