Fade mit Millis Problem

hey Leute ich hab ein kleines Problem.

Leider komm ich einfach nicht drauf wie ich den Code verändern muss das es nur bis 255 zählt und dort dann bleibt.

Ich möchte eine LED beim start von 0 auf 255 faden und sobald das commando kommt wieder von 255 auf 0.

hab da ein sketch im internet gefunden wo mir das faden sehr gut gefällt, nur zählt der kontinuierlich von 0 - 255 und 255 - 0.

kann mir wer helfen?

 value = 128+127*cos(2*PI/periode*time1);

evtl. so:

const int led_pin =3;
byte fadeValue;
int commando;
void setup() {
  // put your setup code here, to run once:

}

void loop() {
  fade_up();
  if(commando){fade_down();}

}
void fade_up()
{
   if (fadeValue <255) fadeValue ++;
       else  fadeValue=255;
       analogWrite(led_pin, fadeValue);
   }

void fade_down()
{
  if ( fadeValue >0)fadeValue --;
       else  fadeValue=0;
       analogWrite(led_pin, fadeValue);
       
  }

Vergess die Funktion gleich wieder. Für einen Fade von einer LED braucht das viel zu viel Rechenleistung auf einem AVR.

https://www.mikrocontroller.net/articles/LED-Fading

Arbeite mit Lookup-Tabellen.

danke schonmal für die Hilfe!

ardubu leider funktioniert das nicht. und linear gefällt es mir nicht :confused:

sschultewolter: Leistung auf dem Arduino brauch ich nicht für mein Projekt. es soll einfach schick aussehen wie es mit dem code von mir oben ist. nur leider nicht fade in und out sondern nur in oder out.

danke habs! :slight_smile:

float value ;
int led=3;                         
long time1=0;

int periode=2000;
int displace=0;

void setup() 
{ 
  Serial.begin(9600);
delay(4000);
}
void loop() 
{
  static boolean fadein  = 0;
  if (!fadein)
  {
    time1 = millis();
    value = 127.5+127.5*cos(2*PI/periode*(displace-time1));
    Serial.println(value);
    analogWrite(led, 255-value);
    fadein = (value <= 1); 
  }
}