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
2 Sketche zusammenführen - korrelieren nicht
17.05.2019, 17:09 (Dieser Beitrag wurde zuletzt bearbeitet: 17.05.2019 18:01 von Nicolai.)
Beitrag #1
2 Sketche zusammenführen - korrelieren nicht
Hallo Liebe Pros!
(bestimmt wissen es selbst die Semis)

ich komme bei folgendem Problem nicht weiter:
für die Steuerung von Luftfeuchte, Wasser usw. eines Gewächshaus habe ich folgenden Sketch erstellt:
der funktioniert soweit auch.
Code:
#include <Wire.h>
#include "Sodaq_DS3231.h"       //--Time
#include <SimpleDHT.h>          //--DHT11
#include <LiquidCrystal.h>      //--LCD

// ------------------- ZEIT ---------------------------
char weekDay[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

// ------------------ WASSER --------------------------
int PUMP1      =7;
int PUMP2      =8;
int WATER1     =0;
int WATER2     =1;
int WATER1val;
int WATER2val;
int WATERLCDval;

unsigned long TIMER1;
unsigned long intervall1 = 5000;                                       //Laufzeit Pumpe1

unsigned long TIMER3;  
unsigned long intervall3 = 5000;                                       //Laufzeit Pumpe2

// ----------------- TEMPERATUR ------------------------
int HEAT       =12;

unsigned long TIMER4;  
unsigned long intervall4 = 5000;                                        //Laufzeit Heizlüfter

// -------------------- LUFT ---------------------------
int EX_FAN     =13;

unsigned long TIMER5;  
unsigned long intervall5 = 6000;                                        //Laufzeit Ablüfter

// -------------------- DHT11 --------------------------

int pinDHT11   =6;              //--DHT11
SimpleDHT11 dht11(pinDHT11);    //--DHT11

// ------------------ VENTILATOR -----------------------
int FAN        =11;

// -------------------- LICHT --------------------------
int LIGHT1     =9;
int LIGHT2     =10;

// --------------------- LCD ---------------------------
LiquidCrystal lcd(5, 4, 3, 2, 1, 0);

======= SETUP ===========================

void setup()
{
lcd.begin(16, 2);

//Serial.begin(57600);
Wire.begin();
rtc.begin();
Serial.begin(9600);           //--DHT11

//==================== PINMODE ==========================

// WASSER  
pinMode(PUMP1, OUTPUT);
pinMode(PUMP2, OUTPUT);

// TEMPERATUR
pinMode(HEAT, OUTPUT);

// LUFT
pinMode(EX_FAN, OUTPUT);

// LICHT
pinMode(LIGHT1, OUTPUT);
pinMode(LIGHT2, OUTPUT);

// VENTIALTOR
pinMode(FAN, OUTPUT);
}
uint32_t old_ts;


//====================== LOOP ===========================

void loop()
{
  
//TIME
DateTime now = rtc.now(); //get the current date-time
uint32_t ts = now.getEpoch();

unsigned long courrentMillis1=millis();
unsigned long courrentMillis3=millis();
unsigned long courrentMillis4=millis();
unsigned long courrentMillis5=millis();  


//WASSER
WATER1val=analogRead(WATER1);
WATER2val=analogRead(WATER2);
WATERLCDval=(WATER1val+WATER2val)/20;

byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess)

  
//PUMP1  
if (WATER1val > 900&&digitalRead(PUMP1==HIGH))         //Bodenfeuchte 1
{
  digitalWrite(PUMP1,LOW);
  TIMER1=courrentMillis1;
}
  if(millis()-TIMER1>intervall1)
  {
    digitalWrite (PUMP1,HIGH);
  }
//PUMP2
if (WATER2val > 900&&digitalRead(PUMP2==HIGH))         //Bodenfeuchte 2
{
  digitalWrite(PUMP2,LOW);
  TIMER3=courrentMillis3;
}
  if(millis()-TIMER3>intervall3)
  {
    digitalWrite (PUMP2,HIGH);
  }
//HEAT  
if ((temperature<23)&&digitalRead(HEAT==HIGH))         //Temperatur        
{
  digitalWrite(HEAT,LOW);
  TIMER4=courrentMillis4;
}
  if(millis()-TIMER4>intervall4)
  {
    digitalWrite (HEAT,HIGH);
  }
//EX_FAN
if((humidity>70)&&digitalRead(EX_FAN==HIGH))         //Luftfeuchte
{
  digitalWrite(EX_FAN,LOW);
  TIMER5=courrentMillis5;
}
  if(millis()-TIMER5>intervall5)
  {
    digitalWrite (EX_FAN,HIGH);
  }
//FAN
if((now.second()>30))                                           //Abluft
{
  digitalWrite(FAN,LOW);
}
else
{
  digitalWrite(FAN,HIGH);
}

//LIGHT
if ((now.second()>40))                                          //Licht 1 / 2                      
{
  digitalWrite (LIGHT1,LOW);                                          
  digitalWrite (LIGHT2,LOW);
}
  else
  {
  digitalWrite (LIGHT1,HIGH);
  digitalWrite (LIGHT2,HIGH);
  }
}

Irgendwann kam mir dann der Drang, einen Alarm und Notabschaltung für den Brandfall zu integrieren - alles China Ware Confused

Code:
#include <Wire.h>
// ---------------- FEUER / RAUCH -----------------------
int GAS       = A2;            // MQ-2 Gas
int FEUER1    = A3;            // YG1006 Flame1
int FEUER2    = A4;            // YG1006 Flame2
byte ALARM     = A5;

int GASval=0;
int ALARMval=0;
int FEUER1val=0;
int FEUER2val=0;
//===================== SETUP
oid setup()
{
Serial.begin(9600);        
}
//====================== LOOP
void loop()
{
GASval=analogRead(GAS);
ALARMval=analogRead(ALARM);
FEUER1val=analogRead(FEUER1);
FEUER2val=analogRead(FEUER2)  ;

Serial.print("GAS");
Serial.println(GASval);
Serial.print("F1");
Serial.println(FEUER1val);
Serial.print("F2");
Serial.println(FEUER2val);
Serial.print("ALARM");
Serial.println(ALARMval);
Serial.println("=================");
delay (1000);
// FEUER
if((FEUER1val<900)||(FEUER2val<900)||(GASval>200))
  {
analogWrite(ALARM, 255);
  }
  else
{
analogWrite(ALARM, 0);
}
}
Nun der Knackpunkt, der mich zum verzweifeln bringt:

Einzeln funktionieren die Sketche einwandfrei.

Sobald ich aber beiden Programme in einem Sketch zusammenführe funktioniert die Alarmfunktion nicht mehr: (ganz unten im zweiten Sketch)

Serial Monitor zeigt mir glaubhafte Werte für FEUER1val FEUER2val und GASval.

Nur bei dem Wert ALARMval (A5) bekomme ich einen schwankenden Wert um 512.


auch mein Versuch Pin A5 als OUTPUT zu definieren und die analogen befehle in digitale umzuwandeln hat zu nichts geführt.
ALARMval ist dann dauerhaft auf 1.
selbst wenn ich am Ende des Sketches, ohne Bedingungen ALARM auf LOW steuere.

Code:
#include <Wire.h>
#include "Sodaq_DS3231.h"       //--Time
#include <SimpleDHT.h>          //--DHT11
#include <LiquidCrystal.h>      //--LCD

// ------------------- ZEIT ---------------------------
char weekDay[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

// ------------------ WASSER --------------------------
int PUMP1      =7;
int PUMP2      =8;
int WATER1     =0;
int WATER2     =1;
int WATER1val;
int WATER2val;
int WATERLCDval;

unsigned long TIMER1;
unsigned long intervall1 = 5000;                                       //Laufzeit Pumpe1

unsigned long TIMER3;  
unsigned long intervall3 = 5000;                                       //Laufzeit Pumpe2

// ----------------- TEMPERATUR ------------------------
int HEAT       =12;

unsigned long TIMER4;  
unsigned long intervall4 = 5000;                                        //Laufzeit Heizlüfter

// -------------------- LUFT ---------------------------
int EX_FAN     =13;

unsigned long TIMER5;  
unsigned long intervall5 = 6000;                                        //Laufzeit Ablüfter

// -------------------- DHT11 --------------------------

int pinDHT11   =6;              //--DHT11
SimpleDHT11 dht11(pinDHT11);    //--DHT11

// ------------------ VENTILATOR -----------------------
int FAN        =11;

// -------------------- LICHT --------------------------
int LIGHT1     =9;
int LIGHT2     =10;

// --------------------- LCD ---------------------------

LiquidCrystal lcd(5, 4, 3, 2, 1, 0);

// ----------------- FEUER / RAUCH ---------------------
int GAS       = A2;            // MQ-2 Gas
int FEUER1    = A3;            // YG1006 Flame1
int FEUER2    = A4 ;            // YG1006 Flame2
int ALARM      =A5;

int GASval=0;
int ALARMval=0;
int FEUER1val=0;
int FEUER2val=0;

//===================== SETUP ===========================

void setup()
{
lcd.begin(16, 2);

//Serial.begin(57600);
Wire.begin();
rtc.begin();
Serial.begin(9600);           //--DHT11

//==================== PINMODE ==========================

// WASSER  
pinMode(PUMP1, OUTPUT);
pinMode(PUMP2, OUTPUT);

// TEMPERATUR
pinMode(HEAT, OUTPUT);

// LUFT
pinMode(EX_FAN, OUTPUT);

// LICHT
pinMode(LIGHT1, OUTPUT);
pinMode(LIGHT2, OUTPUT);

// VENTIALTOR

pinMode(FAN, OUTPUT);
}

uint32_t old_ts;

//====================== LOOP ===========================

void loop()
{
  
//TIME
DateTime now = rtc.now(); //get the current date-time
uint32_t ts = now.getEpoch();

unsigned long courrentMillis1=millis();
unsigned long courrentMillis3=millis();
unsigned long courrentMillis4=millis();
unsigned long courrentMillis5=millis();  

if (old_ts == 0 || old_ts != ts)
{
  old_ts = ts;
  Serial.print(..
  
//WASSER
WATER1val=analogRead(WATER1);
WATER2val=analogRead(WATER2);
WATERLCDval=(WATER1val+WATER2val)/20;

//ALARM
GASval=analogRead(GAS);
ALARMval=analogRead(ALARM);
FEUER1val=analogRead(FEUER1);
FEUER2val=analogRead(FEUER2)  ;
  
Serial.print("GAS");
Serial.println(GASval);
  Serial.print("F1");
Serial.println(FEUER1val);
  Serial.print("F2");
Serial.println(FEUER2val);
  Serial.print("ALARM");
Serial.println(ALARMval);
  Serial.println("=================");  

byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess)
{
  Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
  return;
}

//PUMP1  
if (WATER1val > 900&&digitalRead(PUMP1==HIGH))         //Bodenfeuchte 1
{
  digitalWrite(PUMP1,LOW);
  TIMER1=courrentMillis1;
}
  if(millis()-TIMER1>intervall1)
  {
    digitalWrite (PUMP1,HIGH);
  }
  
//PUMP2
if (WATER2val > 900&&digitalRead(PUMP2==HIGH))         //Bodenfeuchte 2
{
  digitalWrite(PUMP2,LOW);
  TIMER3=courrentMillis3;
}
  if(millis()-TIMER3>intervall3)
  {
    digitalWrite (PUMP2,HIGH);
  }

//HEAT  
if ((temperature<23)&&digitalRead(HEAT==HIGH))         //Temperatur        
{
  digitalWrite(HEAT,LOW);
  TIMER4=courrentMillis4;
}
  if(millis()-TIMER4>intervall4)
  {
    digitalWrite (HEAT,HIGH);
  }

//EX_FAN
if((humidity>70)&&digitalRead(EX_FAN==HIGH))                    //Luftfeuchte
{
  digitalWrite(EX_FAN,LOW);
  TIMER5=courrentMillis5;
}
  if(millis()-TIMER5>intervall5)
  {
    digitalWrite (EX_FAN,HIGH);
  }

//FAN
if((now.second()>30))                                           //Abluft
{
  digitalWrite(FAN,LOW);
}
else
{
  digitalWrite(FAN,HIGH);
}

//LIGHT
if ((now.second()>40))                                          //Licht 1 / 2                      
{
  digitalWrite (LIGHT1,LOW);                                          
  digitalWrite (LIGHT2,LOW);
}
  else
  {
  digitalWrite (LIGHT1,HIGH);
  digitalWrite (LIGHT2,HIGH);
  }

//LCD
lcd.setCursor(0, 0);
....

if((FEUER1val<900)||(FEUER2val<900)||(GASval>200))
  {
      analogWrite(ALARM, 255);
  }
else
  {
    analogWrite(ALARM, 0);
  }
}

byte anstatt int... und was ich noch alles für verzweifelte Versuche Unternommen habe. Huh
Ich weiß nicht mal was ich in den Betreff schreiben, geschweige denn wonach ich googeln sollte


Bitte helft mir mein Projekt vor dem harten Aufprall an einer Wand zu bewahren

....auch stilistische Anregungen sind herzlich willkommen


Angehängte Datei(en)
.ino  1.ino (Größe: 6,39 KB / Downloads: 4)
.ino  1undALARM.ino (Größe: 6,51 KB / Downloads: 5)
.ino  NUR_ALARM.ino (Größe: 1.022 Bytes / Downloads: 5)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.05.2019, 17:19 (Dieser Beitrag wurde zuletzt bearbeitet: 17.05.2019 18:15 von Tommy56.)
Beitrag #2
RE: 2 Sketche zusammenführen - korrelieren nicht
Stelle Deinen Sketche bitte in Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.

Eine vernünftige Formatierung (<Strg>+T in der IDE hilft Dir dabei) und das Entfernen unnötiger Leerzeilen und auskommentierter Teile erhöht zusätzlich die Übersicht.

Wie ist A5 denn beschaltet?

Gruß Tommy

Du musst Dich entscheiden, was Du mit A5 machen willst: Eingabe oder Ausgabe - beides geht nicht so einfach, wie Du Dir das vorstellst.

Code:
ALARMval=analogRead(ALARM);
...

if((FEUER1val<900)||(FEUER2val<900)||(GASval>200))
  {
      analogWrite(ALARM, 255);
  }
else
  {
    analogWrite(ALARM, 0);
  }
}

Beschreibe doch mal genauer, was Du mit A5 vor hast und wie die Alarmierung funktionieren soll. Warum nimmst Du für die Ausgabe auf A5 analogWrite und nicht digitalWrite, wenn es wirklich nur ein Ausgang sein soll? Nochmal: Wie ist A5 beschaltet?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.05.2019, 18:23
Beitrag #3
RE: 2 Sketche zusammenführen - korrelieren nicht
Hi Tommy! danke für die tipps Big Grin habe das mal weitestgehend korrigiert.

mit einer LED
LED mit Pulldown
mit "imaginären" variablen .. int xxx; da mir ja erstmal die abschaltefunktion wichtig war (mit && xxx>100 bzw. HIGH hinter jeder if bedingung )
-bin nicht mehr sicher was das Ergebnis war aber auch nicht zu gebrauchen.
A5 mit Pin7 getauscht..
A5 und A2 (GAS Sensor) getauscht
-dann ging sobald ich den Gas Sensor an A5 hatte vermutlich der kurzschluss schuss rein ... -.-

hängt das vielleicht mit den verschiedenen serial... aufrufen zusammen? habe nämlich keinen Plan was da im Hintergrund funktioniert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.05.2019, 18:32
Beitrag #4
RE: 2 Sketche zusammenführen - korrelieren nicht
Gibts diese Beschreibung auch in verständlich? Sorry, ich werde aus dem Gestammel nicht schlau.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.05.2019, 22:00
Beitrag #5
RE: 2 Sketche zusammenführen - korrelieren nicht
@Nicolai
Deine Sketche sind wirklich schwer zu lesen und deine Beschreibung ist nicht zu verstehen.

Du solltest deine Kommentare im Sketch etwas ausführlicher halten, damit wir auch wissen, was in deinem Sketch passiert. Auch eine eindeutig lesbare Bezeichnung der einzelnen Variablen ist dabei wichtig.

Für uns, die wir deine Gedanken nicht kennen und für dich, wenn du nach Monaten deinen Sketch weiter bearbeiten möchtest.

So geht leider nicht eindeutig hervor, an welche Pins du Water1 und Water2 angeschlossen hast. Das macht den Sketch nicht besser lesbar.

Und du solltest dir angewöhnen, den Sketch richtig zu formatieren. Das geht in der IDE mit Strg + T, also ganz einfach. Das erhöht die Lesbarkeit ungemein und macht es uns einfacher dir zu helfen.

Wenn du das berücksichtigst und die Sketche danach austauschst, sind sicher mehr bereit diese zu lesen und zu helfen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.05.2019, 20:03
Beitrag #6
RE: 2 Sketche zusammenführen - korrelieren nicht
(17.05.2019 18:32)Tommy56 schrieb:  Gibts diese Beschreibung auch in verständlich? Sorry, ich werde aus dem Gestammel nicht schlau.

Gruß Tommy


Hi Tommy,
ich muss dir Recht geben. ich war wohl etwas zu aufgelöst.
Bin nochmal in mich und meinen Sketch gegangen und habe uns nochmal neu sortiert.
Ich hoffe ich kann das jetzt etwas verständlicher rüberbringen und würde mich freuen, wenn du dir nochmal Zeit nimmst und dich nochmal reindenken würdest.

Also - Pin A5 ist frei. - Später soll da vielleicht eine LED oder ein Piezzo dran.
Hatte es auch mal mit einer LED an Pin5 probiert. diese war dann dauerhaft schwach an.

Überarbeiteter Sketch der Gewächshaussteuerung.
Steuerung Bodenfeuchte,Temperatur, Luftfeuchte, Umlüfter und Licht:
FUNKTIONIERT und ist hoffentlich jetzt nachvollziehbar.
Code:
#include <Wire.h>
#include "Sodaq_DS3231.h"       //--Time
#include <SimpleDHT.h>          //--DHT11
#include <LiquidCrystal.h>      //--LCD

// ------------------- ZEIT ---------------------------
char weekDay[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

// ------------------ WASSER --------------------------
int PUMP1      = 7;                                         //Pin 7  - Pumpe 1
int PUMP2      = 8;                                         //Pin 8  - Pumpe 2
int WATER1     = A0;                                        //Pin A0 - Bodenhygrometer 1
int WATER2     = A1;                                        //Pin A1 - Bodenhygrometer 2
int WATER1val;
int WATER2val;
int WATERLCDval;

unsigned long TIMER1;
unsigned long intervall1 = 5000;                             //Laufzeit Pumpe1

unsigned long TIMER3;
unsigned long intervall3 = 5000;                             //Laufzeit Pumpe2

// ----------------- TEMPERATUR ------------------------
int HEAT       = 12;

unsigned long TIMER4;
unsigned long intervall4 = 5000;                             //Laufzeit Heizluefter

// -------------------- LUFT ---------------------------
int EX_FAN     = 13;

unsigned long TIMER5;
unsigned long intervall5 = 6000;                             //Laufzeit Abluefter

// -------------------- DHT11 --------------------------
int pinDHT11   = 6;                                          //Pin 6  - DHT11 Temperatur und Luftfeuchte
SimpleDHT11 dht11(pinDHT11);

// ------------------- UMLUFT --------------------------
int FAN        = 11;                                         //Pin 11 - Umluft

// -------------------- LICHT --------------------------
int LIGHT1     = 9;                                          //Pin 9  - Licht 1
int LIGHT2     = 10;                                         //Pin 10 - Licht 2

// --------------------- LCD ---------------------------
LiquidCrystal lcd(5, 4, 3, 2, 1, 0);                         //Pinbelegung LCD (5,4,3,2,1,0)

//===================== SETUP ==========================

void setup()
{
  lcd.begin(16, 2);

  //Serial.begin(57600);
  Wire.begin();
  rtc.begin();
  //Serial.begin(9600);             //--DHT11

  //-------------------- PINMODE -------------------------
  // WASSER
  pinMode(PUMP1, OUTPUT);
  pinMode(PUMP2, OUTPUT);

  // TEMPERATUR
  pinMode(HEAT, OUTPUT);

  // LUFT
  pinMode(EX_FAN, OUTPUT);

  // LICHT
  pinMode(LIGHT1, OUTPUT);
  pinMode(LIGHT2, OUTPUT);

  // VENTIALTOR
  pinMode(FAN, OUTPUT);
}
uint32_t old_ts;


//====================== LOOP ===========================

void loop()
{
  //TIME
  DateTime now = rtc.now(); //get the current date-time
  uint32_t ts = now.getEpoch();

  unsigned long courrentMillis1 = millis();
  unsigned long courrentMillis3 = millis();
  unsigned long courrentMillis4 = millis();
  unsigned long courrentMillis5 = millis();

  if (old_ts == 0 || old_ts != ts)
  {
    old_ts = ts;
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.date(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.print(' ');
    Serial.print(weekDay[now.dayOfWeek()]);
    Serial.println();
    Serial.println();
  }

  //DHT11
  Serial.println("=================================");

  byte temperature;
  byte humidity;
  int err = SimpleDHTErrSuccess;
  if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess)
  {
    Serial.print("Read DHT11 failed, err="); Serial.println(err); delay(1000);
    return;
  }

  //WASSER - PUMP1
  WATER1val   = analogRead(WATER1);
  WATER2val   = analogRead(WATER2);
  WATERLCDval = (WATER1val + WATER2val) / 20;

  if (WATER1val > 900 && digitalRead(PUMP1 == HIGH))     //Bodenfeuchte 1:
  {                                                      //wenn Wasser1val(Bodenhygrometer 1) kleiner 900 und Pumnpe 1 aus
    digitalWrite(PUMP1, LOW);                            //Punmpe 1 an
    TIMER1 = courrentMillis1;                            //set Timer 1
  }

  if (millis() - TIMER1 > intervall1)                    //wenn Timer 1 abgelaufen
  {
    digitalWrite (PUMP1, HIGH);                          //Pumpe 2 aus
  }

  //WASSER - PUMP2
  if (WATER2val > 900 && digitalRead(PUMP2 == HIGH))     //Bodenfeuchte 2:
  {                                                      //wenn Wasser2val (Bodenhygrometer 2) kleiner 900 und Pumnpe 2 aus
    digitalWrite(PUMP2, LOW);                            //Punmpe 2 an
    TIMER3 = courrentMillis3;                            //set Timer 3
  }
  if (millis() - TIMER3 > intervall3)                    //wenn Timer 3 abgelaufen
  {
    digitalWrite (PUMP2, HIGH);                          //Pumpe 2 aus
  }


  //TEMPERATUR - HEAT
  if ((temperature < 23) && digitalRead(HEAT == HIGH))   //Temperatur:
  {                                                      //wenn Temperatur kleiner 23´C und Heizluefter aus
    digitalWrite(HEAT, LOW);                             //Heizlüfter an
    TIMER4 = courrentMillis4;                            //set Timer 4
  }
  if (millis() - TIMER4 > intervall4)                    //wenn Timer 4 abgelaufen
  {
    digitalWrite (HEAT, HIGH);                           //Heizlüfter aus
  }

  //LUFT - EX_FAN
  if ((humidity > 70) && digitalRead(EX_FAN == HIGH))     //Luftfeuchte:
  {                                                       //wenn Luftfeuchte größer 70% und Abluefter aus
    digitalWrite(EX_FAN, LOW);                            //Abluefter an
    TIMER5 = courrentMillis5;                             //set Timer 5
  }
  if (millis() - TIMER5 > intervall5)                     //wenn Timer 5 abgelaufen
  {
    digitalWrite (EX_FAN, HIGH);                          //Abluefter aus
  }


  //FAN - UMLUFT
  if ((now.minute() > 55))                                 //Umluft:
  { //wenn laufende Minute größer 55
    digitalWrite(FAN, LOW);                                //Ventilator an
  }
  else
  {
    digitalWrite(FAN, HIGH);                               //ansonsten Ventilator aus
  }

  //LIGHT
  if ((now.hour() > 12))                                   //Licht 1 / 2:
  {                                                        //wenn laufende Stunde größer 12
    digitalWrite (LIGHT1, LOW);                            //Licht 1 an
    digitalWrite (LIGHT2, LOW);                            //Licht 2 an
  }
  else
  {
    digitalWrite (LIGHT1, HIGH);                           //ansonsten Licht 1 aus
    digitalWrite (LIGHT2, HIGH);                           //ansonsten Licht 2 aus
  }

  //LCD
  lcd.setCursor(0, 0);
  lcd.print(now.date(), DEC);
  lcd.print('/');
  lcd.print(now.month(), DEC);
  lcd.print(' ');
  lcd.setCursor(8, 0);
  lcd.print(now.hour(), DEC);
  lcd.print(':');
  lcd.print(now.minute(), DEC);
  lcd.print(':');
  lcd.print(now.second(), DEC);
  lcd.print(' ');

  lcd.setCursor(0, 1);
  lcd.print((int)temperature);
  lcd.print("'C  ");
  lcd.print((int)humidity);
  lcd.print("LH ");
  lcd.print(" ");
  lcd.print(WATERLCDval);
  lcd.print("BH");
}

Überarbeiteter Sketch Alarmfunktion:
FUNKTIONIERT FÜR SICH ALLEINE ebenfalls:

Code:
#include <Wire.h>
// ---------------- FEUER / RAUCH -----------------------
int GAS       = A2;            // MQ-2 Gas
int FEUER1    = A3;            // YG1006 Flame1
int FEUER2    = A4;            // YG1006 Flame2
int ALARM     = A5;

int GASval = 0;
int ALARMval = 0;
int FEUER1val = 0;
int FEUER2val = 0;
//===================== SETUP
void setup()
{
  Serial.begin(9600);
  pinMode(ALARM, OUTPUT);
}
//====================== LOOP
void loop()
{
  GASval = analogRead(GAS);
  ALARMval = digitalRead(ALARM);
  FEUER1val = analogRead(FEUER1);
  FEUER2val = analogRead(FEUER2)  ;

  Serial.print("GAS");
  Serial.println(GASval);
  Serial.print("F1");
  Serial.println(FEUER1val);
  Serial.print("F2");
  Serial.println(FEUER2val);
  Serial.print("ALARM");
  Serial.println(ALARMval);
  Serial.println("=================");
  delay (1000);
  
  // FEUER
  if ((FEUER1val < 600) || (FEUER2val < 600) || (GASval > 200))        //wenn (Flammenmelder 1 kleiner 600) oder (Flammenmelder 2 kleiner 600) oder (Gasmelder größer 200)
  {
    digitalWrite(ALARM, HIGH);                                         //Alarm an
  }
  else
  {
    digitalWrite(ALARM, LOW);                                          //ansonsten Alarm aus  
  }
}

Wenn ich aber die Alarmfunktion in die Gewächshaussteuerung integriere,
FUNKTIONIERT DIE ALARMFUNKTION NICHT

Code:
#include <Wire.h>
// ---------------- FEUER / RAUCH -----------------------
int GAS       = A2;            // MQ-2 Gas
int FEUER1    = A3;            // YG1006 Flame1
int FEUER2    = A4;            // YG1006 Flame2
int ALARM     = A5;

int GASval = 0;
int ALARMval = 0;
int FEUER1val = 0;
int FEUER2val = 0;
//===================== SETUP
void setup()
{
  Serial.begin(9600);
  pinMode(ALARM, OUTPUT);
}
//====================== LOOP
void loop()
{
  GASval = analogRead(GAS);
  ALARMval = digitalRead(ALARM);
  FEUER1val = analogRead(FEUER1);
  FEUER2val = analogRead(FEUER2)  ;

  Serial.print("GAS");
  Serial.println(GASval);
  Serial.print("F1");
  Serial.println(FEUER1val);
  Serial.print("F2");
  Serial.println(FEUER2val);
  Serial.print("ALARM");
  Serial.println(ALARMval);
  Serial.println("=================");
  delay (1000);
  
  // FEUER
  if ((FEUER1val < 600) || (FEUER2val < 600) || (GASval > 200))        //wenn (Flammenmelder 1 kleiner 600) oder (Flammenmelder 2 kleiner 600) oder (Gasmelder größer 200)
  {
    digitalWrite(ALARM, HIGH);                                         //Alarm an
  }
  else
  {
    digitalWrite(ALARM, LOW);                                          //ansonsten Alarm aus  
  }
}

ALARM (A5) ist dann dauerhaft auf 1

wenn ich zum Test die Alarmfunktionen auf A0 -A3 ändere (und vorher entsprechend auskommentiere) funktioniert sie.

Code:
// ------------------ WASSER --------------------------

//int WATER1     = A0;                                        //Pin A0 - Bodenhygrometer 1
//int WATER2     = A1;                                        //Pin A1 - Bodenhygrometer 2

...

// ----------------- FEUER / RAUCH ---------------------
int GAS         = A0;            // MQ-2 Gas                 //Pin A5 - Gasmelder
int FEUER1      = A1;            // YG1006 Flame1            //Pin A3 - Flammenmelder 1
int FEUER2      = A2;            // YG1006 Flame2            //Pin A4 - Flammenmelder 2
int ALARM       = A3;                                        //Pin A2 - Alarm

int GASval;
int FEUER1val;
int FEUER2val;
int ALARMval;

wo ist der unterschied zwischen A0-A3 und A2-A5? ...hier liegt augenscheinlich das Problem

Oder hängt es mit dem Thema gleichzeitige Ein und Ausgabe zusammen?
Habe ich da grundsätzlich etwas falsch verstanden? aber die hätte ich bei A0-A3 auch?

Viele viele Grüße

Nicolai
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.05.2019, 20:59
Beitrag #7
RE: 2 Sketche zusammenführen - korrelieren nicht
Du benutzt ein Pin (ALARM) als OUTPUT, liest aber gleichzeitig von diesem Pin einen Wert ein. Das passt nicht.

Code:
int ALARM     = A5;  // const byte wäre hier besser als int
void setup()
{
  Serial.begin(9600);
  pinMode(ALARM, OUTPUT);   // <<<----- Ausgabe
}

void loop()
{
  ...
  ALARMval = digitalRead(ALARM); // <<<----- Was willst Du hier einlesen?
  ...
}
Für was soll ALARMval gut sein?

Das funktioniert auch allein, wenn nur zufällig.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.05.2019, 09:08 (Dieser Beitrag wurde zuletzt bearbeitet: 22.05.2019 10:53 von Nicolai.)
Beitrag #8
RE: 2 Sketche zusammenführen - korrelieren nicht
ALARMval = digitalRead(ALARM); benutze ich nur zur Fehlersuche, um mir den Zustand von ALARM im Seriellen Monitor anzeigen zu lassen.

Baue ich mir hier den Fehler ein? ..gibt es ein elegante Lösung dafür?

Gruß

Nico

(21.05.2019 20:59)Tommy56 schrieb:  Du benutzt ein Pin (ALARM) als OUTPUT, liest aber gleichzeitig von diesem Pin einen Wert ein. Das passt nicht.

Könnte / Sollte man das so realisieren? (habe ich eben gefunden)
Code:
ALARMval = bitRead(PORTC, 5);


.pdf  PORTREAD.pdf (Größe: 106,71 KB / Downloads: 4)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Bedingung wird nicht wiederholt ausgeführt Lite 16 816 29.03.2019 05:11
Letzter Beitrag: Lite
  Gelöst ==> Arduino Nano, Kommunikation mit PC bringt nicht korrekten ASCII moehrle 4 414 02.03.2019 22:04
Letzter Beitrag: hotsystems
  Typecasting oder nicht? Batucada 1 316 19.02.2019 18:51
Letzter Beitrag: Tommy56
  Switch erkennt eine Phase nicht DonSonora 27 1.601 30.01.2019 22:24
Letzter Beitrag: MicroBahner
  Problem mit Displayanzeige LCD2004 bzw. nicht Richtig magnum1795 39 2.314 18.12.2018 08:15
Letzter Beitrag: magnum1795
  Elegoo Mega 2560 R3 lässt sich nicht programieren Union1925 6 878 03.12.2018 21:21
Letzter Beitrag: Tommy56
Rainbow Sketch lässt sich nicht editieren HKestermann 3 692 03.11.2018 11:23
Letzter Beitrag: Hilgi
  Befehl wird nicht ausgeführt renesworld 15 1.182 19.10.2018 12:37
Letzter Beitrag: hotsystems
  Anfänger bekommt den Sketch nicht zum Laufen Maschinenbauer 6 1.280 06.10.2018 21:01
Letzter Beitrag: Tommy56
  Messwert auf OLED 0,96" SSD1306 darstellen geht nicht alpenpower 8 1.840 17.09.2018 10:56
Letzter Beitrag: alpenpower

Gehe zu:


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