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:
  • 1 Bewertungen - 2 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Loop reset
08.12.2015, 15:59
Beitrag #17
RE: Loop reset
(08.12.2015 15:47)Hilgi schrieb:  moin,

na ich meine das hier:

Code:
if (schwimmerState == HIGH)
  { digitalWrite(pumpe, HIGH);              //hier muss die pumpe und timer starten
   timer();
   }
  else
  {
    digitalWrite(pumpe, LOW);              //hier muss auch die timer (void timer)stoppen
  
  }


und er sagte er will falls schwimmerState = LOW, das timer() stoppt.

wie sonst will er timer() unterbrechen?, bzw die abfrage läuft ja eigentlich erst ab, sobald timer() beendet ist...

ok jetzt bin ich mehr verwirrt als eben Big Grin

gruss

*denk*
vlt weiss er garnicht, das solange timer() läuft, keine abfrage statt findet, und das eigentliche probleme im timer() an sich liegt....
*/denk*

Soweit zur Übersicht des Codes.
Aber ein Interrupt ist es nicht, sondern sein "Timer" den er startet. Der aber nicht funktioniert.

Innerhalb seiner "Timerroutine" muss er 2 Abfragen einbauen. Ein Taster und Schwimmer auf LOW.

Dann wird es was.

Leider habe ich aktuell nicht die Zeit, so schwer sollte das nicht sein. Nur er verzettelt sich und den Code....

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2015, 16:09 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2015 17:21 von Hilgi.)
Beitrag #18
RE: Loop reset
ne ja Big Grin


ich meinte eigentlich er soll n interrupt einbauen um den timer() zu beenden....


gruss

Code:
const int pumpe = 2;   // pumpe ausgang
const int alarm = 6;             //buzzer
const int schwimmer = 7;     //Schwimmerschalter
const int abschalt = 8;         //abschalt button
const int ledPin = 13;          // für flashlight


int pumpeState   = LOW;
int alarmState  = LOW;
int schwimmerState = LOW;
int abschaltState = LOW;

int runTimer = 1;
int runFor = 12; // Zeit in seconden



void setup() {
  pinMode (pumpe, OUTPUT);
  pinMode (alarm, OUTPUT);
  pinMode (schwimmer, INPUT);
  pinMode (abschalt, INPUT);


  Serial.begin(9600);           //Monitor function an
  Serial.println ("Programm lauft");
}

void loop()
  {
    schwimmerState = digitalRead(schwimmer);
  if (schwimmerState == HIGH)
  { digitalWrite(pumpe, HIGH);              //hier muss die pumpe und timer starten
   timer();
   }
  else
  {
    digitalWrite(pumpe, LOW);              //hier muss auch die timer (void timer)stoppen
  
  }
}
    void timer() {
       for(int timer = runFor;timer > 0; --timer){
       if(timer >= 0)
       Serial.println(timer);
       delay(1000);
       }
      Serial.println(" Hochwasser Alarm!");
  }
  void hochwasser() {
  
   if(runTimer == 1){
          digitalWrite(alarm,LOW); // Relais Aus bei Countdown
          
          Serial.println("TIMER=");
          //Start timer
        
       } else {
          digitalWrite(alarm,HIGH); // Relais An wen Countdown = 0
    
       }
       runTimer = 0;
       delay(250);
       for(int duration = 0; duration < 100; duration ++){
          digitalWrite(ledPin, HIGH);
          delayMicroseconds(500);
          digitalWrite(ledPin, LOW);
          delayMicroseconds(500);
       }

       delay(250);
    }

also erstmal fällt mir auf, dass runTimer nie wieder auf 1 gesetzt wird, sobald einmal hochwasser() aufgerufen wurde....

und dann hab ich mir mal folgendes, nach idee von hotsystems, ausgedacht...

Code:
void timer()
    {
        for(int timer = runFor; timer > 0; --timer)
            {
                if ((schwimmerState == LOW) || (digitalRead(abschalt)))
                    {
                          digitalWrite(pumpe, LOW);
                        return;
                    }
  
                   if(timer >= 0)
                       Serial.println(timer);
                   
                   delay(1000);
            }
    
        Serial.println(" Hochwasser Alarm!");
    }


als idee, nicht überprüft...


gruss

Nicht denken,...
...nachdenken... Rolleyes
http://capsicum-felicitas.de.tl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2015, 19:09 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2015 22:27 von hotsystems.)
Beitrag #19
RE: Loop reset
Ok, dann waren wir ja beide fleißig.WinkIdea

Meine Code ist auch ohne Interrup und nicht getestet.
Die Routine mit den millis aber oft so eingesetzt.

Code:
const int pumpe = 2;                // pumpe ausgang
const int alarm = 6;                //buzzer
const int schwimmer = 7;            //Schwimmerschalter
const int abschalt = 8;             //abschalt button (gegen Masse = 0, gegen Plus = HIGH)
const int ledPin = 13;              // für flashlight
const long Interval = 10000;        //Interval legt Zeit bis Alarm kommt fest
unsigned long previousMillis = 0;

int pumpeState   = LOW;
int alarmState  = LOW;
int schwimmerState = LOW;
int abschaltState = LOW;

int runTimer = 1;
int runFor = 60; // Zeit in seconden
int PumpeAn = 0;

void setup() {
  pinMode (pumpe, OUTPUT);
  pinMode (alarm, OUTPUT);
  pinMode (schwimmer, INPUT);
  pinMode (abschalt, INPUT);


  Serial.begin(9600);                 //Monitor function an
  Serial.println ("Programm lauft");
}

void loop()
{
  schwimmerState = digitalRead(schwimmer);
  if (schwimmerState == HIGH)
  { digitalWrite(pumpe, HIGH);
    PumpeAn = 1;
    //hochwasser();
  }
  else
  {
    digitalWrite(pumpe, LOW);              
    PumpeAn = 0;
  }

  hochwasser();
  if (digitalRead(abschalt) == 0) {      // jenachdem wie geschaltet wird (0=LOW, 1=HIGH)
    // Alarm aus, hier kommt dein Code rein (kann in eine eigene Funktion)
    previousMillis = 0;
  }
}


void hochwasser() {
unsigned long currentMillis = millis();

  if (PumpeAn == 1) {
    if (currentMillis - previousMillis >= Interval) {       //Interval legt Zeit bis Alarm kommt fest    
      if (previousMillis > 1) {
        // Alarm an, hier kommt dein Code rein (kann in eine eigene Funktion)
      }
      previousMillis = currentMillis;
    }
  }
  else {
    // Alarm aus, hier kommt dein Code rein (kann in eine eigene Funktion)
    previousMillis = 0;
  }
  
}

Du musst nur die nicht genutzten Variablen löschen, habe ich nicht gemacht.

Die Gefahr wenn du delay einsetzt, dann reagiert der Ausschalter evtl. nicht oder sehr viel später. Daher den Timer (alles in Hochwasser) mit millis.

Edit:

Code berichtigt.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2015, 21:08 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2015 21:16 von Hilgi.)
Beitrag #20
RE: Loop reset
ok aber wie machst du das hier:

if (abschalt == 0) { // jenachdem wie geschaltet wird (0=LOW, 1=HIGH)
// Alarm aus, hier kommt dein Code rein (kann in eine eigene Funktion)
previousMillis = 0;

oben steht doch LOW

wo prüfst du den state?


gruss

oder geht das auch one digitalRead(abschalt) als einfach nur abschalt???

Nicht denken,...
...nachdenken... Rolleyes
http://capsicum-felicitas.de.tl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2015, 21:50
Beitrag #21
RE: Loop reset
(08.12.2015 21:08)Hilgi schrieb:  ok aber wie machst du das hier:

if (abschalt == 0) { // jenachdem wie geschaltet wird (0=LOW, 1=HIGH)
// Alarm aus, hier kommt dein Code rein (kann in eine eigene Funktion)
previousMillis = 0;

oben steht doch LOW

wo prüfst du den state?


gruss

oder geht das auch one digitalRead(abschalt) als einfach nur abschalt???

Ok, du hast recht. Ich habe mich einfach darauf verlassen, das "digitalRead(abschalt)" im Sketch vorhanden ist.
Aber das er auf LOW steht, kann ich nicht sehen. Deswegen meine zusätzliche Bemerkung.

Werde das noch nachliefern.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2015, 22:33
Beitrag #22
RE: Loop reset
sorry meinte

int abschaltState = LOW;


aber der wurde ja nie auf HIGH gesetzt der abschalt, ergo oben nicht auf HIGH gesetzt im setup.

whatever, danke hatte schon gedacht ich hab was verpasst, geheme tricks oder so Tongue

gruss

Nicht denken,...
...nachdenken... Rolleyes
http://capsicum-felicitas.de.tl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2015, 23:41 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2015 23:42 von hotsystems.)
Beitrag #23
RE: Loop reset
Ja, der

Code:
int abschaltState = LOW;

wurde in der Tat bisher nie gebraucht.

Somit alles gut. Idea

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2015, 09:36 (Dieser Beitrag wurde zuletzt bearbeitet: 09.12.2015 09:39 von Atwist.)
Beitrag #24
RE: Loop reset
Guten Morgen

Als erste möchte ich euch danken für die Hilfe und eure zeit.

Hab de Code mal aus probiert, aber verstehe eine teil nicht

Code:
void loop()
{
  schwimmerState = digitalRead(schwimmer);
  if (schwimmerState == HIGH)
  { digitalWrite(pumpe, HIGH);
    PumpeAn = 1;
    Serial.println ("pumpe an");
    //hochwasser();
  }
  else
  {
    digitalWrite(pumpe, LOW);              
    PumpeAn = 0;
    Serial.println ("pumpe aus");
    
  }

  hochwasser();
  if (digitalRead(abschalt) == 0) {      // jenachdem wie geschaltet wird (0=LOW, 1=HIGH)
    // Alarm aus, hier kommt dein Code rein (kann in eine eigene Funktion)
   Serial.println ("Was ist los");
    previousMillis = 0;
  }
}


Wen Schwimmer HIGH ist pumpe HIGH dann hochwasser, das kan ich noch verstehen.
"else"
Wen Schwimmer LOW ist pumpe LOW aber dann hochwasser ???????? dass will bei mir nicht drin.

Oder lese ich dass Falsch.

Hab die Code mal mit "Serial.println" vorsehen um mal zusehen was gemacht wert, bekomme leider kein "Hochwasser Alarm"

Hiermit bekomme ich ein "Hochwasser Alarm"
Code:
const int pumpe = 2;                // pumpe ausgang
const int alarm = 6;                //buzzer
const int schwimmer = 7;            //Schwimmerschalter
const int abschalt = 8;             //abschalt button (gegen Masse = 0, gegen Plus = HIGH)
const int ledPin = 13;              // für flashlight
const long Interval = 10000;        //Interval legt Zeit bis Alarm kommt fest
unsigned long previousMillis = 0;

int pumpeState   = LOW;
int alarmState  = LOW;
int schwimmerState = LOW;
int abschaltState = LOW;

int runTimer = 1;
int runFor = 60; // Zeit in seconden
int PumpeAn = 0;

void setup() {
  pinMode (pumpe, OUTPUT);
  pinMode (alarm, OUTPUT);
  pinMode (schwimmer, INPUT);
  pinMode (abschalt, INPUT);


  Serial.begin(9600);                 //Monitor function an
  Serial.println ("Programm lauft");
}

void loop()
{
  schwimmerState = digitalRead(schwimmer);
  if (schwimmerState == HIGH)
  { digitalWrite(pumpe, HIGH);
    PumpeAn = 1;
    Serial.println ("pumpe an");
    hochwasser();
  }
  else
  {
    digitalWrite(pumpe, LOW);              
    PumpeAn = 0;
    Serial.println ("pumpe aus");
    
  }

  //hochwasser();
//  if (digitalRead(abschalt) == 0) {      // jenachdem wie geschaltet wird (0=LOW, 1=HIGH)
//    // Alarm aus, hier kommt dein Code rein (kann in eine eigene Funktion)
//   Serial.println ("Was ist los");
//    previousMillis = 0;
  }



void hochwasser() {
unsigned long currentMillis = millis();

  if (PumpeAn == 1) {
    if (currentMillis - previousMillis >= Interval) {       //Interval legt Zeit bis Alarm kommt fest    
      if (previousMillis > 1) {
        // Alarm an, hier kommt dein Code rein (kann in eine eigene Funktion)
        Serial.println ("Hochwasser alarm");
        delay(2000);
      }
      previousMillis = currentMillis;
    }
  }
  else {
    // Alarm aus, hier kommt dein Code rein (kann in eine eigene Funktion)
    previousMillis = 0;
  }
  
}

Mit freundliche grüßen
Andreas
--
Es tut mir Leid dass ich nicht immer oder direkt ihre Antwort verstehe, durch Konzentration Probleme ist es für mich leichter zu lehren durch "Learning by seeing" bitte um Verständnis.
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 363 29.07.2016 21:04
Letzter Beitrag: Marc2014
  Funktion in Loop einmalig ausführen Haustechno 4 644 09.03.2016 22:43
Letzter Beitrag: Haustechno
  Gleichzeitig ein Reset ? arduinofan 3 336 02.01.2016 20:21
Letzter Beitrag: Bitklopfer
  Serielle Ausgabe, Reset ? Mathias 1 596 12.11.2015 18:12
Letzter Beitrag: hotsystems
  Unterprogram, loop, while Marc2014 1 804 27.08.2015 19:11
Letzter Beitrag: hotsystems
  AnalogRead aus Loop-Schleife auskoppeln dna5544 7 1.473 16.07.2015 12:31
Letzter Beitrag: dna5544
  Arduino Leonardo Reset für UART Norbie 4 830 04.07.2015 09:10
Letzter Beitrag: Norbie
  auslagern von Funktion aus der void loop? MaHaI976 19 2.868 22.06.2015 20:38
Letzter Beitrag: MaHaI976
  Loop nur einmal durchlaufen wowa 7 1.839 02.06.2015 20:05
Letzter Beitrag: wowa
  adruino mega 2560 reset manne 20 2.321 06.04.2015 14:31
Letzter Beitrag: Thorsten Pferdekämper

Gehe zu:


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