Pages: [1]   Go Down
Author Topic: RGB-LED: Anfängerfragen  (Read 1407 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi liebe com,

ich habe mir heute eine RGB-LED geholt und diese gleich an meinen Arduino Nano angeschlossen.
Aufgrund der 6-beinigen LED tat ich mir am Anfang schwer herauszufinden, wie diese anzuschließen ist, aber nach einiger Zeit des Probierens klappte es (denke ich zumindest).

Deswegen wollte ich mir als Übung ein Programm schreiben, welches je eine Farbe "pulsieren" lässt, d.h. langsam an und langsam ausgehen lässt.

Sowohl beim Eingang pinB2 (blau), als auch beim eingang pingG (grün) funktioniert dies ohne Probleme, bei pinR (rot) jedoch geht die LED entweder an oder aus, ohne Dimmstufen dazwischen. Warum?

Desweiteren frage ich mich ob ich etwas falsch gemacht habe, da ich 2 blaue Ports habe?

Würde mich freuen wenn ihr etwas Licht ins Dunkel bringen könntet, fals ich etwas vergessen habe zu erwähnen einfach schreiben. Dankeschön smiley

Code:
int pinR  = 2;
int pinG  = 3;
int pinB1 = 4;
int pinB2 = 5;

void setup()
{
  Serial.begin(9600);    
  pinMode(pinR, OUTPUT);   
  pinMode(pinG, OUTPUT);
  pinMode(pinB1, OUTPUT);
  pinMode(pinB2, OUTPUT);
}

void loop()
{
  for(int i=0; i<=255; i++)
  {
  analogWrite(pinR,  0);
  analogWrite(pinG,  i);
  analogWrite(pinB1, 0);
  analogWrite(pinB2, i);
  delay(10);
  }
  for(int i=255; i>=0; i--)
  {
  analogWrite(pinR,  0);
  analogWrite(pinG,  i);
  analogWrite(pinB1, 0);
  analogWrite(pinB2, i);
  delay(10);
  }
}
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 106
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
  analogWrite(pinR,  0);
  analogWrite(pinG,  i);
  analogWrite(pinB1, 0);
  analogWrite(pinB2, i);


pinR und pinB1 wird doch bei dir immer nur auf 0 gesetzt, sollte dort nicht auch i stehen?
Logged


Offline Offline
Full Member
***
Karma: 2
Posts: 106
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dann fehlt bei dir immer noch die Loop für die rote LED

Code:
for(int i=255; i>=0; i--)
  {
  analogWrite(pinR,  i);
  analogWrite(pinG,  0);
  analogWrite(pinB1, 0);
  analogWrite(pinB2, 0);
  delay(10);
  }
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bei dem Programmtext, welchen ich gepostet habe, wird nun immer die blaue und die grüne zusammen heller und wieder dunkler.
Wenn ich nun anstelle der 2 for-schleifen dies schreibe, müsste normalerweise die Rote LED langsam an und wieder ausgehen, dies tut sie aber nicht! warum?

Code:
for(int i=255; i>=0; i++)
  {
  analogWrite(pinR,  i);
  analogWrite(pinG,  0);
  analogWrite(pinB1, 0);
  analogWrite(pinB2, 0);
  delay(10);
  }

for(int i=255; i>=0; i--)
  {
  analogWrite(pinR,  i);
  analogWrite(pinG,  0);
  analogWrite(pinB1, 0);
  analogWrite(pinB2, 0);
  delay(10);
  }

EDIT: Ich habe nun anstatt dem digitalen Port 2, an welchem der anschluss für die rote LED angeschlossen war den digitalen Port 5 genommen, und nun funktioniert es. Dennoch frage ich mich warum?

Und meine zweite Frage lautet, ob es normal ist, dass ich zwei blaue Anschlüsse habe?
« Last Edit: March 28, 2011, 03:39:47 pm by romar » Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 272
Posts: 21940
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich hoffe Du hast Vorwiderstände für die LED verwendet.
Nicht alle digitalen pins sind PWM-Ausgänge die Du mit analogWrite ansteuern kannst.
Nur 3,5,6,9,10 und 11 sind PWM Ausgänge.
Analoge PWM Ausgänge mußt Du nicht über pinMode(pin, OUTPUT); als Ausgänge definieren. pinMode kannst Du weglassen.

Die LED hat 2 Blaue da diese weniger stark leuchten als die rote und grüne LED. So wird das ausgeglichen.

Grüße Uwe
     
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke uwe du bist perfekt.

Habe für die LED Vorwiderstände verwendet.
Und dass nur die Ausgänge 3,5,6,9,10 und 11 PVM-Ausgänge sind wusste ich nicht, erklärt aber meine Frage.

Damit habe ich nun die LED richtig angeschlossen und programmiert smiley

Gibt es bereits ein fertiges beispiel für einen Art Regenbogen, d.h. dass die Farben des Regenbogens mit schönen Übergängen leuchten?
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 272
Posts: 21940
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke.
Von einem Regenbogenprogramm weiß ich nichts.

Google mal.
Grüße Uwe
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Für ein Projekt von mir hab ich eine kleine Demo geschrieben, die Funktion setAllLeds(r,g,b) musst du halt durch eine eigene Funktion ersetzten. d beschreibt den delay zwischen den Farbwechsel.

Code:
void rainbow(){
  int d = 3;
  for(int i = 0; i < 256;i++){
    setAllLeds(i,0,255-i);
    delay(d);
  }
  for(int i = 0; i < 256;i++){
    setAllLeds(255-i,i,0);
    delay(d);
  }
  for(int i = 0; i < 256;i++){
    setAllLeds(0,255-i,i);
    delay(d);
  }   
}

Hoffe das reicht für ein hübschen Farbwechsel smiley-wink
lg DrSeus
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dankeschön smiley)

Hab jetzt nen schönen Farbwechsel. Jetzt hab ich genug mit der LED herumexperimentiert.
Mein Programm sieht jetzt folgendermaßen aus, natürlich hätt ich es noch ein bisschen kompakter und vielleicht auch einfach schreiben können aber
finde es für den Anfang eig ganz schön smiley:

Insgesamt hab ich jetzt als Hardware:
- 1 RGB - LED
- 1 Taster
- viele Kabel
- 4 Widerstände
- 1 Servo (180°)

Was meint ihr wäre noch a gutes Programm als Übung? Ihr kennt euch da ja voll aus, aber bin hall noch a ziemlicher neuling.
Wenn noch ein wenig Hardware für ein Programm fehlt, könnte ich mir morgen eventuell noch ein wenig leihen.

Freue mich auf einige Vorschläge smiley

Code:
int pinR  = 3;
int pinG  = 5;
int pinB1 = 6;
int pinB2 = 9;

void setup()
{
  Serial.begin(9600);
  pinMode(pinR,  OUTPUT);    
  pinMode(pinG,  OUTPUT);
  pinMode(pinB1, OUTPUT);
  pinMode(pinB2, OUTPUT);
  digitalWrite(pinR,  LOW);
  digitalWrite(pinG,  LOW);
  digitalWrite(pinB1, LOW);
  digitalWrite(pinB2, LOW);
  Serial.println("0: aus");
  Serial.println("1: gruen");
  Serial.println("2: rot");
  Serial.println("3: blau");
  Serial.println("4: disco");
  Serial.println("5: rot langsam an");
  Serial.println("6: gruen langsam an");
  Serial.println("7: blau langsam an");
  Serial.println("8: Alle an");
  Serial.println("9: rainbow");
}

void loop()
{
  if(Serial.available() > 0)
  {
    int inInt = Serial.read();
    {
      if(inInt == '0')
      {
        allesAus();
      }
      if(inInt == '1')
      {
        gruen();
      }
      if(inInt == '2')
      {
        rot();
      }
      if(inInt == '3')
      {
        blau();
      }
      if(inInt == '4')
      {
        Disco();
      }
      if(inInt == '5')
      {
        rotLangsamAn();
      }
      if(inInt == '6')
      {
        gruenLangsamAn();
      }
      if(inInt == '7')
      {
        blauLangsamAn();
      }
      if(inInt == '8')
      {
        alleAn();
      }
      if(inInt == '9')
      {
        rainbow();
      }
      
    }
  }
      
}

void Disco()
{
  for(int i = 0; i < 5; i++)
  {
     digitalWrite(pinR,  LOW);
     digitalWrite(pinG,  HIGH);
     digitalWrite(pinB1, LOW);
     digitalWrite(pinB2, LOW);
     delay(100);

     digitalWrite(pinR,  HIGH);
     digitalWrite(pinG,  LOW);
     digitalWrite(pinB1, LOW);
     digitalWrite(pinB2, LOW);
     delay(100);
    
     digitalWrite(pinR,  LOW);
     digitalWrite(pinG,  LOW);
     digitalWrite(pinB1, HIGH);
     digitalWrite(pinB2, HIGH);
     delay(100);
  }
  allesAus();
}

void allesAus()
{
  digitalWrite(pinR,  LOW);
  digitalWrite(pinG,  LOW);
  digitalWrite(pinB1, LOW);
  digitalWrite(pinB2, LOW);
}
void rot()
{
  digitalWrite(pinR, HIGH);
  digitalWrite(pinG, LOW);
  digitalWrite(pinB1, LOW);
  digitalWrite(pinB2, LOW);
}
void gruen()
{
  digitalWrite(pinR, LOW);
  digitalWrite(pinG, HIGH);
  digitalWrite(pinB1, LOW);
  digitalWrite(pinB2, LOW);
}
void blau()
{
  digitalWrite(pinR, LOW);
  digitalWrite(pinG, LOW);
  digitalWrite(pinB1, HIGH);
  digitalWrite(pinB2, HIGH);
}
void alleAn()
{
  digitalWrite(pinR, HIGH);
  digitalWrite(pinG, HIGH);
  digitalWrite(pinB1, HIGH);
  digitalWrite(pinB2, HIGH);
}
  
void rotLangsamAn()
{
  for(int i=0; i<=255; i++)
  {
    analogWrite(pinR,  i);
    analogWrite(pinG,  0);
    analogWrite(pinB1, 0);
    analogWrite(pinB2, 0);
    delay(10);
  }  
}
void gruenLangsamAn()
{
  for(int i=0; i<=255; i++)
  {
    analogWrite(pinR,  0);
    analogWrite(pinG,  i);
    analogWrite(pinB1, 0);
    analogWrite(pinB2, 0);
    delay(10);
  }  
}
void blauLangsamAn()
{
  for(int i=0; i<=255; i++)
  {
    analogWrite(pinR,  0);
    analogWrite(pinG,  0);
    analogWrite(pinB1, i);
    analogWrite(pinB2, i);
    delay(10);
  }  
}
void rainbow(){
  int d = 7;
  for(int i = 0; i < 256;i++){
    setAllLeds(i,0,255-i,255-i);
    delay(d);
  }
  for(int i = 0; i < 256;i++){
    setAllLeds(255-i,i,0,0);
    delay(d);
  }
  for(int i = 0; i < 256;i++){
    setAllLeds(0,255-i,i,i);
    delay(d);
  }  
}

void setAllLeds(int neuR, int neuG, int neuB1, int neuB2)
{
  analogWrite(pinR, neuR);
  analogWrite(pinG, neuG);
  analogWrite(pinB1, neuB1);
  analogWrite(pinB2, neuB2);
}
  
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 272
Posts: 21940
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nein, so geht das nicht  smiley-wink smiley-wink smiley-wink smiley-wink
Neues Problem, neue Diskussion.  smiley-cool smiley-cool
Grüße Uwe
Logged

Pages: [1]   Go Up
Jump to: