RGB`s bei Dunkelheit dimmen

ich hab mir ein RGB öl und wasser thermometer mit nem nano fürs moped gebaut.
funktioniert auch recht gut und ohne störungen.

anfangs hab ich ultra bright benutzt, viel zu hell. blenden.

hab nun difuse, gehen, aber in der dunkelheit immer noch zu hell.

hatte erst die die idee, nen höheren vorwiderstand zu verwenden, aber bei sonneneinstrahlung könnte sie nicht hell genug sein.

nun würde ich gerne die RGB's über nen fotowiderstand bei dunkelheit dimmen, damit sie nicht blenden.

im www hab ich nur sachen gefunden, die bei dunkelheit angehen, nicht dimmen.

ich brauch auch keine stufenlose, sondern nur eine, die bei einen bestimmten helligkeit bzw. dunkelheit auf einen gedimmten wert umschaltet.

nur hab ich keinen plan, wie ich das umsetzen soll.....

brauch da mal was input.

Der LDR wird mit dem ADC eingelesen.

Danach hast du mehrere Optionen:

1.) den ADC Wert per map() in einen Wert für analogWrite() umsetzen:
https://www.arduino.cc/en/Reference/Map
Damit entsteht eine lineare Abhängigkeit und der PWM Wert kann alle möglichen Werte annehmen. Das ist vielleicht nicht was du willst.

2.) Selbst bestimmte Stufen festlegen:

if(wert >= ... && wert =< ...)
{
}
else if(wert >= ... && wert =< ...)
{
}

3.) Eine Tabelle anlegen und den PWM Wert aus der Tabelle auslesen nachdem den ADC Wert in einen Index umgerechnet hat.

Da Du ein RGB-LEd hast und das sicher so ansteuerst, daß verscheidene Farben herauskommen mußt Du den von Map oder Tabele erhaltenen Wert mit den Sollwerten der Farben multiplizieren damit auch die Farben gedimmt werden.
zB Du hast den Farbwert 255,128,0 bei halber Helligkeit (Du errechnest aus dem gelesenen Helligkeitswert den Faktor 0,5 und multiplizierst ihn mit dem Ferbwert um ca 128,64,0 zu erhalten eine habl so helle Farbe.
Grüße Uwe

nöö, da werden nur widerstandstandswerte abgefragt und entsprechend umgeschaltet.

z.b. bei widerstandswertwert 750 ohm umschaltung von blau auf grün usw.
über nen spannungsteiler natürlich.

hysterese ist auch eingebaut.

wird der sketch gebraucht?

garagenloeter:
nöö, da werden nur widerstandstandswerte abgefragt und entsprechend umgeschaltet.
z.b. bei widerstandswertwert 750 ohm umschaltung von blau auf grün usw.
über nen spannungsteiler natürlich.
hysterese ist auch eingebaut.
wird der sketch gebraucht?

Du sprichst in Rätseln. Was willst Du nochmal machen? Und was für eine Hysterese meinst Du? Und wieso fragst Du, ob der sketch gebraucht wird? In mir steigt das Gefühl auf, dass entweder Du oder ich hier nicht am richtigen Ort sind ...

Gruß

Gregor

Ich glaube der Garagenlöter ist nur auf der falschen Spur.

-> LDR über ADC einlesen (ggf. Mittelwerte bilden)
-> Led-Helligkeit aus dem Ergebnis der ADC Messung berechnen

Nun könnte es am einfachsten sein, man steuert die LED über HSV und nicht RGB an. Hierbei gibt man dem V-Anteil die gewünschte Messung/Berechnung vom LDR mit.
S-Anteil 100% und dem H-Anteil die entsprechende Farbe für den derzeitigen Ölstand.

Wenn ich auch falsch verstanden werden, dann sollte der TE bitte Sketch und Schaltplan nachliefern.

sschultewolter:
Ich glaube der Garagenlöter ist nur auf der falschen Spur....

Und mir kommt es so vor, als wäre ein Arduino der totale Overkill. Das sollte man doch auch mit ein paar Teilen in analoger Schaltungstechnik hinbekommen, oder irre ich mich?

Gruß

Gregor

Ja, defentiv Overkill. Aber vermutlich bei den Fragen vielleicht doch einfacher für ihn :wink:

Aber wenn er Spaß am Arduino und Programmieren hat, soll er es doch machen.

Wenn er die 3 Leds vermutlich über 3 Ausgänge schaltet, kann er doch am einfachsten 3 weitere Ausgänge benutzen und hier die Dioden jeweils mit einem anderen Vorwiderstand zum Leuchten bringen. Zur Entkopplung eine Diode in Reihe zu jedem Vorwiderstand. Sicher nicht die elegante Lösung, aber einfach für einen "Anfänger" zu Programmieren.

Da er um die Messung mit einem LDR nicht herunterkommt, würde es ihm vollkommen reichen, die LEDS über PWM anzusteuern. Scheint ja massiv frei zu sein an IOs auf dem Arduino. Dann braucht er bei den Leds nur den Vorwiderstand auf 20mA berechnen, falls noch nicht gemacht.

sschultewolter:
Da er um die Messung mit einem LDR nicht herunterkommt, würde es ihm vollkommen reichen, die LEDS über PWM anzusteuern. Scheint ja massiv frei zu sein an IOs auf dem Arduino. Dann braucht er bei den Leds nur den Vorwiderstand auf 20mA berechnen, falls noch nicht gemacht.

Da gebe ich dir völlig Recht, nur man muss es auch können. :wink:
Deswegen mein simpler Vorschlag.

gregorss:
Und mir kommt es so vor, als wäre ein Arduino der totale Overkill. Das sollte man doch auch mit ein paar Teilen in analoger Schaltungstechnik hinbekommen, oder irre ich mich?

Gruß

Gregor

Ein Kontroller hat den Vorteil daß er programmierbar ist und die Schaltung mittels Sketch verändert werden kann.
Ob man einen Arduino UNO mit ATmega328 oder einen ATtiny nimmt ist eine Entscheidung wert.
Wenn man sich für einen kleinen Kontroller entscheidet ist der nicht viel teurer als eine analoge Lösung.

Viele Grüße Uwe

uwefed:
Ein Kontroller hat den Vorteil daß er programmierbar ist und die Schaltung mittels Sketch verändert werden kann.
Ob man einen Arduino UNO mit ATmega328 oder einen ATtiny nimmt ist eine Entscheidung wert.

Stimmt. Zudem ein Arduino ja schon vorhanden und verbaut zu sein scheint.

Gruß

Gregor

hab ich doch geschrieben, das ein nano verbaut ist.
und wenn ich doch ne frage zum arduino habe, wieso bin ich hier dann falsch?

das ganze ist so aufgebaut, das bis 60° blau leuchtet, darüber grün bis 80°
zwichen 81 und 120° aus. ab 121 rot und ab 141 rot blinkend.
(für luftgekühlte motoren die gescheucht werden normal)

gemessen wird über ein NTC.

mir würde es reichen, wenn die RGB bei einem bestimmten wert (dunkelheit) auf z.b. halbe leuchtkraft zurück geht.
die if / else methode scheint mir am einfachsten zu sein.

so ist es ja auch für die einzelnen schwellwerte.

Hab mich noch bei PWM eingelesen u da war die lösung.

Ich glaub, ich habs jetzt. Zumindest zeigt die IDE keinen fehler.
Muss ich noch harwaremäßig umsetzen u schaun ob es real funzt.

das einbinden des sketch im Forum bekomm ich nicht hin., dehalb so:

// -----------------------------------------------------------------------------------------------
// Oelanzeige
int PinSensor_1=A6;
int PinR_1=3;//3;
int PinG_1=5;//5;
int PinB_1=6;//6;


float flt_Quellspannung_1=5.0;
int int_Vorwiderstand_1=1000;
int int_Widerstand_Schwelle1_1=2600; //61° 3300 56° 2700 58°
int int_Widerstand_Schwelle2_1=1700; //71°
int int_Widerstand_Schwelle3_1=830; //121° Testwert !!!
int int_Widerstand_Schwelle4_1=535; //141° Testwert !!!
long lng_Blinkinterval_1=400;  
float flt_hysterese_1=0.05; // 0.05 entspricht 5% Hysterese


int int_LEDStatus_1=LOW;//nicht verändern
long lng_vorherigeMillis_1=0; //nicht verändern


// ----------------------------------------------------------------------------------------------
// Wasseranzeige   mit Display ermittelt 

int PinSensor_2=A5;
int PinR_2=7;//7;
int PinG_2=8;//8;
int PinB_2=9;//9;


float flt_Quellspannung_2=5.0;
int int_Vorwiderstand_2=470;
int int_Widerstand_Schwelle1_2=1040; //61°   750
int int_Widerstand_Schwelle2_2=525;  //71°   375
int int_Widerstand_Schwelle3_2=202;  //100°  205
int int_Widerstand_Schwelle4_2=184;  //105°  160
long lng_Blinkinterval_2=400;  
float flt_hysterese_2=0.05; // 0.05 entspricht 5% Hysterese


int int_LEDStatus_2=LOW;//nicht verändern
long lng_vorherigeMillis_2=0; //nicht verändern


//------------------------------------------------------------------------------------------------
// Reserveanzeige

int PinSensor_3=A4;
int PinLED=11;//11;


float flt_Quellspannung_3=5.0;
int int_Vorwiderstand_3=22000; // Testwert !!!
int int_Widerstand_Schwelle1_3=20000; // über 6,5 Liter  
int int_Widerstand_Schwelle2_3=32000; // unter 5 Liter  
long lng_Blinkinterval_3=400;  

int int_LEDStatus_3=LOW;//nicht verändern
long lng_vorherigeMillis_3=0; //nicht verändern

//------------------------------------------------------------------------------------------------
// Lichtsensor

int PinLDR_4=A3;

float flt_Quellspannung_4=5.0;
int int_Vorwiderstand_4=10000;        //   Testwert !!!
int int_Widerstand_Schwelle1_4=20000; //   Testwert !!!


//---------------------------------------------
//Startsequenz


void setup() {
 RGB_1(255,0,0);
 RGB_2(255,0,0);
 LED(255);
 delay(1000);
 RGB_1(0,255,0);
 RGB_2(0,255,0);
 LED(0);
 delay(1000);
 RGB_1(0,0,255);
 RGB_2(0,0,255);
 LED(255);
 delay(1000);
 RGB_1(0,0,0);
 RGB_2(0,0,0);
 LED(0);
 delay(1000);
}

void loop() {
 int int_Messwert_1=0;
 int int_Messwert_2=0;
 int int_Messwert_3=0;
 int int_Messwert_4=0;
 
 for(int i=0;i<5;i++){
   int_Messwert_1+=analogRead(PinSensor_1);
   int_Messwert_2+=analogRead(PinSensor_2);
   int_Messwert_3+=analogRead(PinSensor_3);
   int_Messwert_4+=analogRead(PinLDR_4);
 }
 int_Messwert_1=trunc(int_Messwert_1/5);
 int_Messwert_2=trunc(int_Messwert_2/5);
 int_Messwert_3=trunc(int_Messwert_3/5);
 int_Messwert_4=trunc(int_Messwert_4/5);
 
 
 float flt_SpannungR2_1=(flt_Quellspannung_1/1023.0)*int_Messwert_1;
 float flt_SpannungR2_2=(flt_Quellspannung_2/1023.0)*int_Messwert_2;
 float flt_SpannungR2_3=(flt_Quellspannung_3/1023.0)*int_Messwert_3;
 float flt_SpannungR2_4=(flt_Quellspannung_4/1023.0)*int_Messwert_4;
 
 
 float flt_Widerstand_1=int_Vorwiderstand_1*(flt_SpannungR2_1/(flt_Quellspannung_1-flt_SpannungR2_1));
 float flt_Widerstand_2=int_Vorwiderstand_2*(flt_SpannungR2_2/(flt_Quellspannung_2-flt_SpannungR2_2));
 float flt_Widerstand_3=int_Vorwiderstand_3*(flt_SpannungR2_3/(flt_Quellspannung_3-flt_SpannungR2_3));
 float flt_Widerstand_4=int_Vorwiderstand_4*(flt_SpannungR2_4/(flt_Quellspannung_4-flt_SpannungR2_4));
 


if (flt_Widerstand_1 >int_Widerstand_Schwelle1_1){
  RGB_1(0,0,255);
}
if (flt_Widerstand_2 >int_Widerstand_Schwelle1_2){
  RGB_2(0,0,255);
}
if (flt_Widerstand_3 <int_Widerstand_Schwelle1_3){
  LED(0);
}
if (flt_Widerstand_1 <=(int_Widerstand_Schwelle1_1) && flt_Widerstand_1 > (int_Widerstand_Schwelle2_1+int_Widerstand_Schwelle2_1*flt_hysterese_1)){
  RGB_1(0,255,0);
}
if (flt_Widerstand_2 <=(int_Widerstand_Schwelle1_2) && flt_Widerstand_2 > (int_Widerstand_Schwelle2_2+int_Widerstand_Schwelle2_2*flt_hysterese_2)){
  RGB_2(0,255,0);
}
if (flt_Widerstand_1 <=(int_Widerstand_Schwelle2_1) && flt_Widerstand_1 > (int_Widerstand_Schwelle3_1+int_Widerstand_Schwelle3_1*flt_hysterese_1)){
  RGB_1(0,0,0);
}
if (flt_Widerstand_2 <=(int_Widerstand_Schwelle2_2) && flt_Widerstand_2 > (int_Widerstand_Schwelle3_2+int_Widerstand_Schwelle3_2*flt_hysterese_2)){
  RGB_2(0,0,0);
}
if (flt_Widerstand_1 <=(int_Widerstand_Schwelle3_1) && flt_Widerstand_1 > (int_Widerstand_Schwelle4_1+int_Widerstand_Schwelle4_1*flt_hysterese_1)){
  RGB_1(255,0,0);
}
if (flt_Widerstand_2 <=(int_Widerstand_Schwelle3_2) && flt_Widerstand_2 > (int_Widerstand_Schwelle4_2+int_Widerstand_Schwelle4_2*flt_hysterese_2)){
  RGB_2(255,0,0);
}
if (flt_Widerstand_3 >=int_Widerstand_Schwelle1_3 && flt_Widerstand_3 <int_Widerstand_Schwelle2_3){
  LED(255);
}
if (flt_Widerstand_4 >=int_Widerstand_Schwelle1_4) {
    RGB_1(0,0,16);
  } else {
    RGB_1(0,0,255);
}   
if (flt_Widerstand_1 <=int_Widerstand_Schwelle4_1){
   unsigned long lng_aktuelleMillis_1 = millis();
   if(lng_aktuelleMillis_1 - lng_vorherigeMillis_1 > lng_Blinkinterval_1) {
     lng_vorherigeMillis_1 = lng_aktuelleMillis_1;   
     int_LEDStatus_1 = !int_LEDStatus_1;
     if (int_LEDStatus_1==true){
       RGB_1(255,0,0);
     } else {
       RGB_1(0,0,0);
       }
     }
   }
 
if (flt_Widerstand_2 <=int_Widerstand_Schwelle4_2){
   unsigned long lng_aktuelleMillis_2 = millis();
   if(lng_aktuelleMillis_2 - lng_vorherigeMillis_2 > lng_Blinkinterval_2) {
     lng_vorherigeMillis_2 = lng_aktuelleMillis_2;   
     int_LEDStatus_2 = !int_LEDStatus_2;
     if (int_LEDStatus_2==true){
       RGB_2(255,0,0);
     } else {
       RGB_2(0,0,0);
     }
   }
 }

if (flt_Widerstand_3 >=int_Widerstand_Schwelle2_3){
   unsigned long lng_aktuelleMillis_3 = millis();
   if(lng_aktuelleMillis_3 - lng_vorherigeMillis_3 > lng_Blinkinterval_3) {
     lng_vorherigeMillis_3 = lng_aktuelleMillis_3;   
     int_LEDStatus_3 = !int_LEDStatus_3;
     if (int_LEDStatus_3==true){
       LED(255);
     } else {
       LED(0);
     }
   }
 }
}


void RGB_1(int r, int g, int b){
 analogWrite(PinR_1,r);
 analogWrite(PinG_1,g);
 analogWrite(PinB_1,b);
}


void RGB_2(int r, int g, int b){
 analogWrite(PinR_2,r);
 analogWrite(PinG_2,g);
 analogWrite(PinB_2,b);
}


void LED(int led){
 analogWrite(PinLED,led);
}

garagenloeter:
das einbinden des sketch im Forum bekomm ich nicht hin., dehalb so:

Klicke mal auf den Button </>, dann bekommst Du code-Tags, da dann mitten rein.

danke für den hinweis.
nix für ungut, aber diese forensoftware ist grottig.
da gibt es weit aus besseres.
nun gut, ist halt wie es ist.

// -----------------------------------------------------------------------------------------------
// Oelanzeige
int PinSensor_1=A6;
int PinR_1=3;//3;
int PinG_1=5;//5;
int PinB_1=6;//6;


float flt_Quellspannung_1=5.0;
int int_Vorwiderstand_1=1000;
int int_Widerstand_Schwelle1_1=2600; //61° 3300 56° 2700 58°
int int_Widerstand_Schwelle2_1=1700; //71°
int int_Widerstand_Schwelle3_1=830; //121° Testwert !!!
int int_Widerstand_Schwelle4_1=535; //141° Testwert !!!
long lng_Blinkinterval_1=400;  
float flt_hysterese_1=0.05; // 0.05 entspricht 5% Hysterese


int int_LEDStatus_1=LOW;//nicht verändern
long lng_vorherigeMillis_1=0; //nicht verändern


// ----------------------------------------------------------------------------------------------
// Wasseranzeige   mit Display ermittelt 

int PinSensor_2=A5;
int PinR_2=7;//7;
int PinG_2=8;//8;
int PinB_2=9;//9;


float flt_Quellspannung_2=5.0;
int int_Vorwiderstand_2=470;
int int_Widerstand_Schwelle1_2=1040; //61°   750
int int_Widerstand_Schwelle2_2=525;  //71°   375
int int_Widerstand_Schwelle3_2=202;  //100°  205
int int_Widerstand_Schwelle4_2=184;  //105°  160
long lng_Blinkinterval_2=400;  
float flt_hysterese_2=0.05; // 0.05 entspricht 5% Hysterese


int int_LEDStatus_2=LOW;//nicht verändern
long lng_vorherigeMillis_2=0; //nicht verändern


//------------------------------------------------------------------------------------------------
// Reserveanzeige

int PinSensor_3=A4;
int PinLED=11;//11;


float flt_Quellspannung_3=5.0;
int int_Vorwiderstand_3=22000; // Testwert !!!
int int_Widerstand_Schwelle1_3=20000; // über 6,5 Liter  
int int_Widerstand_Schwelle2_3=32000; // unter 5 Liter  
long lng_Blinkinterval_3=400;  

int int_LEDStatus_3=LOW;//nicht verändern
long lng_vorherigeMillis_3=0; //nicht verändern

//------------------------------------------------------------------------------------------------
// Lichtsensor

int PinLDR_4=A3;

float flt_Quellspannung_4=5.0;
int int_Vorwiderstand_4=10000;        //   Testwert !!!
int int_Widerstand_Schwelle1_4=20000; //   Testwert !!!


//---------------------------------------------
//Startsequenz


void setup() {
  RGB_1(255,0,0);
  RGB_2(255,0,0);
  LED(255);
  delay(1000);
  RGB_1(0,255,0);
  RGB_2(0,255,0);
  LED(0);
  delay(1000);
  RGB_1(0,0,255);
  RGB_2(0,0,255);
  LED(255);
  delay(1000);
  RGB_1(0,0,0);
  RGB_2(0,0,0);
  LED(0);
  delay(1000);
}

void loop() {
  int int_Messwert_1=0;
  int int_Messwert_2=0;
  int int_Messwert_3=0;
  int int_Messwert_4=0;
  
  for(int i=0;i<5;i++){
    int_Messwert_1+=analogRead(PinSensor_1);
    int_Messwert_2+=analogRead(PinSensor_2);
    int_Messwert_3+=analogRead(PinSensor_3);
    int_Messwert_4+=analogRead(PinLDR_4);
  }
  int_Messwert_1=trunc(int_Messwert_1/5);
  int_Messwert_2=trunc(int_Messwert_2/5);
  int_Messwert_3=trunc(int_Messwert_3/5);
  int_Messwert_4=trunc(int_Messwert_4/5);
  
  
  float flt_SpannungR2_1=(flt_Quellspannung_1/1023.0)*int_Messwert_1;
  float flt_SpannungR2_2=(flt_Quellspannung_2/1023.0)*int_Messwert_2;
  float flt_SpannungR2_3=(flt_Quellspannung_3/1023.0)*int_Messwert_3;
  float flt_SpannungR2_4=(flt_Quellspannung_4/1023.0)*int_Messwert_4;
  
  
  float flt_Widerstand_1=int_Vorwiderstand_1*(flt_SpannungR2_1/(flt_Quellspannung_1-flt_SpannungR2_1));
  float flt_Widerstand_2=int_Vorwiderstand_2*(flt_SpannungR2_2/(flt_Quellspannung_2-flt_SpannungR2_2));
  float flt_Widerstand_3=int_Vorwiderstand_3*(flt_SpannungR2_3/(flt_Quellspannung_3-flt_SpannungR2_3));
  float flt_Widerstand_4=int_Vorwiderstand_4*(flt_SpannungR2_4/(flt_Quellspannung_4-flt_SpannungR2_4));
  


 if (flt_Widerstand_1 >int_Widerstand_Schwelle1_1){
   RGB_1(0,0,255);
 }
 if (flt_Widerstand_2 >int_Widerstand_Schwelle1_2){
   RGB_2(0,0,255);
 }
 if (flt_Widerstand_3 <int_Widerstand_Schwelle1_3){
   LED(0);
 }
 if (flt_Widerstand_1 <=(int_Widerstand_Schwelle1_1) && flt_Widerstand_1 > (int_Widerstand_Schwelle2_1+int_Widerstand_Schwelle2_1*flt_hysterese_1)){
   RGB_1(0,255,0);
 }
 if (flt_Widerstand_2 <=(int_Widerstand_Schwelle1_2) && flt_Widerstand_2 > (int_Widerstand_Schwelle2_2+int_Widerstand_Schwelle2_2*flt_hysterese_2)){
   RGB_2(0,255,0);
 }
 if (flt_Widerstand_1 <=(int_Widerstand_Schwelle2_1) && flt_Widerstand_1 > (int_Widerstand_Schwelle3_1+int_Widerstand_Schwelle3_1*flt_hysterese_1)){
   RGB_1(0,0,0);
 }
 if (flt_Widerstand_2 <=(int_Widerstand_Schwelle2_2) && flt_Widerstand_2 > (int_Widerstand_Schwelle3_2+int_Widerstand_Schwelle3_2*flt_hysterese_2)){
   RGB_2(0,0,0);
 }
 if (flt_Widerstand_1 <=(int_Widerstand_Schwelle3_1) && flt_Widerstand_1 > (int_Widerstand_Schwelle4_1+int_Widerstand_Schwelle4_1*flt_hysterese_1)){
   RGB_1(255,0,0);
 }
 if (flt_Widerstand_2 <=(int_Widerstand_Schwelle3_2) && flt_Widerstand_2 > (int_Widerstand_Schwelle4_2+int_Widerstand_Schwelle4_2*flt_hysterese_2)){
   RGB_2(255,0,0);
 }
 if (flt_Widerstand_3 >=int_Widerstand_Schwelle1_3 && flt_Widerstand_3 <int_Widerstand_Schwelle2_3){
   LED(255);
 }
 if (flt_Widerstand_4 >=int_Widerstand_Schwelle1_4) {
     RGB_1(0,0,16);
   } else {
     RGB_1(0,0,255);
 }   
 if (flt_Widerstand_1 <=int_Widerstand_Schwelle4_1){
    unsigned long lng_aktuelleMillis_1 = millis();
    if(lng_aktuelleMillis_1 - lng_vorherigeMillis_1 > lng_Blinkinterval_1) {
      lng_vorherigeMillis_1 = lng_aktuelleMillis_1;   
      int_LEDStatus_1 = !int_LEDStatus_1;
      if (int_LEDStatus_1==true){
        RGB_1(255,0,0);
      } else {
        RGB_1(0,0,0);
        }
      }
    }
  
 if (flt_Widerstand_2 <=int_Widerstand_Schwelle4_2){
    unsigned long lng_aktuelleMillis_2 = millis();
    if(lng_aktuelleMillis_2 - lng_vorherigeMillis_2 > lng_Blinkinterval_2) {
      lng_vorherigeMillis_2 = lng_aktuelleMillis_2;   
      int_LEDStatus_2 = !int_LEDStatus_2;
      if (int_LEDStatus_2==true){
        RGB_2(255,0,0);
      } else {
        RGB_2(0,0,0);
      }
    }
  }

 if (flt_Widerstand_3 >=int_Widerstand_Schwelle2_3){
    unsigned long lng_aktuelleMillis_3 = millis();
    if(lng_aktuelleMillis_3 - lng_vorherigeMillis_3 > lng_Blinkinterval_3) {
      lng_vorherigeMillis_3 = lng_aktuelleMillis_3;   
      int_LEDStatus_3 = !int_LEDStatus_3;
      if (int_LEDStatus_3==true){
        LED(255);
      } else {
        LED(0);
      }
    }
  }
}


void RGB_1(int r, int g, int b){
  analogWrite(PinR_1,r);
  analogWrite(PinG_1,g);
  analogWrite(PinB_1,b);
}


void RGB_2(int r, int g, int b){
  analogWrite(PinR_2,r);
  analogWrite(PinG_2,g);
  analogWrite(PinB_2,b);
}


void LED(int led){
  analogWrite(PinLED,led);
}

Man kann schon auch nachträglich editieren und die CODE Tags hinzufügen. Habs bereits gemacht.

Du solltest dir angewöhnen den Variablen sprechende Namen zu geben und Arrays zu vewenden.

int_Widerstand_Schwelle1_2
Wäre es nicht besser Wassertemperatur_limit_1 ?

Du brauchst auch nicht alles 4 mal zu schreiben sondern mach das in einer Funktion die 4 mal aufgerufen wird.

Grüße Uwe

Du könntest Konstanten als solche dem Compiler bekanntmachen:

// -----------------------------------------------------------------------------------------------
// Oelanzeige
const int PinSensor_1=A6;
const int PinR_1=3;//3;
const int PinG_1=5;//5;
const int PinB_1=6;//6;


const float flt_Quellspannung_1=5.0;
const int int_Vorwiderstand_1=1000;
const int int_Widerstand_Schwelle1_1=2600; //61° 3300 56° 2700 58°
const int int_Widerstand_Schwelle2_1=1700; //71°
const int int_Widerstand_Schwelle3_1=830; //121° Testwert !!!
const int int_Widerstand_Schwelle4_1=535; //141° Testwert !!!
const long lng_Blinkinterval_1=400;  
const float flt_hysterese_1=0.05; // 0.05 entspricht 5% Hysterese


int int_LEDStatus_1=LOW;//nicht verändern
long lng_vorherigeMillis_1=0; //nicht verändern


// ----------------------------------------------------------------------------------------------
// Wasseranzeige   mit Display ermittelt 

const int PinSensor_2=A5;
const int PinR_2=7;//7;
const int PinG_2=8;//8;
const int PinB_2=9;//9;


const float flt_Quellspannung_2=5.0;
const int int_Vorwiderstand_2=470;
const int int_Widerstand_Schwelle1_2=1040; //61°   750
const int int_Widerstand_Schwelle2_2=525;  //71°   375
const int int_Widerstand_Schwelle3_2=202;  //100°  205
const int int_Widerstand_Schwelle4_2=184;  //105°  160
const long lng_Blinkinterval_2=400;  
const float flt_hysterese_2=0.05; // 0.05 entspricht 5% Hysterese


int int_LEDStatus_2=LOW;//nicht verändern
long lng_vorherigeMillis_2=0; //nicht verändern


//------------------------------------------------------------------------------------------------
// Reserveanzeige

const int PinSensor_3=A4;
const int PinLED=11;//11;


const float flt_Quellspannung_3=5.0;
const int int_Vorwiderstand_3=22000; // Testwert !!!
const int int_Widerstand_Schwelle1_3=20000; // über 6,5 Liter  
const int int_Widerstand_Schwelle2_3=32000; // unter 5 Liter  
const long lng_Blinkinterval_3=400;  

int int_LEDStatus_3=LOW;//nicht verändern
long lng_vorherigeMillis_3=0; //nicht verändern

//------------------------------------------------------------------------------------------------
// Lichtsensor

const int PinLDR_4=A3;

const float flt_Quellspannung_4=5.0;
const int int_Vorwiderstand_4=10000;        //   Testwert !!!
const int int_Widerstand_Schwelle1_4=20000; //   Testwert !!!


//---------------------------------------------

Vorher: Der Sketch verwendet 5.990 Bytes, Globale Variablen verwenden 117 Bytes
Nachher: Der Sketch verwendet 5.030 Bytes, Globale Variablen verwenden 29 Bytes

garagenloeter:
nix für ungut, aber diese forensoftware ist grottig.
da gibt es weit aus besseres.
nun gut, ist halt wie es ist.

Genau und ich vertraue auf Uwe, daß er bei den richtigen Leuten vorstellig wird, damit sich das bessert. Wir können halt nur mit guten Inhalten punkten ... :slight_smile:

super, Danke.
wieder was gelernt... :slight_smile:

Um der kompaktheit hier noch ein verspäteter Vorschlag mit einem einzelnen NeoPixel. Du brauchst keine Vorwiderstände es wird alles Programmiert und man kann es auch auf einem kleinen 8Pin Attiny85 machen.
Klick
Gruß
DerDani