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

Saturday, September 5th 2015, 10:21pm

Arduino Tutorial 2.1 - RGB LED: Farben per Taster wechseln








In diesem ersten Anwendungsfall geht es darum, einfach per PWM definierte Farben der RGB LEDs per Tastendruck zu wechseln.
Das Ganze wird über eine Variable umgesetzt, die bei Tastendruck um +1 hochgezählt wird. Über diese Variable werden dann verschiedene LED Farbeinstellungen abgerufen. Dabei wird der entsprechende PWM Wert jedes Farbkanals, mittels des analogWrite Befehls ausgegeben.

Programm 0 = LEDs aus
Programm 1 = LEDs leuchten Blau
Programm 2 = LEDs leuchten Rot
Programm 3 = LEDs leuchten Grün
Programm 4 = LEDs leuchten Lila
Programm 5 = LEDs leuchten Weiß


Will man wie hier gezeigt, viele LEDs mit dem Arduino ansteuern, muss man dazu Tansistoren verwenden, da der Arduino dazu zu wenig Strom und Spannung liefert. Der Transistor funktioniert hier wie ein Schalter, der die 12V Spannungsversorgung der einzelnen LED Farben sehr schnell an- und ausschält.



Ich habe mich bewusst für MOSFET Transistoren entschieden, da sie gängige Bauteile sind, ohne Vorwiderstand angeschlossen werden können, robust und leistungsstark sind. Allerdings sind sie auch etwas teurer, aber ich finde die Vorteile überwiegen für ein "Bastelprojekt". Falls ihr andere Transistoren verwenden wollt, informiert euch vorher gründlich, da die Pinbelegung und Pinbezeichnung anders sein können und evtl. ein Vorwiderstand in die Steuerleitung kommend vom Arduino muss.




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
/*
Arduino Tutorial 2.1 - RGB LED Farben per Taster wechseln
 
In diesem Tutorial geht es darum einer RGB-LED Farben zuzuweisen und diese eingestellten Farbprogramme mit einem Taster durchzuschalten.
 
by Scynd 2015
http://www.scynd.de/tutorials/arduino-tutorials.html
*/

// Konstanten 
const int tasterPin = 2; 	// Taster an Pin 2 angeschlossen
const int rotPin = 10;   	// Rote LED an Pin 10 angeschlossen
const int gruenPin = 9;  	// Gruene LED an Pin 9 angeschlossen
const int blauPin = 11;  	// Blaue LED an Pin 11 angeschlossen

// Variablen
int lichtmodus = 0;      	// Variable für die verschiedenen festgelegten Farben
int tasterStatus = LOW;  	// Variable zu speichern des Tasterstatus


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


void loop()
{ 
  // Abfrage ob der Taster gedrückt ist
  tasterStatus = digitalRead(tasterPin);
  
  // Wenn Taster gedrückt ist...
  if (tasterStatus == HIGH)
  {
	lichtmodus++; 	// Lichtmodus +1
	delay(300);   	// 300ms warten
  }
  
  //+++++++++++++++ LEUCHTPROGRAMME +++++++++++++++++
  
  // Modus 0 = Licht aus  
  if (lichtmodus == 0)
  {
	analogWrite(blauPin, 0);
	analogWrite(rotPin, 0);
	analogWrite(gruenPin, 0);	
  }
  
  // Modus 1 = Blau  
  else if (lichtmodus == 1)
  {
	analogWrite(blauPin, 255);
	analogWrite(rotPin, 0);
	analogWrite(gruenPin, 0);	
  }
  
  // Modus 2 = Rot  
  else if (lichtmodus == 2)
  {
	analogWrite(blauPin, 0);
	analogWrite(rotPin, 255);
	analogWrite(gruenPin, 0);
  }
  
  // Modus 3 = Grün  
  else if (lichtmodus == 3)
  {
	analogWrite(blauPin, 0);
	analogWrite(rotPin, 0);
	analogWrite(gruenPin, 255);	
  }
  
  // Modus 4 = Lila  
  else if (lichtmodus == 4)
  {
	analogWrite(blauPin, 255);
	analogWrite(rotPin, 255);
	analogWrite(gruenPin, 0);	
  }

  // Modus 5 = Weiß  
  else if (lichtmodus == 5)
  {
	analogWrite(blauPin, 255);
	analogWrite(rotPin, 255);
	analogWrite(gruenPin, 255);	
  }

  // Anzahl der Leutmodi auf 6 begrenzen. (0 bis 5)
  else
  {
	lichtmodus = 0;
  }
}



Nach dem setzen der Konstanten und Variablen, werden im setup die Ein- und Ausgänge deklariert.
Im loop angekommen, wird nun kontinuierlich der tasterPin überwacht und dessen Status (HIGH wenn gedrückt, oder LOW wenn nicht gedrückt) in der Variable tasterStatus gespeichert.
Wenn nach dem Drücken des Tasters, tasterStatus auf HIGH steht, wird die Variable lichtmodus um +1 (Lichtmodus++) hochgezählt und delay von 300ms pausiert, um ein prellen des Tasters zu verhindern.
Nun wird die Variable lichtmodus abgefragt und je nach dem welche Nummer gespeichert ist, wird das entsprechende Programm gestartet.
Hier wird nun per PWM jedem LED Kanal ein Wert von 0-255 zugeordnet, wobei 0 aus und 255 volle Leuchtkraft ist. So können auch Farben gemischt werden.
Zu guter letzt wird der lichtmodus auf 0 zurück gesezt, wenn er nicht zwischen 0 und 5 liegt. So können die Farbprogramme wieder von neuem durchgeschalten werden.


Das war es auch schon













This post has been edited 8 times, last edit by "Scynd" (Feb 12th 2016, 7:32am)