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
  Arduino lässt sich nicht installieren bergfrei 4 155 20.11.2016 18:34
Letzter Beitrag: bergfrei
  Ordner bleibt leer bergfrei 5 144 13.11.2016 21:55
Letzter Beitrag: Bitklopfer
  Arduino Mega 2560 läuft nicht Wolfgang50 6 191 13.11.2016 10:50
Letzter Beitrag: Wolfgang50
  Countdown Timer Uwe1475 23 744 19.10.2016 18:33
Letzter Beitrag: Uwe1475
  Ardublock übertragt nicht an IDE oder UNO R3 tobi83 5 361 16.10.2016 14:07
Letzter Beitrag: Pit
  Upload funktioniert nicht Levi 5 250 22.09.2016 20:19
Letzter Beitrag: hotsystems
  ESP8266 tuts nicht sowerum 7 397 19.09.2016 21:01
Letzter Beitrag: sowerum
  If-Bedingung funktioniert nicht bei Serial1.write Datatom 6 227 16.09.2016 20:36
Letzter Beitrag: Datatom
  SD Karte wird nicht erkannt... Maxi290997 2 210 16.08.2016 14:36
Letzter Beitrag: Maxi290997
  Arduino lässt sich nicht mehr beschreiben Maxi290997 15 989 07.08.2016 11:40
Letzter Beitrag: Maxi290997

Gehe zu:


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