Forum: Mikrocontroller und Digitale Elektronik [Arduino] mehrfache Bedingungen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jens S. (server001)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin aktuell dabei mich ein wenig mit dem Arduino UNO anzufreunden 
und ein kleines Programm zu schreiben.
Die LED1&2 soll je nach Zustand von 2 Eingängen unterschiedlich hell 
leuchten.

jedoch funzt das nicht so ganz wie es soll..

der Fall 1 "scheint" zu funktionieren
Fall 2 tritt auch ein(nur nicht ganz korrekt
jedoch komme ich nicht zu Fall 3

hier mein Code und evtl kann ja wer helfen

<<---code--->>
int LED1 = 10;
int LED2 = 11;
int E1 = 2; //Eingang1 mit 5V+
int E2 = 3; //Eingang2 mit 5V+


void setup(){
//setzt Arduino pin 10,11,9,3 to frequency 122.5
//code typically inserted in setup()
TCCR1B = (TCCR1B & 0b11111000) | 0x04;
TCCR2B = (TCCR2B & 0b11111000) | 0x06;

//Pindefinitionen
 pinMode(LED1, OUTPUT);
 pinMode(LED2, OUTPUT);
  pinMode(E1, digitalRead);
  pinMode(E2, digitalRead);
}

void loop(){
//Fallauswahl zur TFL Steuerung
//----------------------------------Fall 1-----------------
//alles aus
if  (digitalRead(E1)== 0 && digitalRead(E2)== 0
    {
      // LED1
          analogWrite(LED1, 0);
    //for (int fadeValue = 0 ; fadeValue <= 0; fadeValue += 5) {
           // analogWrite(LED1, fadeValue);}
      // LED2
            analogWrite(LED2, 0);
    //for (int fadeValue1 = 0 ; fadeValue1 <= 0; fadeValue1 += 5) {
      //      analogWrite(LED2, fadeValue1);}
     }
//Ergebnis LEDs sind aus-->korrekt
//----------------------------------Fall 2-----------------
//Eingang1 an
      else if (digitalRead(E1)== HIGH)
          {
      // LED1
          for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 1) {
            analogWrite(LED1, fadeValue);}
      // LED2
            for (int fadeValue1 = 0 ; fadeValue1 <= 255; fadeValue1 += 
1) {
            analogWrite(LED2, fadeValue1);}
      }
//Ergebnis LEDs sind an, jedoch kein Fading von 0 auf 255
//----------------------------------Fall 3-----------------
//Eingang1&2 an
     if (digitalRead(E1)== HIGH  && digitalRead(E2)== HIGH)
          {
    // LED1
            for (int fadeValue = 0 ; fadeValue <= 150; fadeValue += 5) {
            analogWrite(LED1, fadeValue);}
    //LED2
            for (int fadeValue1 = 0 ; fadeValue1 <= 150; fadeValue1 += 
5) {
            analogWrite(LED2, fadeValue1);}
      }
//Ergebnis LEDs sind an, jedoch kein Fading von (letzten Zustand auf 155 
)
<<---code--->>
nehme ich E1 und nur E2 ist aktiv bleiben die LEDs an, obwohl dieser 
Zustand nicht existiert.


Ich will eigentlich noch mehr Zustände und Eingänge einbinden, aber es 
sollte erst mal so Funktionieren.

Und schön wäre es wenn zu jedem Zustandswechsel ein Fading erfolgt 
sofern sich der fadevalue ändert.

Ist mein Ansatz mit mehreren IF dafür korrekt?

Danke schon mal

: Bearbeitet durch Admin
von R. R. (elec-lisper)


Bewertung
0 lesenswert
nicht lesenswert
Hab den Code mal lesbar gemacht:
1
void loop()
2
{
3
    if  (digitalRead(E1) == 0 && digitalRead(E2) == 0)
4
    {
5
        analogWrite(LED1, 0);
6
        analogWrite(LED2, 0);
7
    }
8
    else if (digitalRead(E1) == HIGH)
9
    {
10
        for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 1)
11
            analogWrite(LED1, fadeValue);
12
13
        for (int fadeValue1 = 0 ; fadeValue1 <= 255; fadeValue1 += 1)
14
            analogWrite(LED2, fadeValue1);
15
    }
16
17
    if (digitalRead(E1) == HIGH  && digitalRead(E2) == HIGH)
18
    {
19
        for (int fadeValue = 0 ; fadeValue <= 150; fadeValue += 5)
20
            analogWrite(LED1, fadeValue);
21
22
        for (int fadeValue1 = 0 ; fadeValue1 <= 150; fadeValue1 += 5)
23
            analogWrite(LED2, fadeValue1);
24
    }
25
}

Das Problem is, dass du den Fade mit maximal-Geschwindigkeit des
Prozessors machst. Zwischen den analogWrite() is keinerlei
Pause.

PS: Viele Kommentare machen Code nicht unbedingt lesbarer. Vorallem
nicht wenn die Einrückung das ganze zusätzlich noch unübersichtlicher
gestaltet.

: Bearbeitet durch User
von Jens S. (server001)


Bewertung
0 lesenswert
nicht lesenswert
ok..hätte gedacht mehr Kommentare sind besser.. naja man lernt nie aus.. 
thx

fade mit max Geschwindigkeit.. wie kann ich es ändern? mit delay(xy);??

und wie erreiche ich das wenn eine if Bedingung erfüllt ist das er in 
dem status bleibt? wenn der Staus nicht mehr erfüllt ist trifft ja 
mindestens der status alles aus zu...

bspw.
fall-1 tritt ein=alles aus
danach tritt Fall-1 ein.. er geht zu Led wert 255
danach tritt fall-2ein... er geht zu led wert 150
-->jedoch immer wieder erst schrie 0 dann 1 dann 2 und von vorn.
ich will aber erreichen das er direkt da hin springt..

wenn ich mal fertig bin soll er bspw. direkt von Fall-1 zu Fall xy 
springen, ohne die anderen zu durchlaufen...

von R. R. (elec-lisper)


Bewertung
0 lesenswert
nicht lesenswert
Jens S. schrieb:
> ok..hätte gedacht mehr Kommentare sind besser.. naja man lernt nie aus..
> thx

Kommentare sollte man setzen wenn der Code nicht offensichtlich
ist. Dass es bei
1
analogWrite(LED1, 0);
 um LED1 geht ist ja
klar. Sogar dass sie ausgemacht werden muss. Das muss man dann nicht
extra kommentieren. Manche Lehrer bestehen natürlich drauf, dass
man jeden schei* kommentiert. Dass soll aber eher die Gewohnheit
erzeugen, dass man den Code den man da vor sich hat versteht und
prinzipiell weiss, dass man kommentieren kann und soll.
Aber oft wird dabei das Ziel aus den Augen verloren, und dann
findet man Kommentare wie:
1
int i = 10; // Integer i den Wert 10 zuweisen.

Bei denen der Informationsgehalt exakt 0 ist.

>
> fade mit max Geschwindigkeit.. wie kann ich es ändern? mit delay(xy);??

Ja, delay() sollte helfen.

> und wie erreiche ich das wenn eine if Bedingung erfüllt ist das er in
> dem status bleibt? wenn der Staus nicht mehr erfüllt ist trifft ja
> mindestens der status alles aus zu...

Dafür brauchst du deine "state machine". Im Grunde setzt du eine
globale Variable beim erreichen einer Bedingung, die
dann bei der nächsten Hauptschleifeniteration abgefragt wird.

Also in etwa so, in halbvollständigem PseudoCode:
1
#define GRUNDSTELLUNG   0
2
#define LED1_FADE       1
3
#define LED2_FADE       2
4
int status = 0;
5
6
int fadeValueLED1 = 0;
7
8
void loop()
9
{
10
    if (status == GRUNDSTELLUNG)
11
    {
12
        if (digitalRead(E1) == HIGH)
13
        {
14
            status        = LED1_FADE;
15
            fadeValueLED1 = 0;
16
            return;
17
        }
18
    }
19
    else if (status == LED1_FADE)
20
    {
21
        analogWrite(LED1, fadeValueLED1);
22
        delay(...);
23
24
        if (fadeValueLED1 == 255)
25
        {
26
            status = GRUNDSTELLUNG;
27
            return;
28
        }
29
    }
30
}

von Jens S. (server001)


Bewertung
0 lesenswert
nicht lesenswert
puh das muss ich erst mal verstehen :D

danke schon mal dafür...

so jetzt jibs erst mal ne Gans :D

: Bearbeitet durch User
von R. R. (elec-lisper)


Bewertung
0 lesenswert
nicht lesenswert
Hier nochmal eine etwas klarere Version meines Beispiels,+
inkl. Kommentaren und weniger Bugs (ist aber nicht getestet):
1
#define GRUNDSTELLUNG   0
2
#define LED1UND2_FADE   1
3
int status = 0;
4
5
int fadeValueLED1 = 0;
6
int fadeValueLED2 = 0;
7
8
void loop()
9
{
10
    // "status" hält den aktuellen Zustand des Systems fest.
11
    // Bei jedem loop() aufruf weiss damit der Prozessor,
12
    // womit er weiter machen soll.
13
14
    if (status == GRUNDSTELLUNG)
15
    {
16
        if (digitalRead(E1) == HIGH)
17
        {
18
            // Beim detektieren einer Bedingung,
19
            // sagen wir dem System, es soll beim nächsten
20
            // mal etwas anderes tun.
21
            status        = LED1UND2_FADE;
22
            // Dafür müssen wir ggf. auch noch andere
23
            // Dinge initialisieren:
24
            fadeValueLED1 = 0;
25
            fadeValueLED2 = 0;
26
            return;
27
        }
28
    }
29
    else if (status == LED1UND2_FADE)
30
    {
31
        // In diesem Zustand kümmert sich das
32
        // System um einen weiteren Schritt im Faden der beiden LEDs:
33
        analogWrite(LED1, fadeValueLED1);
34
        analogWrite(LED1, fadeValueLED2);
35
        // Ein delay, damit das menschliche Auge mit kommt, bzw. die LED
36
        // physikalisch Zeit hat die Helligkeit zu ändern:
37
        delay(...);
38
39
        // Für die nächste Iteration die Helligkeit anpassen:
40
        fadeValueLED1++;
41
        fadeValueLED2++;
42
43
        // Die Ende-Bedingung des Fades abfragen:
44
        if (fadeValueLED1 > 255)
45
        {
46
            status = GRUNDSTELLUNG;
47
            return;
48
        }
49
    }
50
}

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Bewertung
0 lesenswert
nicht lesenswert
Jens S. schrieb:
> wenn ich mal fertig bin soll er bspw. direkt von Fall-1 zu Fall xy
> springen, ohne die anderen zu durchlaufen...

 Wenn du das geschafft hast, lass es mich wissen oder poste deinen
 Code so schnell wie möglich.

> puh das muss ich erst mal verstehen :D
 Normalerweise zeichnet man zuerst eine Logiktabelle:
1
  Ein1  Ein2    Led1  Led2
2
   0     0       Aus   Aus
3
   0     1       TBD   TBD
4
   1     0       Fehler in deinem Code !!! (*)
5
   1     1       Fade  Fade

 Du hast das natürlich nicht gemacht, sondern munter drauflos
 geschrieben.

 (*) Es wird nur Eingang1 geprüft, in der nächsten Abfrage wieder,
 dismal mit Eingang2 - so etwas soll man nicht machen - immer beide
 Eingänge prüfen.

von Jens S. (server001)


Bewertung
0 lesenswert
nicht lesenswert
also das wird was schwierig für mich um das auf mich umzumünzen... aber 
ich schau weiter... hier mal die logigtabelle

  Ein1  Ein2    Led1         Led2
   0     0       Aus         Aus
   0     1       fadeTo50%   fadeTo50%
   1     0       fadeTo100%  fadeTo100%
   1     1       fadeTo50%   fadeTo50%

von Jens S. (server001)


Bewertung
0 lesenswert
nicht lesenswert
so habe das mal angepasst...
1
const int LED1 = 9; // LED links an Pin 11
2
const int LED2 = 11; // LED rechts an Pin 12
3
const int E1 = 2; //Eingang an Pin 2
4
const int E2 = 3; //Eingang an Pin3
5
6
#define GRUNDSTELLUNG   0
7
#define LED1UND2_FADE   1
8
int status = 0;
9
10
int fadeValueLED1 = 0;
11
int fadeValueLED2 = 0;
12
13
void setup(){
14
//setzt Arduino pin 10,11,9,3 to frequency 122.5
15
//code typically inserted in setup()
16
TCCR1B = (TCCR1B & 0b11111000) | 0x04;
17
TCCR2B = (TCCR2B & 0b11111000) | 0x06;
18
19
//Pindefinitionen
20
 pinMode(LED1, OUTPUT);
21
 pinMode(LED2, OUTPUT);
22
  pinMode(E1, digitalRead); 
23
  pinMode(E2, digitalRead); 
24
}
25
void loop()
26
{
27
    // "status" hält den aktuellen Zustand des Systems fest.
28
    // Bei jedem loop() aufruf weiss damit der Prozessor,
29
    // womit er weiter machen soll.
30
31
    if (status == GRUNDSTELLUNG)
32
    {
33
        if (digitalRead(E1) == HIGH)
34
        {
35
            // Beim detektieren einer Bedingung,
36
            // sagen wir dem System, es soll beim nächsten
37
            // mal etwas anderes tun.
38
            status        = LED1UND2_FADE;
39
            // Dafür müssen wir ggf. auch noch andere
40
            // Dinge initialisieren:
41
            fadeValueLED1 = 0;
42
            fadeValueLED2 = 0;
43
            return;
44
        }
45
    }
46
    else if (status == LED1UND2_FADE)
47
    {
48
        // In diesem Zustand kümmert sich das
49
        // System um einen weiteren Schritt im Faden der beiden LEDs:
50
        analogWrite(LED1, fadeValueLED1);
51
        analogWrite(LED2, fadeValueLED2);
52
        // Ein delay, damit das menschliche Auge mit kommt, bzw. die LED
53
        // physikalisch Zeit hat die Helligkeit zu ändern:
54
        delay(30);
55
56
        // Für die nächste Iteration die Helligkeit anpassen:
57
        fadeValueLED1++;
58
        fadeValueLED2++;
59
60
        // Die Ende-Bedingung des Fades abfragen:
61
        if (fadeValueLED1 > 255)
62
        {
63
            status = GRUNDSTELLUNG;
64
            return;
65
        }
66
    }
67
}

so das Ergebnis daraus...

gebe ich E1 dauerhaft +5V, dann faden beide LED währenddessen ein und 
beginnen je nach delay von vorn.
nehme ich dann E1 weg, bleiben die LEDs bei 100% stehen.(jetzt sollten 
diese zu 0 Faden

Es sollte ja so sein.

Wenn E1 permanent aktiv =Led faden zu 100%
Wenn E1 "irgendwann"aus led Faden zu 0

Wenn E1 permanent aktiv =Led faden zu 100%
Wenn E1&E2 permanent aktiv Led Faden zu 50%
Wenn E1 permanent  aktiv =Led faden wieder zu 100%

---------------------

: Bearbeitet durch User
von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Robin R. schrieb:
> Hab den Code mal lesbar gemacht:

???
warum dieses?
Robin R. schrieb:
> if  (digitalRead(E1) == 0
>     else if (digitalRead(E1) == HIGH)

doch entweder 0 und 1 oder LOW und HIGH, der Mix wird ja nicht lesbarer.

Jens S. schrieb:
> ok..hätte gedacht mehr Kommentare sind besser..

Jens S. schrieb:
> // LED1
>           analogWrite(LED1, 0);

ja dann aber nicht so sondern:

analogWrite(LED1, 0); // LED1 off

dann bleibt das bei wenig Zeilen aber trotzem mit Kommentar!

Robin R. schrieb:
> Dass es beianalogWrite(LED1, 0); um LED1 geht ist ja

aber on oder off? hänt ja von der Verschaltung ab, also 0 besagt erst 
mal NICHTS

möchte man LED Fading angepasst machen empfehle ich den Artikel LED 
Fading
https://www.mikrocontroller.net/articles/LED-Fading

klappt auch mit Arduino

: Bearbeitet durch User
von Sebastian S. (amateur)


Bewertung
0 lesenswert
nicht lesenswert
Manchmal kann auch ein Stück Käse helfen.

Z.B. Taster an B2 und B3:

switch (PortB & 0x0C) {  // 00001100
  case 0:  ...           // 00000000
           break;
  case 4:  ...           // 00000100
           break;
  case 8:  ...           // 00001000
           break;
  case 12: ...           // 00001100 oder default
           break;
}

von Jens S. (server001)


Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:
> möchte man LED Fading angepasst machen empfehle ich den Artikel LED
> Fading
> https://www.mikrocontroller.net/articles/LED-Fading

Das mit dem Anpassen ist nicht mein Problem, danke dafür

was ich gerne möchte ist
verschiede Eingangszustände -->verschiede Ausgangszustände zuweisen
und dann zwischen denen wechseln

von Jens S. (server001)


Bewertung
0 lesenswert
nicht lesenswert
Sebastian S. schrieb:
> Manchmal kann auch ein Stück Käse helfen.

schau ich mir morgen an...

von R. R. (elec-lisper)


Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:
> Robin R. schrieb:
>> Hab den Code mal lesbar gemacht:
>
> ???
> warum dieses?
> Robin R. schrieb:
>> if  (digitalRead(E1) == 0
>>     else if (digitalRead(E1) == HIGH)
>
> doch entweder 0 und 1 oder LOW und HIGH, der Mix wird ja nicht lesbarer.

Ja da hast du recht, das ist etwas chaotisch.
Ist wohl eine Macke in meinem Denken, dass
HIGH==1==true==Positiver TTL-Pegel, das ist ja alles nicht
zwangsweise so. Ich gestehe, dass ich nicht so häufig Ausflüge in
die hardwarenahe Softwareentwicklung unternehme und mich auf Arbeit
eher mit Warenwirtschaftssystemen auseinander setze, da braucht man
sowas üblicherweise nicht so genau nehmen.

> Robin R. schrieb:
>> Dass es beianalogWrite(LED1, 0); um LED1 geht ist ja
>
> aber on oder off? hänt ja von der Verschaltung ab, also 0 besagt erst
> mal NICHTS

Stimmt, so ein uC-Programm läuft ja immer in einer Hardware-Umgebung,
die auch entsprechend verschaltet ist. Da hast du recht, dass man
das (erhoffte) Verhalten der Hardware durchaus kommentieren sollte.
0/LOW kann ja in der tat etwas einschalten.

Ich hätte das analogWrite(LED1, 0); evtl. auch weite gekapselt:
1
void disableLED(int led)
2
{
3
     analogWrite(led, 0);
4
}
5
6
// ...
7
8
disableLED(LED1);

Je nach Compiler-Optimierung kann das aber wirklich unnötig
Taktzyklen kosten. Gut, da gibts ja noch
1
#define
:
1
#define DISABLE_LED(led) analogWrite(led, 0);
2
// ...
3
4
DISABLE_LED(led);

Und ob das dann wirklich soviel besser ist als ein kleiner
Kommentar, darüber lässt sich gut streiten. Ist evtl. auch
Geschmacksfrage?

Oder in C++, wenn man Klassen um der Klassen-Willen nutzen will:
1
class LEDService
2
{
3
    public:
4
        static void disable(int led) { analogWrite(led, 0); }
5
};
6
7
// ...
8
9
LEDService::disable(LED1);

von Server001 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Boar krass....das ist für mich echt zu hoch... ich fang doch grad mal 
an...

Das man bestimmten Code sicherlich optimieren oder anders aufbauen kann 
ist mir klar..
Aber ich will ja erst einmal dazu kommen das das funzt was ich will ;)

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Server001 schrieb:
> Aber ich will ja erst einmal dazu kommen das das funzt was ich will ;)

aber so verworren lernt man das nicht oder bekommt Zufallsergebnisse die 
du irgendwann später noch weniger verstehst!

: Bearbeitet durch User
von R. R. (elec-lisper)


Bewertung
0 lesenswert
nicht lesenswert
Joachim B. schrieb:
> Server001 schrieb:
>> Aber ich will ja erst einmal dazu kommen das das funzt was ich will ;)
>
> aber so verworren lernt man das nicht oder bekommt Zufallsergebnisse die
> du irgendwann später noch weniger verstehst!

Also meine ersten C-Programme die ich so mit 15 geschrieben habe
waren ein schlimmeres Chaos. Da arbeitet man auch gerne mal nach dem
"ich fummel solange daran rum, bis es ca. tut was es soll"-Prinzip.
Aber sowas ist auf nem uC wesentlich schwieriger, weil man die
Debugging-Möglichkeiten nicht so hat. Ich fing damals auch auf
einem richtigen PC an, da ging dann printf()-Debugging auch zuverlässig
und konnte sich den code dump im gdb ansehen.

von Jens S. (server001)


Bewertung
0 lesenswert
nicht lesenswert
Sebastian S. schrieb:
> Manchmal kann auch ein Stück Käse helfen.

also mit der Case version komm ich zu keinem Ergebnis... :(

Jens S. schrieb:
> so habe das mal angepasst...

evtl. kann sich dazu ja nochmal jemand äußern...
das das so kompliziert wird hat ich ja nicht gedacht...

von R. R. (elec-lisper)


Bewertung
0 lesenswert
nicht lesenswert
Du kannst auch auf die State-Maschine verzichten und die LED-Fades
in eine Schleife verschieben und in deine if-Kaskade einbauen:
1
for (int fadeValue = 0 ; fadeValue <= 150; fadeValue += 5)
2
{
3
    analogWrite(LED1, fadeValue);
4
    analogWrite(LED2, fadeValue);
5
    delay(...);
6
}

von Sebastian S. (amateur)


Bewertung
0 lesenswert
nicht lesenswert
Zwei Schalter = vier Möglichkeiten - alle berücksichtigt.

Es besteht aber auch die Möglichkeit, das Deine Schalter umgekehrt 
arbeiten. Dann muss das Beispiel anders herum abgelegt werden!

switch (PortB & 0x0C) {  // ????00??
  case 0:  ...           // 00000000  Vorher keiner gedrückt hier beide
           break;
  case 4:  ...           // 00000100  Vorher B2 gedrückt hier B3
           break;
  case 8:  ...           // 00001000  Vorher B3 gedrückt hier B2
           break;
  case 12: ...           // 00001100 oder default Jetzt beide 
losgelassen
           break;
}

: Bearbeitet durch User
von Server001 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ihr werdet nachts erst munter was;)
Muss ich morgen schauen...

Meine Schalter sind im eigentlichem Sinne keine Schalter...es sind 
schlichte Eingänge. Entweder liegen 5v+ an oder nicht...

von Jens S. (server001)


Bewertung
0 lesenswert
nicht lesenswert
ich jab jetzt für mich eine funktionierende Lösung gefunden. 
Funktioniert soweit genau so wie ich es wollte und damit kann ich 
weiterarbeiten.
1
const int LED1 = 5; // LED links an Pin 11
2
const int LED2 = 6; // LED rechts an Pin 12
3
const int E1 = 0; //Eingang an Pin 0
4
const int E2 = 1; //Eingang an Pin1
5
6
7
int TFLstatus = 0 ;
8
9
void setup(){
10
//setzt Arduino pin 10,11,9,3 to frequency 122.5
11
//code typically inserted in setup()
12
TCCR1B = (TCCR1B & 0b11111000) | 0x04;
13
TCCR2B = (TCCR2B & 0b11111000) | 0x06;
14
15
//Pindefinitionen
16
 pinMode(LED1, OUTPUT);
17
 pinMode(LED2, OUTPUT);
18
  pinMode(E1, digitalRead); 
19
  pinMode(E2, digitalRead); 
20
}
21
void LED100on() {
22
    if (TFLstatus==0&&digitalRead(E1)==HIGH) {
23
             for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
24
            analogWrite(LED1, fadeValue);delay(10);
25
            analogWrite(LED2, fadeValue);delay(10);
26
            TFLstatus = 100; }        
27
}}
28
void LED100off() {
29
    if (TFLstatus==100&&digitalRead(E1)==LOW) {
30
             for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {
31
            analogWrite(LED1, fadeValue);delay(10);
32
            analogWrite(LED2, fadeValue);delay(10);
33
            TFLstatus = 0; }
34
}}
35
void LED50on() {
36
    if (TFLstatus==100&&digitalRead(E2)==HIGH) {
37
             for (int fadeValue = 255 ; fadeValue >= 50; fadeValue -= 5) {
38
            analogWrite(LED1, fadeValue);delay(10);
39
            analogWrite(LED2, fadeValue);delay(10);
40
            TFLstatus = 50; }  
41
}}
42
void LED50off() {
43
    if (TFLstatus==50&&digitalRead(E2)==LOW) {
44
             for (int fadeValue = 50 ; fadeValue <= 255; fadeValue += 5) {
45
            analogWrite(LED1, fadeValue);delay(10);
46
            analogWrite(LED2, fadeValue);delay(10);
47
             }TFLstatus = 100;        
48
}}
49
void loop() {
50
  LED100on();
51
  LED100off();
52
  LED50on();
53
  LED50off();
54
}

was sagt ihr?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.