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
Rainbow File geht nicht zum compilieren!!!! Jocky 7 137 19.02.2017 20:01
Letzter Beitrag: Binatone
  IRremote bringe ich nicht zum laufen Franz54 5 90 19.02.2017 11:56
Letzter Beitrag: Tommy56
  Code aus 1.6.9 geht mit 1.8.1 nicht mehr zu kompilieren DL1AKP 7 259 02.02.2017 12:16
Letzter Beitrag: Tommy56
  Arduino Läst sich nicht Programmieren Micha06 4 185 29.01.2017 17:27
Letzter Beitrag: Micha06
  Nicht verzagen Forum fragen bergfrei 13 404 28.01.2017 06:09
Letzter Beitrag: dqb312
  Sloeber findet meinen Com Port nicht :-( Pfeilebastler 2 106 27.01.2017 11:11
Letzter Beitrag: hotsystems
  Über drei Taster zwei externe Timer steuern Sidamo 23 508 09.01.2017 20:12
Letzter Beitrag: Tommy56
  nRF24l01 empfängt Daten nicht techniclover 1 181 09.01.2017 19:20
Letzter Beitrag: celle
  Serial Output Buffer abfragen BennIY 5 135 05.01.2017 18:51
Letzter Beitrag: Tommy56
  [Gelöst] SD Card (Ethernet Shield) IO funktioniert nicht __jb__ 7 425 05.01.2017 09:51
Letzter Beitrag: rpt007

Gehe zu:


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