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
Funktion in Loop einmalig ausführen
08.03.2016, 00:06
Beitrag #1
Funktion in Loop einmalig ausführen
Abend an alle :-)

Also ich habe folgendes zu lösen:

- wenn Eingang pin2 auf high,und der bleibt auch high,dann die Funktion PowerOn einmalig ausführen
- wenn Eingang pin2 auf low,und der bleibt dann auch low,dann die Funktion PowerOff einmalig ausführen

Anbei mein bisheriger Code:


Code:
const int Thermostat =2;
const int KopplerPower =3;
const int KopplerAuswahl =4;
int buttonState = 0;
// ====== Funktion PowerOn ====================
void PowerOn()
{
  //=Platte Einschalten
  digitalWrite(KopplerPower,HIGH);
  delay(200);
  digitalWrite(KopplerPower,LOW);
  delay(500);
  //=Auswahl 1 treffen
  digitalWrite(KopplerAuswahl,HIGH);
  delay(200);
  digitalWrite(KopplerAuswahl,LOW);
  delay(200);
  //=Auswahl 2 treffen
  digitalWrite(KopplerAuswahl,HIGH);
  delay(200);
  digitalWrite(KopplerAuswahl,LOW);
  delay(200);
  //=Auswahl 3 treffen
  digitalWrite(KopplerAuswahl,HIGH);
  delay(200);
  digitalWrite(KopplerAuswahl,LOW);
  delay(200);
  //=Auswahl 4 treffen
  digitalWrite(KopplerAuswahl,HIGH);
  delay(200);
  digitalWrite(KopplerAuswahl,LOW);
}
// ====== Funktion PowerOff ===================
void PowerOff()
{
  digitalWrite(KopplerPower,HIGH);
  delay(200);
  digitalWrite(KopplerPower,LOW);
}
void setup()
      {
        Serial.begin(9600);
        pinMode(Thermostat,INPUT_PULLUP);
        pinMode(KopplerPower,OUTPUT);
        pinMode(KopplerAuswahl,OUTPUT);
      }
     void loop()
     {
        buttonState = digitalRead(Thermostat);
      if (buttonState == LOW)
      {
       PowerOn();  
      }
      else {
      PowerOff();
  }
}


Wie kann ich es am einfachsten lösen,das die Funktionen in der loop nur einmalig bei Wechsel des Zustandes von pin2 ausgeführt werden.
Der Eingang pin2 wechselt also nicht schnell den Zustand,sondern bleib länger in dem jeweiligem Zustand.
Besten Dank vorab,
Mfg.
Haustechno

Smarthome ist die Zukunft ;-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.03.2016, 00:31
Beitrag #2
RE: Funktion in Loop einmalig ausführen
wie heisst das, -- wenn der programmierer nicht mehr weiter weiss, dann setzt er sich ein flag.
es gibt eine flut von varianten wie man das machen könnte, hauptsache erst mal flag setzen :-)


static int Powerflag = 0;
buttonState = digitalRead(Thermostat);
if (buttonState == LOW)
{
if (Powerflag != 1) {
PowerOn();
Powerflag = 1;
}
}
else {
if (Powerflag != 2) {
PowerOff();
Powerflag = 2;
}
}

ps. hier im forum gibts einen shop, da kann man für 5 cent ein code tag kaufen, eins für vorne, eins für hinten, macht 10 cent
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.03.2016, 00:32
Beitrag #3
RE: Funktion in Loop einmalig ausführen
Code:
const int Thermostat =2;
const int KopplerPower =3;
const int KopplerAuswahl =4;
int buttonState = 0;
int merker=0;
// ====== Funktion PowerOn ====================
void PowerOn()
{
  //=Platte Einschalten
  digitalWrite(KopplerPower,HIGH);
  delay(200);
  digitalWrite(KopplerPower,LOW);
  delay(500);
  //=Auswahl 1 treffen
  digitalWrite(KopplerAuswahl,HIGH);
  delay(200);
  digitalWrite(KopplerAuswahl,LOW);
  delay(200);
  //=Auswahl 2 treffen
  digitalWrite(KopplerAuswahl,HIGH);
  delay(200);
  digitalWrite(KopplerAuswahl,LOW);
  delay(200);
  //=Auswahl 3 treffen
  digitalWrite(KopplerAuswahl,HIGH);
  delay(200);
  digitalWrite(KopplerAuswahl,LOW);
  delay(200);
  //=Auswahl 4 treffen
  digitalWrite(KopplerAuswahl,HIGH);
  delay(200);
  digitalWrite(KopplerAuswahl,LOW);
}
// ====== Funktion PowerOff ===================
void PowerOff()
{
  digitalWrite(KopplerPower,HIGH);
  delay(200);
  digitalWrite(KopplerPower,LOW);
}
void setup()
      {
        Serial.begin(9600);
        pinMode(Thermostat,INPUT_PULLUP);
        pinMode(KopplerPower,OUTPUT);
        pinMode(KopplerAuswahl,OUTPUT);
      }
void loop()
     {
   buttonState = digitalRead(Thermostat);

  if ((buttonState == LOW)&&(merker==0))
    {  
      digitalWrite(KopplerPower, HIGH);
      merker=1;
      PowerOn();
    }
  
  if ((buttonState == LOW)&&(merker==1))
    {  
      merker=2;
    
    }
    
  if ((buttonState == HIGH)&&(merker==2))
    {
       digitalWrite(KopplerPower, LOW);
       merker=3;
    }
   if ((buttonState == HIGH)&&(merker==3))
    {  
       merker=0;
       PowerOff();
    }
      
    Serial.print("Merker= ");
    Serial.println(merker);
}


Habe es nun so gemacht,oder gibt es da eine Alternative?
Mfg.
Haustechno

Smarthome ist die Zukunft ;-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.03.2016, 12:44
Beitrag #4
RE: Funktion in Loop einmalig ausführen
Hallo Pit,
der Shop hat jetzt geöffnet Tongue

So geht es auch:
Code:
static boolean Flag = true;

if (Meine Bedingung() == wert)
{
if(Flag)
{
  // Aktion ausführen
  Flag = false;
}
}
else
{
  Flag = true;
}

Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.03.2016, 22:43
Beitrag #5
RE: Funktion in Loop einmalig ausführen
Abend,

@Pit
@Andreas

besten Dank für die Tips,

Mfg.
Haustechno

Smarthome ist die Zukunft ;-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Sad Loop Schleife wird unterbrochen? M3tzl3r 4 358 21.12.2017 23:44
Letzter Beitrag: hotsystems
  Eine Funktion verlassen Jan5663 8 557 18.12.2017 13:49
Letzter Beitrag: Chopp
  switch case funktion ausser halb loop ??? huber5093 13 2.137 12.04.2017 15:26
Letzter Beitrag: Tommy56
  Loop Schleife abbrechen mittlig1977 1 1.048 06.01.2017 22:18
Letzter Beitrag: Tommy56
Question Webserver, Client, Loop Marc2014 6 1.264 29.07.2016 21:04
Letzter Beitrag: Marc2014
  Funktion mit Parameterübergabe - u8g torsten_156 8 1.244 22.06.2016 18:53
Letzter Beitrag: Pit
  HC-05 Modul auf Funktion prüfen. arduinofan 2 799 03.02.2016 19:18
Letzter Beitrag: arduinofan
  Eine Funktion vorher definieren ? arduinofan 23 3.366 30.12.2015 08:42
Letzter Beitrag: amithlon
  Loop reset Atwist 27 4.251 10.12.2015 16:58
Letzter Beitrag: hotsystems
  Funktion/Methode mit mehr als einem Ausgangswert Marduino_UNO 18 2.738 20.10.2015 10:30
Letzter Beitrag: Marduino_UNO

Gehe zu:


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