Softwareserial zickt

Ich habe jetzt mal alles rausgeschmissen, was nicht zu meinem Problem gehört.

/*-----------O2----------*/
#include "DFRobot_MultiGasSensor.h"
#define I2C_COMMUNICATION 
#define I2C_ADDRESS 0x74
DFRobot_GAS_I2C gas(&Wire , I2C_ADDRESS);


/*----------Licht-------*/
/* BH1750_WE (=GY-30)*/
#include <Wire.h>
#include <BH1750_WE.h>
#define BH1750_ADDRESS 0x23
BH1750_WE myBH1750 = BH1750_WE(BH1750_ADDRESS); 
float Light = myBH1750.getLux();

float O2;

void setup() 
{
   Serial.begin(9600);
   Wire.begin();
   if(!myBH1750.init()){ // sets default values: mode = CHM, measuring time factor = 1.0
    Serial.println("Connection to the BH1750 failed");
    Serial.println("Check wiring and I2C address");
    while(1){}
  }
  else{
    Serial.println("BH1750 is connected");
  }

   while(!gas.begin())
   {
    Serial.println("Kein O2-Sensor");
    delay(1000);
   }

   gas.changeAcquireMode(gas.PASSIVITY);
   delay(1000);

   gas.setTempCompensation(gas.OFF);
}

void loop() 
{
   O2 = gas.readGasConcentrationPPM();
      Serial.print(O2);
      Serial.print('|');
      Serial.println(Light);

}

Auch hier tut sich nichts im Monitor. kein SoftwareSerial-Gefummel, keine define-Orgie...

Noch zu Tommy56 und den Pullup-Widerständen beim GY-30: Ich habe hier ein BreakoutBoard, auf dem der Sensor und etwas Peripherie fest verbaut sind, soweit man die Leiterbahnen erkennen kann, auch nur ein 10k-Pullup an SDA, von SCL führt eine Leiterbahn zu einem 2-poligen Bauteil, das mit SJ beschriftet ist und mit dem Multimeter keinen Durchgang zeigt, also sicherlich kein Pullup.

Beide Module werden korrekt erkannt.

Ich vermute, in die SCL- und SDA-Leitungen?

Wenn der Scanner den Sensor erkennt, brauchst du die zusätzlichen Widerstände nicht
Läuft denn der BH1750 alleine in eigenem Sketch ?

Ja. BH1750_WE_example

Zwischen SCL/SDA und Vcc.
Lass mal nach Serial.begin(9600); etwas ausgeben, z.B.: Serial.println("Start"); um erst mal zu sehen, ob die serielle Verbindung überhaupt funktioniert.

Gruß Tommy

void setup() 
{
   Serial.begin(9600);
   Serial.print("XXX");
... usw.

Nix. Keine Ausgabe.

So macht das wenig Sinn.
Du musst schon deinen Code verwenden.
Dazu verwendet man im Sketch eigene Funktionen für die einzelnen Sensoren.
Dann ist eine einzelne Prüfung möglich.

Setze mal zwischen Serial.begin und Serial.print ein delay(100);

delay(100);

Bringt auch nichts...

Für heute muss ich mich erst mal verabschieden. Ich bedanke mich schon mal bei den Postern für ihre Zeit und Mühe. Ich greife HotSystems Vorschlag auf und lagere den Code für die einzelnen Sensoren in eigene Funktionen aus.

Dann hast Du ein ganz anderes Problem. Es kommt nichts auf dem Seriellen Monitor an, egal was im Sketch passiert.
Welche IDE verwendest Du?

Gruß Tommy

Das das mit Software.serial nix zu tun hat, ist mir ja mittlerweile klar geworden. Die Lösung sieht so aus: Ich habe bis jetzt die Variable Light global definiert, nämlich im Kopf nach BH1750_WE myBH1750 = BH1750_WE(BH1750_ADDRESS); . Dann erfolgt keine Ausgabe (was mir nicht so ganz einleuchtet, denn das Objekt ist in diesem Moment doch schon definiert). Wird die Deklaration von Light statt dessen in die Funktion hinein verschoben, gehts:

*----------Licht-------*/
/* BH1750_WE (=GY-30)*/
#include <Wire.h>
#include <BH1750_WE.h>
#define BH1750_ADDRESS 0x23
BH1750_WE myBH1750 = BH1750_WE(BH1750_ADDRESS); 
// float Light = myBH1750.getLux(); // jetzt verschoben in die Funktion light
/*-----------O2----------*/
#include "DFRobot_MultiGasSensor.h"
#define I2C_COMMUNICATION 
#define DFR_ADDRESS 0x74
DFRobot_GAS_I2C gas(&Wire , DFR_ADDRESS);

float O2;

void setup() 
{
   Serial.begin(9600);
   delay(100);
   Serial.print("XXX");
   while(!gas.begin())
   {
    Serial.println("Kein O2-Sensor");
    delay(1000);
   }

   gas.changeAcquireMode(gas.PASSIVITY);
   delay(1000);

   gas.setTempCompensation(gas.OFF);
}

void loop() 
{
   O2 = gas.readGasConcentrationPPM();
      Serial.print(O2);
      Serial.print('|');
    light();
}
void light(){
    float Light = myBH1750.getLux();
    Wire.begin();
   if(!myBH1750.init()){ // sets default values: mode = CHM, measuring time factor = 1.0
    Serial.println("Connection to the BH1750 failed");
    Serial.println("Check wiring and I2C address");
    while(1){}
  }
  else{
//    Serial.println("BH1750 is connected");
  }
  Serial.println(Light); 
}

Jetzt läuft's so wie es soll. Vielen Dank für Eure Hilfe!

Mag sein, dass es so soll. Aber richtig ist das def. nicht.
Wire.begin() gehört in das setup() damit auch der 2 Sensor richtig davon profitiert.
So ist das jedenfalls keine Lösung.

Wire.begin(); eingefügt im setup-Abschnitt.