Komme im Code nicht weiter - 2 Funktionen beeinflussen sich


hallo, ich stecke immer noch fest, in meinen funktionen. ich habe nun schon alles hin und verschoben aber es nicht funktionieren. mein problem ist das ich die pumpe einschalte und gleichzeitig auch das magnetventil spülkasten öffnen will, das geht , aber es darf dann nicht auch das magnetventil für den blumenkasten öffnen. es soll immr nur einer von beiden geöffnet sein, wenn die pumpe ist. mit vorrang für den spülkasten! sollte der blumenkasten gerade geöffnet sein, dann "abbruch" ventil zu und spülkasten ventil auf.  das ganze wäre noch irgendwie einfach aber ich möchte mit millis() gewisse einschaltzeiten und sicherheitsabschaltungen machen. die beiden funktionen werden mit unterschiedlichen parametern aufgerufen und dann mit unterschiedlichen zeiten gesteuert. jetzt geht alles irgendwie durcheinander. alle werden auf high gesetzt aber nicht wieder auf low. ich fische irgendwie im trüben und mache es nur schlimmer  =(

ist es vielleicht besser ich setzte alles in eine funktion? oder gibt es eine andere möglichkeit das ganze in 2 funktionen zu lassen?
ich hoffe, das ich es verständlich geschrieben habe. der gesamte code ist im anhang.

mfg  marco




code: [select]
void wcspuelung()  // steuerung des spülkasten,  wasserzulauf
 
  {
  static unsigned long wc_zeit;
 

 
  if (digitalread(wcsensor) == low && (digitalread(reedsensor) == low) )  //kippschalter == 0  geöffnet / reedkontakt == low wasser ausreichend
  { 
  digitalwrite(pumpe, high);
  digitalwrite(wcmag, high);
  wc_zeit = millis();
 
 
 
  if (millis() - wc_zeit > 2000)   // wenn pumpe und magnetvetil länger als 2s high sind, dann könnte fehler sein und beide auf low setzen
  {
  digitalwrite(pumpe, low);
  digitalwrite(wcmag, low);
  }
   }
  //hier kommt noch ein zähler hin, wenn 3x hinter einander fehler dann in notfunktion == notaus-alle!!!!
  }


void blumengiesen() //steuerung für bewässerung der blumenkästen, bodensensor ermittelt bodenfeuchte,
// wird nur aufgerufen wenn genügend wasser da, messung alle 1s und 20x  durchschnitt bilden
{ static int count1, bodensum;
static unsigned long startzeit_giessen;

if (millis() - zeitletztermessung4 > 1000)
{
zeitletztermessung4 = millis();


int boden_add = analogread(feuchtesensor);   //feuchte messen und durchschnitt bilden
bodensum += boden_add;
count1++;

     }
if (count1 >= 20)
{   count1 = 0;
boden = bodensum / 20;
bodensum = 0;

lcd.setcursor(2, 3);
lcd.print(boden);
}


if (boden > (boden_wert - boden_hysterese)  && millis() - startzeit_giessen > 8000 )  // bodenfeucht mit hysterese und nach 8s, dann giessen
{
if ((digitalread(reedsensor) == low) && (digitalread(wcsensor) == high))  // wasser da && spülkasten voll, dann giessen
 
  { // wenn spülkasten leer, dann nicht giessen und abbruch
    digitalwrite(pumpe, high);
    digitalwrite(blumemag, high);
startzeit_giessen = millis();
 
     }



if (millis() - startzeit_giessen > 4000)   // nach 4s abschlten und dann wieder 8s warten damit erde durchfeuchten kann und dann wieder messen
{

digitalwrite(pumpe,low);
digitalwrite(blumemag,low);
}
}

}


ist es vielleicht besser ich setzte alles in eine funktion?


das beste wäre, du trennst dein programm funktionell nach dem eva-prinzip in drei bereiche auf:
e - eingabe
v - verarbeitung
a - ausgabe

in der "verarbeitung" der daten stellst du dabei nur variablen anders ein, z.b. statusvariablen.

und die tatsächlichen schaltvorgänge führst du dann im funktionsteil "ausgabe" aus.

eine ausgabefunktion für das Öffnen und schließen der magnetventile könnte dann z.b. aussehen:
code: [select]

void schaltenmitvorrang(int wcpin, boolean wcstatus, int blumenpin, boolean blumenstatus)
{
  digitalwrite(wcpin, wcstatus);
  if (wcstatus) blumenstatus=false;
  digitalwrite(blumenpin, blumenstatus);
}


Arduino Forum > International > Deutsch (Moderator: uwefed) > Komme im Code nicht weiter - 2 Funktionen beeinflussen sich


arduino

Comments

Popular posts from this blog

VIDIOC_S_FMT error 16, Device or resource busy - Raspberry Pi Forums

using a laptop skeleton to build a pi laptop - Raspberry Pi Forums

Forum for Joomla? - Joomla! Forum - community, help and support