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
OUTPUT bleibt HIGH und timer stopt nicht.
06.01.2016, 13:19
Beitrag #1
OUTPUT bleibt HIGH und timer stopt nicht.
Hallo,

Ich habe hier einen input "schwimmer" die eine pumpe schaltet das klappt schon, wen die pump lange lauft dann bekomme ich einen "Hochwasser alarm" klappt auch.

Aber jetzt stoß ich auf 2 Probleme:
1 wen Schwimmer = 0 dann bleibt die pumpe laufen.
2 wen Schwimmer = 0 dann muss die "timer" eine Reset bekommen aber wie mach ich dass.

Ich hab gegooglet auf "reset void" auf "interrupt void" und "stop timer" kann keine Lösung finden.
Code:
[code]void timer() {
       for(int timer = runFor;timer > 0; --timer){
       if(timer >= 1)
       Serial.println(timer);
       delay(1000);
       }
       Serial.println(" Hochwasser alarm!");
       //alarmloop();
  for(;;);
     }
//------------------------------
void setup()
{
  pinMode(pulsschlag, OUTPUT);
  pinMode(pumpe, OUTPUT);
  pinMode(schwimmer, INPUT);
  pinMode(alarm, OUTPUT);


  FlexiTimer2::set(500, flash); //pulsschlag
  FlexiTimer2::start();

  Serial.begin(9600);
}
//-------------------------------

void loop ()
{
  val = digitalRead(schwimmer); // Lese input
  if (val == HIGH)  // Schwimmer is Hoch
  {
    digitalWrite(pumpe, HIGH); // Pumpe An
   //timer();
   }
  
  else {
    digitalWrite(pumpe, LOW); // Pumpe Aus
    
  }
}

Jemand einen Lössung Angel

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
06.01.2016, 14:35 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2016 14:50 von hotsystems.)
Beitrag #2
RE: OUTPUT bleibt HIGH und timer stopt nicht.
Damit wir das prüfen können, solltest du uns den kompletten Sketch liefern, inkl. der Deklarationen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2016, 10:18 (Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2016 15:17 von Atwist.)
Beitrag #3
RE: OUTPUT bleibt HIGH und timer stopt nicht.
Ich denke dass ich auch etwas gutes gemacht habe.

Zitat:Aber jetzt stoß ich auf 2 Probleme:
1 wen Schwimmer = 0 dann bleibt die pumpe laufen.
2 wen Schwimmer = 0 dann muss die "timer" eine Reset bekommen aber wie mach ich dass.

Punkt 1 ist gelöst Big Grin

Code:
/Diesen code soll auf einen Arduino Mega2560 Programiert werden

#include <FlexiTimer2.h>
const int pumpe = 23;               // Pumpe ausgang
const int alarm = 24;               // Piezo
const int schwimmer = 2;            // Schwimmerschalter
const int abschalt = 8;             // Abschalt button (gegen Masse = 0, gegen Plus = HIGH)
const int pulsschlag = 22;          // System in betrieb
const long Interval = 10000;        // Interval legt Zeit bis Alarm kommt fest
unsigned long previousMillis = 0;

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

int runTimer = 1;
int runFor = 15; // Zeit in seconden
int PumpeAn = 0;
//-------------------------
void flash()
{
  static boolean output = HIGH;
  digitalWrite(pulsschlag, output);
  output = !output;
}
//-------------------------
void setup() {
  pinMode (pumpe, OUTPUT);
  pinMode (alarm, OUTPUT);
  pinMode (schwimmer, INPUT);
  pinMode (abschalt, INPUT);
  pinMode(pulsschlag, OUTPUT);


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

  FlexiTimer2::set(500, flash); //pulsschlag 0,5 sec
  FlexiTimer2::start();
}
//--------------------------
void loop()
{
  schwimmerState = digitalRead(schwimmer);
  if (schwimmerState == HIGH)

  { digitalWrite(pumpe, HIGH);

    if (PumpeAn == 0)
    {
      Serial.println ("Pumpe An");
    }
    PumpeAn = 1;
    hochwasser();

  }
  else
  {
    digitalWrite(pumpe, LOW);
    if (PumpeAn == 1)
    {
      Serial.println ("Pumpe Aus");
    }
    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() {
  if (runTimer == 1) {
    digitalWrite(alarm, LOW); // Relais Aus bei Countdown

    Serial.println("TIMER=");
    //Start timer
    timer();
  } else {
    digitalWrite(alarm, HIGH); // Relais An wen Countdown = 0

  }
  runTimer = 0;
  delay(250);
  for (int duration = 0; duration < 100; duration ++) {
    digitalWrite(alarm, HIGH);
    delayMicroseconds(500);
    digitalWrite(alarm, LOW);
    delayMicroseconds(500);
  }

  delay(250);
}
//-------------------------
void timer() {
  for (int timer = runFor; timer > 0; --timer) {
    if (timer >= 1)
      Serial.println(timer);
    delay(1000);
  }
  Serial.println(" Hochwasser Alarm!");
  piezo();
}
//---------------------------
void piezo()
{
  for (int i=1; i < 100; i++)
  {
  int pitch = 200 + i *20;
  tone(alarm, pitch);
  delay(10);
  }
  noTone(alarm);
  delay(500);
  
}
//-------------------------

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
07.01.2016, 15:18
Beitrag #4
RE: OUTPUT bleibt HIGH und timer stopt nicht.
OEPS Rauch aus meinen MEGA Angry Angry Angry

Einen Test kable hat sich über die MEGA hin und her bewegt Confused

Muss jetzt umsteigen auf einen UNO und gleich neue MEGA bestellen.

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
08.01.2016, 11:02
Beitrag #5
RE: OUTPUT bleibt HIGH und timer stopt nicht.
Bin Heute einen ganzen Stuck weiter gekommen Tongue

Zitat:Aber jetzt stoß ich auf 2 Probleme:
1 wen Schwimmer = 0 dann bleibt die pumpe laufen.
2 wen Schwimmer = 0 dann muss die "timer" eine Reset bekommen aber wie mach ich dass.

Beide Probleme sind gelöst aber habe einen neu dazu bekommen.
Wen Hochwasser Alarm ist dann bekomme ich diesen
Code:
Hochwasser Alarm
Pumpe An
Alarm timer lauft
Hochwasser Alarm
Pumpe An
Alarm timer lauft
Hochwasser Alarm
Pumpe An
Alarm timer lauft
Hochwasser Alarm
Pumpe An
Alarm timer lauft
Hochwasser Alarm

Er sollte nur einmal Hochwasser Alarm geben und dass bekomme ich momentan nicht hin.

Bitte um Hilfe. Blush Blush

Code:
//Diesen code soll auf einen Arduino Mega2560 Programiert werden

#include <FlexiTimer2.h>
const int pumpe = 2;               // Pumpe ausgang
const int alarm = 6;               // Piezo
const int schwimmer = 7;            // Schwimmerschalter
const int abschalt = 8;             // Abschalt button (gegen Masse = 0, gegen Plus = HIGH)
const int pulsschlag = 13;          // System in betrieb
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 PumpeAn = 0;
int runTime1 = 10000; // 10 sec. für testlauf
int runTime2 = 5000;
volatile int abschaltState = LOW;
//-------------------------
void flash()
{
  static boolean output = HIGH;
  digitalWrite(pulsschlag, output);
  output = !output;
}
//-------------------------
void setup() {
  pinMode (pumpe, OUTPUT);
  pinMode (alarm, OUTPUT);
  pinMode (schwimmer, INPUT);
  pinMode (abschalt, INPUT);
  pinMode(pulsschlag, OUTPUT);


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

  FlexiTimer2::set(500, flash); //pulsschlag 0,5 sec
  FlexiTimer2::start();
}
//--------------------------
void loop()
{
  schwimmerState = digitalRead(schwimmer);
  if (schwimmerState == HIGH)

  { digitalWrite(pumpe, HIGH);

    if (PumpeAn == 0)
    {
      Serial.println ("Pumpe An");
    }
    PumpeAn = 1;
    hochwasser();

  }
  else
  {
    digitalWrite(pumpe, LOW);
    if (PumpeAn == 1)
    {
      Serial.println ("Pumpe Aus");
    }
    PumpeAn = 0;

  }
}
//-------------------------
void hochwasser() {
  static int schwimmerState = 0;
  static unsigned long LastChangeTime = 0;
  static int alarmOff = 0;
  static int alarmOn = 1;
  int alarmZuruecksetzen = 1;
  int schwimmerSignal = 1;
  int NeueschwimmerState = digitalRead(schwimmer);
  unsigned long now = millis();
  if (PumpeAn == 0)
  {
    Serial.println ("Alarm timer lauft");
  }
  if (NeueschwimmerState != schwimmerState)               // Schwimmer Zustand
  {
    LastChangeTime = now;
    schwimmerState = NeueschwimmerState;
    alarmOn = alarmZuruecksetzen;
    PumpeAn = 1;
  }

  else if (schwimmerState = schwimmerSignal)              //Fragt den Zustand des "schwimmerState" gegenüber dem "schwimmerSignal" ab und beginnt
  {
    if (now - LastChangeTime > runTime1)                        // Zeit bis alarm einschaltet
    {
      digitalWrite(alarm, alarmOn);
      delay(250);
      for (int i = 1; i < 100; i++)
      {
        int pitch = 200 + i * 20;
        tone(alarm, pitch);
        delay(10);
      }
      noTone(alarm);
      delay(500);

      if (PumpeAn == 1)
      {
        Serial.println ("Hochwasser Alarm");
      }
      PumpeAn = 0;
    }
    if (now - LastChangeTime > runTime2)                        // Diese zeit um noch geändert werden
    {
      alarmOn = alarmOff;
      digitalWrite(alarm, alarmOff);
    }

  }
}
//-------------------------

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
  WEMOS Motorshield funzt nicht Rumpl-X 8 188 07.06.2017 21:10
Letzter Beitrag: Tommy56
  LCD geht nicht - keine Ahnung warum?? DL1AKP 12 449 15.05.2017 13:17
Letzter Beitrag: DL1AKP
  433mHz Funkmodule senden/empfangen nicht metzgefa 2 467 06.05.2017 13:30
Letzter Beitrag: metzgefa
  Münzeinwurf mit Timer KBLc 11 533 26.04.2017 21:21
Letzter Beitrag: KBLc
  Brauche Zeitverzögerung delay/millis/timer? Spiecky 17 713 15.04.2017 09:41
Letzter Beitrag: hotsystems
Sad [Gelöst] Arduino bleibt in If-Abfrage hängen Hugeldugelking 2 193 11.04.2017 11:18
Letzter Beitrag: Hugeldugelking
  SD Karte wird nicht erkannt Maxi290997 6 276 31.03.2017 06:05
Letzter Beitrag: Bitklopfer
Sad Sketch funktioniert auf dem Mega 2560 nicht Frank1234 16 697 26.03.2017 14:15
Letzter Beitrag: oOSpikeOo
  Mein Skript macht nicht das was es soll ;( DerMatze79 4 324 16.03.2017 22:19
Letzter Beitrag: MicroBahner
  Programmablauf macht nicht das was ich möchte !! ESP + Blynk b3ta 3 258 01.03.2017 14:29
Letzter Beitrag: Tommy56

Gehe zu:


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