Funktion in Loop übergeben mit strip.show()

Hi alle zusammen,
bin auch noch Anfänger und habe einen Sketch geschrieben der ein Temperatursensor ausliest und dann mir mit einem Neopixel ring mit 8 RGBs von Adafruit ws2812b die wärmeabstufungen anzeigt.

Nun folgende frage wenn ich meine Routine zur Wärmeabstufung in die loop direkt schreibe funktioniert alles einwandfrei.
Aber um etwas Struktur rein zubekommen habe ich eine eigene Funktion erstellt.

Bei der Übergabe der Funktion muss irgendwas schief gehen da mein LED Ring nun unverändert bleibt.
Liegt das am strip.show() oder muss ich noch was anderes beachten ???

Vielen Dank im voraus
beni

TMP422_gegliedert.ino (3.54 KB)

Ja bitte beachte, den Sketch hier im Forum direkt zu posten.
Dazu bitte die Code-Tags verwenden. Schaltfläche </> oben links im Editorfenster.
Dann können auch die Mobilisten das besser lesen.

#include <Wire.h>
#include <Adafruit_NeoPixel.h>
const byte TMP422 = 0x4E;                                                   // Adresse des TMP75
const byte NumberOfFields = 2;                                              // Anzahl anzufordernder Felder (Bytes)
                                  
                                   
char tempHighByte;                                                          // Höherwertiges Byte der Temperatur (vorzeichenbehafteter Wert in Grad Celsius)
                                   
char tempLowByte;                                                           // Niederwertiges Byte der Temperatur (die Nachkommastellen)
float temperature;                                                          // Temperatur im Fließkomma-Format

#define PIN 6                                                               // PIN wird definiert auf Pin6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800);  // strip wird definiert    

void setup() {
Serial.begin(9600);                                                         // öffnet die Serielle Schnittstelle und gibt die Übertragungsgeschwindigkeit an 
Wire.begin();                                                               // Einbinden der Wire Bibliothek und einleiten in den I2C-Bus   


strip.begin();                                                              //  Einbinden der Adafruit_Neopixel Bibliothek und Vorbereitung zu Datenübermittlung  
strip.show();                                                               //  Initialisieren das zu Beginn alle LED`s aus sind 

}
void loop()
{

Wire.requestFrom(TMP422, NumberOfFields);                                    // 
tempHighByte = Wire.read();
tempLowByte = Wire.read();
Serial.print("Integer-Temperatur ist ");
Serial.print(tempHighByte, DEC);
Serial.print(",");
                                   // Die unteren 4 Bit von LowByte enthalten die fractional-Temperatur
int t = word( tempHighByte, tempLowByte) / 16 ;
temperature = t / 16.0;            // In Fließkommazahl umwandeln
Serial.println(temperature);


Ringlicht(temperature);
strip.show();

delay(100);

}

void Ringlicht(float temp)
{

if (temp < 25.5)
{
 strip.setPixelColor(0, 0, 0, 200);
 strip.setPixelColor(7,0, 0, 0);
 strip.setPixelColor(6,0, 0, 0);
 strip.setPixelColor(5,0, 0, 0);
 strip.setPixelColor(4,0, 0, 0);
 strip.setPixelColor(3,0, 0, 0);
 strip.setPixelColor(2,0, 0, 0);
 strip.setPixelColor(1,0, 0, 0);

strip.show();

}

else if (temp >= 25.5 && temp<=26 )
{
 strip.setPixelColor(1,0, 50, 200);
 strip.show();
}

else if (temp > 26 && temp<=26.5 )
{
 strip.setPixelColor(2,0,100, 150);
 strip.show();
}
else if (temp > 26.5 && temp<=27 )
{
 strip.setPixelColor(3,0, 150, 100);
 strip.show();
}
else if (temp > 27 && temp<=27.5 )
{
 strip.setPixelColor(4,0, 200, 50);
 strip.show();
}
else if (temp > 27.5 && temp<=28 )
{
 strip.setPixelColor(5,0, 200, 0);
 strip.show();
}
else if (temp > 28 && temp<=28.5 )
{
 strip.setPixelColor(6,50, 200, 0);
 strip.show();
}
else if (temp > 28.5 && temp<=29 )
{
 strip.setPixelColor(7,100, 150, 0);
 strip.show();
}
else if (temp > 29 && temp<=29.5 )
{
 strip.setPixelColor(0,150, 100, 0);
 strip.show();
}
else if (temp > 29.5 && temp<=30 )
{
 strip.setPixelColor(1,200, 50, 0);
 strip.show();
}


else if (temp > 30)
{
 strip.setPixelColor(2,255, 0, 0);
 strip.setPixelColor(3,0, 0, 0);
 strip.setPixelColor(4,0, 0, 0);
 strip.setPixelColor(5,0, 0, 0);
 strip.setPixelColor(6,0, 0, 0);
 strip.setPixelColor(7,0, 0, 0);
 strip.setPixelColor(0,0, 0, 0);
 strip.setPixelColor(1,0, 0, 0);

 strip.show();
  
}
}

Ich vermisse deine Funktion, die du aus der Loop aufrufen möchtest.

HotSystems:
Ich vermisse deine Funktion, die du aus der Loop aufrufen möchtest.

Was hälst Du von void Ringlicht(float temp)?

agmue:
Was hälst Du von void Ringlicht(float temp)?

Ok, dann nehmen wir die. Danke...

benji1089:
Bei der Übergabe der Funktion muss irgendwas schief gehen da mein LED Ring nun unverändert bleibt.

Das kann ich nicht bestätigen, bei mir ändern sich die Farben.

Interessant, 11 Zustände mit 8 LEDs anzuzeigen. Die Kreativität kennt keine Grenzen :slight_smile:

vielen dank hab vom micro auf due gewechselt und hab die Pin Zuweisung dann nicht neu abgespeichert :sweat_smile: dummer fehler sorry und vielen dank!!!

gruß beni