Pages: [1]   Go Down
Author Topic: Light up RGB Led with 74hc595  (Read 881 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey, i got a shift register (74hc595) and i'd like to light up my rgb led. Everything is connected but i have problems with the code.
Say my rgb led is connected to Q0,Q1 and Q2 of my shift register (Pin 15,1,2). How can i light up the rgb led (i want to switch between the color blue, green and red). I got this example which is working, but i don't know how to go on and how to achieve the thing mentioned above.

Code:
//**************************************************************//
//  Name    : shiftOutCode, Hello World                               
//  Author  : Carlyn Maw,Tom Igoe, David A. Mellis
//  Date    : 25 Oct, 2006   
//  Modified: 23 Mar 2010                                 
//  Version : 2.0                                             
//  Notes   : Code for using a 74HC595 Shift Register           //
//          : to count from 0 to 255                           
//****************************************************************

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;



void setup() {
  //set pins to output so you can control the shift register
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  // count from 0 to 255 and display the number
  // on the LEDs

    // take the latchPin low so
    // the LEDs don't change while you're sending in bits:
    digitalWrite(latchPin, LOW);
    // shift out the bits:
    shiftOut(dataPin, clockPin, MSBFIRST, 255);

    //take the latch pin high so the LEDs will light up:
    digitalWrite(latchPin, HIGH);
    // pause before next value:
    delay(500);
 
}

This lights up my rgb led which is has the color white-blue with this code.
Please help me out and give me hints how to change the code so i can control whether my rgb led lights up green, red or blue.

Thanks ! smiley-roll-sweat
Logged

Manchester (England England)
Offline Offline
Brattain Member
*****
Karma: 603
Posts: 33402
Solder is electric glue
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
shiftOut(dataPin, clockPin, MSBFIRST, 255);
See that 255, that is saying make all the outputs a one. That is light up all the LEDs. If you only want to light up one then use a number that has only one bit with a one in it.
Numbers like 1, 2, 4, 8, 16, 32, 64, or 128
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
shiftOut(dataPin, clockPin, MSBFIRST, 255);
See that 255, that is saying make all the outputs a one. That is light up all the LEDs. If you only want to light up one then use a number that has only one bit with a one in it.
Numbers like 1, 2, 4, 8, 16, 32, 64, or 128
How do you mean that ?
How can i get the right number to my led or how can i assign a number to one of my led's ?
Logged

Manchester (England England)
Offline Offline
Brattain Member
*****
Karma: 603
Posts: 33402
Solder is electric glue
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 
Quote
How do you mean that ?
Just like I said, replace that 255 with the number you want. Replace it with a variable output it, delay a time, increment the variable and output it again. Do this in a loop.

Every bit in that number corresponds to one bit on your shift register. You output the number / bit pattern corresponding to what light you want lit.
Logged

Offline Offline
Edison Member
*
Karma: 116
Posts: 2205
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Fairly easy:

Code:
#define Q0  (1<<0)
#define Q1  (1<<1)
...
#define Q7  (1<<7)

#define LED_R Q0 //red led connects to Q0
#define LED_G Q1 //green led to Q1
#define LED_B Q2 //blue to Q2

...
  shiftOut(dataPin, clockPin, MSBFIRST, LED_R); //turns on red led
  delay(); //waste some time
  shiftOut(dataPin, clockPin, MSBFIRST, LED_R | LED_G); //turn on red + green leds
  delay(); //waste some time
...
Logged

Pages: [1]   Go Up
Jump to: