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
Question Webserver, Client, Loop Marc2014 6 364 29.07.2016 21:04
Letzter Beitrag: Marc2014
  Funktion mit Parameterübergabe - u8g torsten_156 8 396 22.06.2016 18:53
Letzter Beitrag: Pit
  HC-05 Modul auf Funktion prüfen. arduinofan 2 365 03.02.2016 19:18
Letzter Beitrag: arduinofan
  Eine Funktion vorher definieren ? arduinofan 23 2.015 30.12.2015 08:42
Letzter Beitrag: amithlon
  Loop reset Atwist 27 1.896 10.12.2015 16:58
Letzter Beitrag: hotsystems
  Funktion/Methode mit mehr als einem Ausgangswert Marduino_UNO 18 1.251 20.10.2015 10:30
Letzter Beitrag: Marduino_UNO
  Unterprogram, loop, while Marc2014 1 804 27.08.2015 19:11
Letzter Beitrag: hotsystems
  PulseIn-Funktion unklar alpenpower 6 1.282 24.07.2015 10:05
Letzter Beitrag: Scherheinz
  AnalogRead aus Loop-Schleife auskoppeln dna5544 7 1.473 16.07.2015 12:31
Letzter Beitrag: dna5544
  auslagern von Funktion aus der void loop? MaHaI976 19 2.871 22.06.2015 20:38
Letzter Beitrag: MaHaI976

Gehe zu:


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