Beleuchtungssteuerung

Hallo,

ich habe ein kleines Problem, dass ich irgendwie bisher noch nicht lösen konnte. Hab es schon auf verschiedenste Arten versucht, aber diese ist wohl bisher meine beste.

  1. Taster zu einem Toggletaster also schlussendlich zu einem AN/AUS Taster umfunktionieren ==> Dies hat soweit geklappt
  2. Wird der Schalter betätigt leuchtet eine LED auf um anzuzeigen, dass die Schaltung nun an ist. Dann soll die zweite LED mittels PWM langsam heller werden bis die maximale Ausgangsspannung an der LED und natürlich einem Vorwiderstand anliegt. Wird die Schaltung mittels Taster wieder ausgeschalten soll die LED genauso langsam wieder dunkler werden.
    So mein Problem in der folgenden Schaltung ist, dass die LED beim Einschalten heller wird bis zum Maximum dann wieder ganz dunkel und dann wieder heller und bleibt dann auch so. Das selbe passiert beim Ausschalten.

Jemand eine Idee wo das Problem liegt?

int const LED = 3;
int const Taster = 2;
int const Lampe = 10;

void setup ()
{
pinMode(LED, OUTPUT);
pinMode(Taster, INPUT);
pinMode(Lampe, OUTPUT);
digitalWrite(LED, LOW);
}

boolean status = LOW;
boolean statusLED = HIGH;

void loop()
{
//Toggle-Schalter
int stateTaster = digitalRead(Taster);
if (status != stateTaster)
{
if (stateTaster)
{
digitalWrite(LED, statusLED);
statusLED = !statusLED;
}
status = stateTaster;
delay (10);

//Eigendliches Programm
if(digitalRead(LED) == HIGH)
{
for(int i=0; i=255; i++)
{
analogWrite(Lampe, i);
delay(35);
}
}

if(digitalRead(LED) == LOW)
{
for(int i=255; i=0; i--)
{
analogWrite(Lampe, i);
delay(35);
}
}
}
}

Wär super wenn es jemand herausfindet. :slight_smile:

int const, hab ich noch nie gesehen, nur const int.
Ansonsten, läuft :smiley:

Du solltest dir mal for-Schleifen genauer ansehen. Das geht so nicht:

for(int i=0; i=255; i++)
 for(int i=255; i=0; i--)

Der zweite Parameter ist keine End-Bedingung, sondern funktioniert ähnlich wie "while". Die Schleife läuft solange diese Bedingung true ist. Also verwendet man da < oder <=

Und ein kleiner off topic Exkurs zu const

Es ist egal wo man das hinschreibt das geht beides:

const int value = 1;
int const value = 1;

Ersteres ist aber eher Standard

Richtig interessant wird es erst wenn man mit Zeigern arbeitet.

Zeiger auf const Daten:

int value = 1;
int value2 = 2;
const int* pV = &value;           //Alternativ auch int const* pV = &value

*pV = 2;          //Fehler: keine Zuweisung zu einer const Variablen möglich
pV = &value2;     //kein Fehler! Der Zeiger selbst ist nicht const

const Zeiger auf nicht-const Daten:

int* const pV = &value;

*pV = 2;             //kein Fehler! Die Daten auf die der Zeiger zeigt sind nicht const
pV = &value2;    //Fehler: die Zeiger Variable ist const

const Zeiger auf const Daten:

const int const* pV= &value;      //oder: int const* const pV= &value;

*pV = 2;             //Fehler! Die Daten sind const
pV = &value2;    //Fehler: die Zeiger Variable ist const

Letzteres wird noch für den Arduino sehr relevant werden. Mit der neuesten IDE Version 1.5.7 BETA hat man endlich mal die antike Version der avr toolchain aktualisiert und verwendet endlich gcc 4.8.1 und avr-libc 1.8.0

Jetzt wird aber bei der Verwendung von PROGMEM const-correctness erzwungen. Das ist vor allem bei PROGMEM Arrays aus Strings relevant. Das hier lief vorher:

...
const char dayString6[] PROGMEM = "  Sonntag ";
const char* dayStrings[] PROGMEM = { dayString0, dayString1, dayString2, dayString3, dayString4, dayString5, dayString6 };

Und wird so in vielen Tutorials erklärt und in Libraries verwendet

Jetzt wird aber ein const Zeiger auf const Daten gefordert und es muss so heißen:

const char* const dayStrings[] PROGMEM = { dayString0, dayString1, dayString2, dayString3, dayString4, dayString5, dayString6 };

Das führt mit der neuen IDE Version zu Fehlern u.a. in UTFT (bei den Font Definition, aber da sogar mit einfachen Arrays die nicht const sind) und in der Time Lib mit String Arrays. Ist aber schnell behoben.

Ok danke schon mal für die grundlegenden Infos :slight_smile:

Leider ändert sich damit nichts an meinem Fehler.
Der Durchlauf des "heller" bzw. "dunkler" werden passiert immer noch zweimal :~