You are not logged in.

Dear visitor, welcome to We-Mod-It | Das Forum von Moddern für Modder. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

Scynd

1. Platz Enermax Casecon Contest

  • "Scynd" started this thread

Posts: 915

Date of registration: Mar 12th 2012

Location: München

Occupation: Maschinenbautechniker

Thanks: 74

  • Send private message

1

Monday, February 8th 2016, 10:21am

Arduino Tutorial 2.4 - RGB LED Fader


2.4 - RGB LED Fader





Der Vollständigkeit halber, zeige ich euch auch noch wie man die LEDs zum Faden/pulsieren bringt (Breathing Effect). Das gehört jetzt eigentlich nicht direkt unter RGB LEDs, da es auch mit einfarbigen funktioniert, aber ich finde der Effekt sieht im Computer Bereich einfach super aus.
Um den RGB LEDs gerecht zu werden, kann man verschiedene Farben mit einem Taster durchschalten, ähnlich wie im Tutorial 2.1

Programm 0 = LEDs aus
Programm 1 = LEDs faden Blau
Programm 2 = LEDs faden Rot
Programm 3 = LEDs faden Grün
Programm 4 = LEDs faden Lila



Teileliste




Anschlussplan






Code

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
/*
Arduino Tutorial 2.4 - RGB LEDs Faden

In diesem Tutorial geht es darum verschiedene Farben der RGB LEDs 
zum pulsieren zu bringen und mittels Taster die Farben durchzuschalten.

by Scynd 2015
http://www.scynd.de/tutorials/arduino-tutorials.html
*/

//Konstanten
const int tasterPin = 2; 	// Taster an Pin 2 angeschlossen
const int blauPin = 9;   	// Blaue LED an Pin 9 angeschlossen
const int rotPin = 10;   	// Rote LED an Pin 10 angeschlossen
const int gruenPin = 11; 	// Gruene LED an Pin 11 angeschlossen
const int fadeGeschw = 30;   // Variable für die Geschwindigkeit. Niedriger Wert schnell, hoher wert langsam

//Variablen
int lichtmodus = 0;	// Variable für die verschiedenen festgelegten Farben


void setup()
{
  pinMode(rotPin, OUTPUT);  	// Setzt den LEDPin als Ausgang
  pinMode(gruenPin, OUTPUT);	// Setzt den LEDPin als Ausgang
  pinMode(blauPin, OUTPUT); 	// Setzt den LEDPin als Ausgang
  pinMode(tasterPin, INPUT);	// Setzt den TasterPin als Eingang
} 


void loop()
{ 
//+++++++++++++++ LEUCHTPROGRAMME +++++++++++++++++

  // Modus 0 = Licht aus 
  if (lichtmodus == 0)
  {
	analogWrite(blauPin, 0); 	// Schaltet die Blaue LED ab
	analogWrite(rotPin, 0);  	// Schaltet die Rote LED ab
	analogWrite(gruenPin, 0);	// Schaltet die Grüne LED ab
	Tastendruck();
  }

  // Modus 1 = Blau 
  if (lichtmodus == 1)
  {
	for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5)
	{ 
  	analogWrite(blauPin, fadeValue);	// Gibt das fadeValue am LedPin aus (PWM)
  	Tastendruck();	// Abfrage des Tasterstatus
  	
  	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	if(lichtmodus != 1)
  	{
    	break;	// "for" Schleife verlassen
  	} 
  	delay(fadeGeschw);	// warte 30ms für einen Schritt weiter
	} 

	for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5)
	{ 
  	analogWrite(blauPin, fadeValue);	// Gibt das fadeValue am LedPin aus (PWM)
  	Tastendruck();	// Abfrage des Tasterstatus
 	
 	// Falls Taster gedrückt ist, die "for" Schleife verlassen
 	if(lichtmodus != 1)
 	{
   	break;	// "for" Schleife verlassen
 	}
 	delay(fadeGeschw);	// warte 30ms für einen Schritt weiter 
	} 
  }

  // Modus 2 = Rot 
  if (lichtmodus == 2)
  {
	analogWrite(blauPin, 0); 	// Schaltet die Blaue LED ab
	analogWrite(gruenPin, 0);	// Schaltet die Grüne LED ab

	for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5)
	{ 
  	analogWrite(rotPin, fadeValue);	// Gibt das fadeValue am LedPin aus (PWM)
  	Tastendruck();	// Abfrage des Tasterstatus
  	
  	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	if(lichtmodus != 2)
  	{
    	break;	// "for" Schleife verlassen
  	}
  	delay(fadeGeschw);	// warte 30ms für einen Schritt weiter 
	} 

	for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5)
	{ 
  	analogWrite(rotPin, fadeValue);	// Gibt das fadeValue am LedPin aus (PWM)
  	Tastendruck();	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	
  	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	if(lichtmodus != 2)
  	{
    	break;	// "for" Schleife verlassen
  	} 
  	delay(fadeGeschw);	// warte 30ms für einen Schritt weiter
	} 
  }

  // Modus 3 = Grün 
  if (lichtmodus == 3)
  {
	analogWrite(blauPin, 0);	// Schaltet die Blaue LED ab
	analogWrite(rotPin, 0); 	// Schaltet die Rote LED ab

	for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5)
	{ 
  	analogWrite(gruenPin, fadeValue);	// Gibt das fadeValue am LedPin aus (PWM)
  	Tastendruck();	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	
  	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	if(lichtmodus != 3)
  	{
    	break;	// "for" Schleife verlassen
  	}
  	delay(fadeGeschw);	// warte 30ms für einen Schritt weiter 
	} 

	for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5)
	{ 
  	analogWrite(gruenPin, fadeValue);	// Gibt das fadeValue am LedPin aus (PWM)
  	Tastendruck();	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	
  	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	if(lichtmodus != 3)
  	{
    	break;	// "for" Schleife verlassen
  	} 
  	delay(fadeGeschw);	// warte 30ms für einen Schritt weiter 
	} 
  }

  // Modus 4 = Gelb 
  if (lichtmodus == 4)
  {
	analogWrite(blauPin, 0); 	// Schaltet die Blaue LED ab
	analogWrite(rotPin, 0);  	// Schaltet die Rote LED ab
	analogWrite(gruenPin, 0);	// Schaltet die Grüne LED ab

	for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5)
	{ 
  	
  	analogWrite(rotPin, fadeValue);  	// Gibt das fadeValue am LedPin aus (PWM)
  	analogWrite(gruenPin, fadeValue);	// Gibt das fadeValue am LedPin aus (PWM)
  	Tastendruck();	// Abfrage des Tasterstatus
  	
  	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	if(lichtmodus != 4)
  	{
    	break;	// "for" Schleife verlassen
  	}
  	
  	delay(fadeGeschw);	// warte 30ms für einen Schritt weiter 
	} 

	for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5)
	{ 
  	
  	analogWrite(rotPin, fadeValue);  	// Gibt das fadeValue am LedPin aus (PWM)
  	analogWrite(gruenPin, fadeValue);	// Gibt das fadeValue am LedPin aus (PWM)
  	Tastendruck();	// Abfrage des Tasterstatus
  	
  	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	if(lichtmodus != 4)
  	{
    	break;	// "for" Schleife verlassen
  	}
  	delay(fadeGeschw);	// warte 30ms für einen Schritt weiter 
	} 
  }

  // Modus 5 = Lila 
  if (lichtmodus == 5) {

	analogWrite(blauPin, 0); 	// Schaltet die Blaue LED ab
	analogWrite(rotPin, 0);  	// Schaltet die Rote LED ab
	analogWrite(gruenPin, 0);	// Schaltet die Grüne LED ab

	for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5)
	{ 
  	analogWrite(rotPin, fadeValue);	// Gibt das fadeValue am LedPin aus (PWM)
  	analogWrite(blauPin, fadeValue);	// Gibt das fadeValue am LedPin aus (PWM)
  	Tastendruck();	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	
  	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	if(lichtmodus != 5)
  	{
    	break;	// "for" Schleife verlassen
  	}
  	delay(fadeGeschw);	// warte 30ms für einen Schritt weiter 
	} 

	for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5)
	{ 
  	analogWrite(rotPin, fadeValue); 	// Gibt das fadeValue am LedPin aus (PWM)
  	analogWrite(blauPin, fadeValue);	// Gibt das fadeValue am LedPin aus (PWM)
  	Tastendruck();	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	
  	// Falls Taster gedrückt ist, die "for" Schleife verlassen
  	if(lichtmodus != 5)
  	{
    	break;	// "for" Schleife verlassen
  	}
  	delay(fadeGeschw);	// warte 30ms für einen Schritt weiter 
	} 
  }
}


void Tastendruck()
{
  // Abfrage ob der Taster gedrückt ist
  int tasterStatus = digitalRead(tasterPin);

  //Wenn Taster gedrückt ist, Leuchtmodus +1
  if (tasterStatus == HIGH)
  {
	lichtmodus = lichtmodus++; 
	delay(200);
  }
  
  // Anzahl der Lichtmodi auf 6 begrenzen. (0 bis 5)
  if (lichtmodus == 6)
  {
 	lichtmodus = 0;
  }
}




In diesem Teil wird auch wieder mit dem schon bekannten for Schleife gearbeitet um die LEDs zum pulsieren zu bringen. Das bringt aber auch ein Problem beim erkennen des Tastendrucks mit sich. Aber eins nach dem Anderen ^^

Die Farben werden mit der Variable lichtmodus unterschieden. Das Programm startet im lichtmodus 0. Hier sind die LEDs durch den analogWrite(LED, 0) Befehl ausgeschalten. Durch den Befehl Tastendruck() wird der Code ganz unten im Sketch unter "void Tastendruck()" ausgeführt. Hier wird ausgelesen ob der Taster gedrückt ist. Wenn ja wird der lichtmodus um +1 hochgezählt. Falls der lichtmodus durch mehrmaliges drücken des Tasters bei 6 ankommt, springt er automatisch wieder auf 0, was LEDs aus bedeutet.
Eine Befehlskette wie "void Tastendruck()" wird dann erstellt, wenn man z.B. diesen Code öfters im Sketch benötigt. So spart man sich arbeit und der Sketch bleibt übersichtlicher, da wenn benötigt im Sketch nur Tastendruck() eingegeben wird und so die Befehlskette ausgeführt wird.
So, weiter im Sketch.
Wenn im lichtmodus == 0 der Taster gedrückt wird, springt der lichtmodus auf 1 und das Programm für blaues pulsieren beginnt. Jetzt startet die erste for Schleife.
Hier wird die Variable fadeValue erstellt und deren Wert auf 0 gesetzt. Jetzt wird abgefragt ob fadeValue kleiner als 255 ist und wenn ja, dann wird die Variable fadeValue um +5 hochgezählt.
Die for Schleife wird so lange ausgeführt, bis fadeValue 255 ist. Dann ist sie beendet und der normale Sketch wird fortgeführt.
In der for Schleife wird der Wert von fadeValue als PWM Signal mittels des Befehls analogWrite ausgegeben und so die Helligkeit der LED verändert. Jetzt wird per Tastendruck() abgefragt ob der Taster gedrückt ist und im Fall leuchtmodus +1 hochgesetzt.
Es ist wichtig den Taster während derfor Schleife abzufragen, da ein Tastendruck sonst erst erkannt wird, wenn die for Schleife zuende ist und wieder der normale Sketch abläuft.
Wenn jetzt erkannt wird, dass lichtmodus nicht mehr 1 ist, wird die for Schleife mit dem Befehl break; abgebrochen und der Sketch fortgeführt, so das wir uns jetzt im nächsten lichtmodus befinden und das selbe mit der roten LED passiert. Ansonsten geht die for Schleife weiter, bis sie zuende ist und wechselt dann zur nächsten for Schleife um die LED wieder zu dimmen. So wird der Effekt des pulsierens erreicht.



VIDEO

Das war es auch schon








.

This post has been edited 17 times, last edit by "Scynd" (Feb 8th 2016, 3:24pm)


Scynd

1. Platz Enermax Casecon Contest

  • "Scynd" started this thread

Posts: 915

Date of registration: Mar 12th 2012

Location: München

Occupation: Maschinenbautechniker

Thanks: 74

  • Send private message

2

Friday, April 22nd 2016, 9:19am

Im Rahmen der Umstrukturierung habe ich dieses Tutorial aus dem
Vorbereitungsbereich geholt. Das Video dazu fehlt allerdings noch, wird
aber nachgeliefert :thumbup: