INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Tastereingang gegen mehrmaliges drücken sperren
23.02.2016, 19:52 (Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2016 20:02 von Haustechno.)
Beitrag #1
Tastereingang gegen mehrmaliges drücken sperren
Abend,

ich brauche einen Taster,der nach dem er 1 mal gedrückt wurde so lange nicht mehr aktiv ist bis das Programm abgearbeitet ist:

Hier mein code:

Code:
//=======  Optokoppler Tastersimu ===================
int SimuTasterIntern = 2;
int SimuTasterDown = 3;
int SimuTasterAbnehmen = 4;
int SimuTasterLaut = 5;
int SimuTasterAuflegen = 6;     // Tastersimu Auflegen
int relayOpen = 7;              // Tür Summer
int sperreRelais = 8;           // Tastersperre
int DTMFpower = 9;

//=======  I/O ======================================
const int buttonPin1 = 11;     // Klingeltaster 1
const int buttonPin2 = 12;     // Klingeltaster 2
const int buttonPin3 = 13;     // EngangDTMF
// ====== Zustand speichern =========================
int buttonState1 = 0;          // Taster Klingel 1 Zustand
int buttonState2 = 0;          // Taster Klingel 2 Zustand
int buttonState3 = 0;          // Eingang DTMF Modul Zustand
//##################################### SETUP #######################
void setup()
  {
  Serial.begin(9600);
  pinMode(buttonPin1, INPUT_PULLUP);  // Klingeltaster 1
  pinMode(buttonPin2,INPUT_PULLUP);   // Klingeltaster 2
  pinMode(buttonPin3,INPUT);          // EingangDTMF Taste#
  
  pinMode(SimuTasterIntern,OUTPUT);
  digitalWrite(SimuTasterIntern,LOW);
  
  pinMode(SimuTasterDown,OUTPUT);
  digitalWrite(SimuTasterDown,LOW);
  
  pinMode(SimuTasterLaut,OUTPUT);
  digitalWrite(SimuTasterLaut,LOW);
  
  pinMode(SimuTasterAbnehmen,OUTPUT);
  digitalWrite(SimuTasterAbnehmen,LOW);
  
  pinMode(SimuTasterAuflegen,OUTPUT);
  digitalWrite(SimuTasterAuflegen,LOW);
  
  pinMode(relayOpen,OUTPUT);
  digitalWrite(relayOpen,HIGH);
  
  pinMode(sperreRelais,OUTPUT);
  digitalWrite(sperreRelais,LOW);
  
  pinMode(DTMFpower,OUTPUT);
  digitalWrite(DTMFpower ,LOW);
  
  
  
  
  delay(1000);
  digitalWrite(SimuTasterAuflegen,HIGH);           // Hörer auflegen als Reset beim Start
  delay(500);
  digitalWrite(SimuTasterAuflegen,LOW);
  
  Serial.print("Sprechanlage gestartet ! ");       // Serialausgabe Start
}
void loop()
{
//========================== Klingeltaster 1 Aktion ====================================
buttonState1 = digitalRead(buttonPin1);
    if (buttonState1 == LOW) {
    Serial.println("Klingel 1 gedrueckt");  
    Klingel_1();
  }
  else {
    // Standby
  }
// ========================= Klingeltaster 2 Aktion ====================================
buttonState2 = digitalRead(buttonPin2);
    if (buttonState2 == LOW) {
    Serial.println("Klingel 2 gedrueckt");  
    Klingel_2();
  }
  else {
    // Standby
  }
buttonState3 = digitalRead(buttonPin3);      // Wenn DTMF Modul die Taste# erkannt hat
   if (buttonState3 == HIGH) {
   Serial.println("DTMF erkannt #");
   digitalWrite(relayOpen,LOW);             // Türöffner aktiv
   delay(6000);
   digitalWrite(relayOpen,HIGH);            // Türöffner ausschalten
   Serial.println("Tueroeffner aktiviert");
   delay(2000);
   digitalWrite(DTMFpower,LOW);             // DTMF Modul abschalten
   delay(200);
   digitalWrite(SimuTasterAuflegen,HIGH);   // Gespräch beenden
   delay(200);
   digitalWrite(SimuTasterAuflegen,LOW);
}
  else {
    // Standby
  }
}
//========================== Funktion Klingel 1 ============================
void Klingel_1()
{
  Serial.println("Klingel 1 Aktion gestartet !");
  digitalWrite(SimuTasterIntern,HIGH);               // Intern wählen
  Serial.println("Interntaste aktiv");
  delay(100);
  digitalWrite(SimuTasterIntern,LOW);
  delay(200); // Pause
  digitalWrite(SimuTasterDown,HIGH);               // Runter
  Serial.println("Runter Taste aktiv1");
  delay(100);
  digitalWrite(SimuTasterDown,LOW);
  delay(200); // Pause
  digitalWrite(SimuTasterDown,HIGH);               // Runter
  Serial.println("Runter Taste aktiv2");
  delay(100);
  digitalWrite(SimuTasterDown,LOW);
  delay(200); // Pause
  digitalWrite(SimuTasterDown,HIGH);               // Runter
  Serial.println("Runter Taste aktiv");
  delay(100);
  digitalWrite(SimuTasterDown,LOW);
  delay(200);
  digitalWrite(SimuTasterLaut,HIGH);              // Lautsprecher einschalten
  Serial.println("Lautsprecher aktiviert");
  delay(100);
  digitalWrite(SimuTasterLaut,LOW);
  delay(500);
  digitalWrite(DTMFpower,HIGH);                   // DTMF modul einschalten
  delay(500);

}
void Klingel_2()
{
  // Klingel 2 aktion
}

So wie es jetzt ist wird beim drücken des Tasters 1 das Programm Klingel 1 richtig abgearbeitet.Ich möchte aber bei mehrmaligem drücken des Tasters das neustarten von der Funktion Klingel1 unterbinden.
Dachte schon an einen counter,also wenn counter >1 dann nichts machen sonst Klingel 1 starten,aber hoffe es geht auch einfacher :-(.
Bin für jeden Hinweis dankbar :-)
Gruß
Haustechno

Smarthome ist die Zukunft ;-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2016, 20:01
Beitrag #2
RE: Tastereingang gegen mehrmaliges drücken sperren
Hallo,


static boolean ASD = true;



if (Bedingung)
{
if(ASD)
{
// mache etwas einmal
ASD = false;
}
}
else
{
ASD = true;
}

Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2016, 21:30 (Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2016 21:33 von Haustechno.)
Beitrag #3
RE: Tastereingang gegen mehrmaliges drücken sperren
@Andreas

vielen Dank, nur komme ich da irgendwie nicht weiter mit deinem Beispiel :-(
Zum Thema : static boolean ASD = true;
finde ich nichts brauchbares irgendwie.....

Kanntst du mir das näher erklären bitte?

Mfg.
Haustechno

Smarthome ist die Zukunft ;-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.02.2016, 23:19
Beitrag #4
RE: Tastereingang gegen mehrmaliges drücken sperren
Hallo,
ist doch klar, das Du nichts brauchbares findest. Das ist eine logische
Anweisung- solltest Du eigentlich wissen. Also-

Code:
static boolean Klingelknobb1 = true;

void setup()  
{
blah, blah, blaah
}

void loop()
{
if (Klingeltaster 1 gedrückt)
{
if(Klingelknobb1) // ist wahr, also….
{
mache z.B.: lasse die Klingel klingeln

Klingelknobb1 = false; // ist nicht mehr wahr, es wird also nur einmal ausgeführt
}
}
else
{
ASD = true; // hier wird es wieder wahr
}


NUN DER TRICK!

void setup()  
{
blah, blah, blaah
}

void loop()
{
if (Klingeltaster 1 gedrückt)
{
if(Klingelknobb1) // ist wahr, also….
{
mache z.B.: lasse die Klingel klingeln

Klingelknobb1 = false; // ist nicht mehr wahr, es wird also nur einmal ausgeführt
}
}

//Klingelknobb1 ist hier immer noch nicht mehr wahr, es kann also an Klingeltaster 1 gedrückt werden bis der Doktor kommt


// Es hat geklingelt, Dein Sketch macht jetzt etwas Bestimmtes

//Wenn dieses Bestimmtest erledigt ist, dann setzt Du am Ende des Bestimmten
// mit

Klingelknobb1 = true; // hier wird es wieder wahr


// die o.g. Logik wieder auf wahr. Klinkeltaster 1 ist wieder aktiv

Hat es jetzt bei Dir auch geklingelt!?

Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2016, 18:03 (Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2016 18:04 von Haustechno.)
Beitrag #5
RE: Tastereingang gegen mehrmaliges drücken sperren
Malzeit,

leider noch nicht :-(,habe krasse Grippe liege im Bett kann kaum was machen die Tage,aber ich gebe nicht auf:-).
Trotzdem vielen Dank für den Tipp,

Mfg.
Haustechno

Smarthome ist die Zukunft ;-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2016, 18:53
Beitrag #6
RE: Tastereingang gegen mehrmaliges drücken sperren
Ich weis ja nicht, was Dein Programm da machen soll, vermutlich schrittweise nach Zeitablauf ein oder mehrere Pins schalten.

In diesem Fall macht die oft beschimpfte Programmierung mit Delay genau das, was Du willst:
Während eines Delay, macht der Arduino nix anderes als warten.

Also fragst Du im Loop den Taster ab.
Wird der gedrückt, startet dein Programm.
Z.B
Pin1 high
Delay(1000);
Pin 2 high
Pin 1 Low
Delay(1000);
Pin 2 Low
Pin 3 high
Delay (1000);

So bleibt das Programm so lange hängen, bis das alle Schritte abgearbeitet sind.
Die ganze Zeit erfolgt keine Abfrage, ob der Taster gedrückt wird.
Erst nach dem letzten Delay, wird der Taster wieder abgefragt.

Ich halte Diese Variante in Deinem Fall für das Beste, weil ja die ganze Zeit NUR Dein Extraprogramm ausgeführt werden soll und nicht irgendwelche anderen Aktionen laufen sollen (Tasterabfrage)

Gleichzeitig bleibt Dein Programm total simpel.

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2016, 12:12 (Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2016 12:22 von Haustechno.)
Beitrag #7
RE: Tastereingang gegen mehrmaliges drücken sperren
Morgen ,

es handelt sich um eine DECT Sprechanlage,die auch nun mehr oder weniger funktioniert :-).Ein Arduino simuliert mit Optokoppler einen Internanruf nach dem der Klingeltaster gedrückt wurde ,nimmt den Hörer ab und schaltet auf Lauthören ein.Ein DTMF Modul detektiert dann die Taste # und öffnet die Tür,dann legt es wieder auf.

Ich denke ich muss das mit den delays entsorgen und auf milis ändern,leider kämpfe ich noch mit der Grippe :-(.

[Bild: 2fd097-1456486914.jpg]

Ist momentan noch alles variabel zusammengebaut ;-).......

Mfg.
Haustechno

Smarthome ist die Zukunft ;-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.09.2016, 17:04
Beitrag #8
RE: Tastereingang gegen mehrmaliges drücken sperren
(26.02.2016 12:12)Haustechno schrieb:  Morgen ,

es handelt sich um eine DECT Sprechanlage,die auch nun mehr oder weniger funktioniert :-).Ein Arduino simuliert mit Optokoppler einen Internanruf nach dem der Klingeltaster gedrückt wurde ,nimmt den Hörer ab und schaltet auf Lauthören ein.Ein DTMF Modul detektiert dann die Taste # und öffnet die Tür,dann legt es wieder auf.

Ich denke ich muss das mit den delays entsorgen und auf milis ändern,leider kämpfe ich noch mit der Grippe :-(.

[Bild: 2fd097-1456486914.jpg]

Ist momentan noch alles variabel zusammengebaut ;-).......

Mfg.
Haustechno

Hallo in die Runde,

gibt es hier was neues zu berichten?

Mich interessiert das Thema TFS an FB sehr.

Gruß
Garagenlöter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  2 Tasten drücken damit licht angeht tjard 11 546 19.06.2016 12:24
Letzter Beitrag: hotsystems
  Tastereingabe sperren im Code? Haustechno 4 1.030 12.08.2015 14:48
Letzter Beitrag: Thorsten Pferdekämper
  Hobby Programierer gesucht gegen Entgelt. Haustechno 30 2.909 05.08.2015 19:31
Letzter Beitrag: Haustechno
  Suche Unterstützung gegen Bezahlung bernd36 0 781 29.04.2015 09:31
Letzter Beitrag: bernd36
  Button kurz drücken Variable wenig erhöhen, lange drücken mehr erhöhen facebraker 18 3.530 28.02.2015 15:37
Letzter Beitrag: HaWe
  Einmal drücken = A, zweimal drücken = B,... T9-Tastatur muli 1 1.218 16.02.2015 18:06
Letzter Beitrag: Thorsten Pferdekämper
  H-Brückenschaltung gegen Generatorbetrieb eines Peltier-Elementes gesichert Cray-1 0 799 26.12.2014 19:07
Letzter Beitrag: Cray-1
  YUN gegen MEGA2560 und ????? Fräsensteuerung burgi650 2 1.060 18.02.2014 12:13
Letzter Beitrag: Sloompie
  Servo kämpft gegen sich selbst. ...1337 2 1.457 04.02.2014 08:26
Letzter Beitrag: Dubi
Information Suche gegen Entgelt Arduino-Programmierer Tonphis 0 3.063 08.03.2013 16:30
Letzter Beitrag: Tonphis

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste