I2C Bus mit SBC-OLED01 und RGB-Sensor APDS9960 funktioniert nicht

Hallo zusammen,

ich möchte an meinen Arduino Nano ein SBC-OLED01 Display und einen RGB-Sensor, und zwar den APDS9960 anschließen.
Für beide devices habe ich schon jeweils einen eigenen Sketch geschrieben, funktioniert auch super.
Wenn ich aber beide gleichzeitig angeschlossen haben möchte, benötige ich ja, soweit ich weiß, einen I2C Bus, da beide über die Anschlüsse A4 und A5 (SDA und SCL) angeschlossen werden.
Mein Problem ist, dass ich nicht weiß, wie ich mit beiden devices gleichzeitig kommunizieren kann.
Ich habe einen sketch geschrieben, der auf beide devices gleichzeitig zugreift, jedoch kann ich immer nur mit dem device kommunizieren, welches innerhalb meines Sketches zuerst auftaucht.

Hier mein aktueller Sketch:
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_APDS9960.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_APDS9960 apds;
Adafruit_SSD1306 display(OLED_RESET);
enum {ein, aus};
int gruen = 2;
bool freigabe = ein;

void setup() {
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Adressierung beachten, hier 0x3C!

//enable color sensign mode
apds.enableColor(true);
}

//DEKLARATION ALLER MOEGLICHEN VARIABLEN
int i;
int countscrew = 0;

void loop() {
//VARIABLEN FÜR FARBE
uint16_t r, g, b, c;

//RGB SENSOR DATEN LADEN
while(!apds.colorDataReady()){
delay(5);
}

//START ANZEIGE
if(countscrew == 0){
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(4);
display.setCursor(5,0);
display.println("los");
display.display();
delay(1000);
}
else{}

//RGB WERTE VOM SENSOR BEKOMMEN
apds.getColorData(&r, &g, &b, &c);
delay(300);

//DISPLAY EINSTELLUNGEN
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(4);

//ANZEIGE TEXT
display.setCursor(35,0);
display.println(countscrew);

//ZEUG DAMIT ANZEIGE PASST
display.display();
display.clearDisplay();

if(countscrew == 30){
display.setTextSize(2);
display.setCursor(35,0);
display.println(countscrew);
display.setCursor(10,18);
display.println("W223 iO");
display.display();
}
if(countscrew == 32){
display.setTextSize(2);
display.setCursor(35,0);
display.println(countscrew);
display.setCursor(3,18);
display.println("V/Z 223 iO");
display.display();
}
if(countscrew == 10){
display.setTextSize(2);
display.setCursor(35,0);
display.println(countscrew);
display.setCursor(10,18);
display.println("V297 iO");
display.display();
}
else{}
delay(1000);
}

Was gerade passiert ist, dass das OLED display nicht das anzeigt, was angezeigt werden soll. Ich vermute, dass es daran liegt, dass der sketch ab der Zeile, in der die Daten vom RGB-Sensor geladen werden sollen, hängen bleibt.

Ich bin dankbar für eure Hilfe!
viele Grüße
Julia

Hi @juli_aaa. In the future, please only post in the English language categories if you're going to use English. For German, there is the #international:deutsch category, where moderators have had to move this topic and all your previous ones.

Thanks in advance for your cooperation.

https://forum.arduino.cc/c/international/deutsch/47

Dann als erstes Deinen Code in Codetags setzen!
Vor die Zeile:
#include <Wire.h>
fügst Du eine neue Zeile ein und schreibst in eckicgen Klammern das wort code
Am Ende nach der letzten schliessenden geschweiften Klammer eine neue Zeile und in eckigen Klammern \code

Im setup fehlt Dir mindestens ein

apds.begin()

nach der Zeile display.begin(...
Schau mal in die Beipiele.

Dann hast Du elses drin, die gar nicht genutzt werden.
Alles was Du nicht brauchst raus.
Dann drück in der IDE STRG-T bevor Du den code hier zeigst. sonst ist das nicht zu lesen.

Der Code kann noch eingestampft werden, mindestens bei setTextSize und setCursor(35...

1 Like

Hallo,
vielen Dank, es hat wohl tatsächlich am apds.begin() gelegen.
Komischerweise hatte ich auch mal einen Sketch der auch ohne dieses Kommando lief, aber ohne weitere Devices

Bitte nimm meine Bitte ernst.

Werde ich ab jetzt so machen!

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.