Hallo liebe Arduino Community,
ich schreib hier auch mal was, weil ich aktuell nicht weiter komme.
Ich arbeite aktuell an einem kleinem Projekt mit dem ESP8266 und SCD30 Sensor.
Der Sensor soll die Werte erfassen und dann ausgeben.
Bei mir erfolgt die Ausgabe auf einer 8x8 Adafruit Matrix.
Ich hab aktuell ein Problem.
Mein Code steht soweit (warscheinlich nicht gut aber sollte erstmal so passen, programmier noch nicht so lang)
Sobald ich den Sensor Ansteuer, gibt er kein Wert aus.
Wenn ich dann unten im Loop alles nach delay(500); rauslösche, dass heißt alle if-Funktionen weg, geht es wieder.
Hat einer eine Idee woran es liegen könnte?
Er hat irgendwie Probleme das ganze zu loopen.
if ([u]int/u <1000 )
Das int hab ich hin, weil ich dachte, dass er irgendwie einen Wert braucht.
Vielen Dank schon im vorraus
Gruß Rayven
P.S. Gerne auch über Discord melden :D: Rayvenlive#6122
Hier der Code:
#include <Wire.h> // Wird benötigt für die I2C Ports(Beim ESP8266 Pin D1 und D2))
#include "SparkFun_SCD30_Arduino_Library.h" //Bibliothek für Co2 Sensor (SCD30)
#include <avr/pgmspace.h> // Es wird im Flash Speicher gespeichet. [Needed to store stuff in Flash using PROGMEM] (verbraucht weniger Speicher und wird nicht in Flash gespeichert)
#include "FastLED.h" // FastLED Bibliothek zum LED Steuern. [Fastled library to control the LEDs]
SCD30 airSensor;
#define NUM_LEDS 64 // Anzahl der LED. [How many leds are connected?]
#define DATA_PIN 6 // Data Pin der LED Matrix. [Connected to the data pin of the first LED strip]
CRGB leds[NUM_LEDS]; // RGB Pixel. [Define the array of leds]
//Jetzt werden alle 9 Möglichkeiten eingetragen (Von alle Grün zu alle Rot)
// Sie werden alle mit dem HTML Farb code wiedergegeben
const long Bild1[] PROGMEM = // Alle Grün (0-1000)
{
0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00
};
Die anderen Hier hab ich rausgenommen, weils zu lang wäre
void setup(){
FastLED.addLeds<NEOPIXEL,DATA_PIN>(leds, NUM_LEDS); //FastLED Bibliothek mit Pin wird angesteuert [Init of the Fastled library]
FastLED.setBrightness(50); //Helligkeit [Brightness] (Max255)
Serial.begin(115200);
Serial.println("SCD30 Example");
Wire.begin();
if (airSensor.begin() == false)
{
Serial.println("Air sensor not detected. Please check wiring. Freezing...");
while (1)
;
}
}
void loop()
{
if (airSensor.dataAvailable())
{
Serial.print("co2(ppm):");
Serial.print(airSensor.getCO2());
Serial.print(" temp(C):");
Serial.print(airSensor.getTemperature(), 1);
Serial.print(" humidity(%):");
Serial.print(airSensor.getHumidity(), 1);
Serial.println();
}
else
{
Serial.println("Waiting for new data");
}
delay(500); //SCD30 liest nur alle 2 Sekunden den Wert aus
if (int(airSensor.getCO2()) <1000 ) //PPM bis 1000
{
FastLED.clear();
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = pgm_read_dword(&(Bild1[i]));
}
FastLED.show();
delay(100); //SCD30 liest nur alle 2 Sekunden den Wert aus
}
if (int(airSensor.getCO2()) >1000 && int(airSensor.getCO2()) <=1143) //Wenn der Messwert größer 1000 und kleiner-gleich als 1143 ist, dann...
{
FastLED.clear();
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = pgm_read_dword(&(Bild2[i]));
}
FastLED.show();
delay(100); //SCD30 liest nur alle 2 Sekunden den Wert aus
}
if (int(airSensor.getCO2()) >1143 && int(airSensor.getCO2()) <=1286) //Wenn der Messwert größer 1143 und kleiner-gleich als 1286 ist, dann...
{
FastLED.clear();
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = pgm_read_dword(&(Bild3[i]));
}
FastLED.show();
delay(100); //SCD30 liest nur alle 2 Sekunden den Wert aus
}
if (int(airSensor.getCO2()) >1286 && int(airSensor.getCO2()) <=1429) //Wenn der Messwert größer 1286 und kleiner-gleich als 1429 ist, dann...
{
FastLED.clear();
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = pgm_read_dword(&(Bild4[i]));
}
FastLED.show();
delay(100); //SCD30 liest nur alle 2 Sekunden den Wert aus
}
if (int(airSensor.getCO2()) >1429 && int(airSensor.getCO2()) <=1572) //Wenn der Messwert größer 1429 und kleiner-gleich als 1572 ist, dann...
{
FastLED.clear();
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = pgm_read_dword(&(Bild5[i]));
}
FastLED.show();
delay(100); //SCD30 liest nur alle 2 Sekunden den Wert aus
}
if (int(airSensor.getCO2()) >1572 && int(airSensor.getCO2()) <=1715) //Wenn der Messwert größer 1572 und kleiner-gleich als 1715 ist, dann...
{
FastLED.clear();
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = pgm_read_dword(&(Bild6[i]));
}
FastLED.show();
delay(100); //SCD30 liest nur alle 2 Sekunden den Wert aus
}
if (int(airSensor.getCO2()) >1715 && int(airSensor.getCO2()) <=1858) //Wenn der Messwert größer 1715 und kleiner-gleich als 1858 ist, dann...
{
FastLED.clear();
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = pgm_read_dword(&(Bild7[i]));
}
FastLED.show();
delay(100); //SCD30 liest nur alle 2 Sekunden den Wert aus
}
if (int(airSensor.getCO2()) >1858 && int(airSensor.getCO2()) <=2001) //Wenn der Messwert größer 1858 und kleiner-gleich als 2001 ist, dann...
{
FastLED.clear();
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = pgm_read_dword(&(Bild8[i]));
}
FastLED.show();
delay(100); //SCD30 liest nur alle 2 Sekunden den Wert aus
}
if (int(airSensor.getCO2()) >2001) //Wenn der Messwert größer 2001, dann...
{
FastLED.clear();
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = pgm_read_dword(&(Bild9[i]));
}
FastLED.show();
delay(100); //SCD30 liest nur alle 2 Sekunden den Wert aus
}
}
Programmco2sensor.txt (11.3 KB)