Pages: [1]   Go Down
Author Topic: Change LED display with push button  (Read 1293 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello

I have 16 LED's and 2 595 shift registers connected I can send a display value to the LED's, 1010101010101010 etc. I have just connected a pushbutton switch which turns on LED 13 if the number of button pushes is dividable by 4. I want to specify two display values which are selectable by the number of button pushes. ie if its dividable by for display 1010101010101010 else display 1111000011110000.
Code:
[shadow=red,left]const int  buttonPin = 2;    // the pin that the pushbutton is attached to
const int ledPin = 13;       // the pin that the LED is attached to

// Pushbutton int's Variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button


//LED 595 shift int's

//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() {
 
  //Pushbutton Setup
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT);
  // initialize the LED as an output:
  pinMode(ledPin, OUTPUT);
  // initialize serial communication:
  Serial.begin(9600);
 
  //LED 595 shift setup
 
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  //display(43690);
  display(48982);
 
}


void loop() {
  // read the pushbutton input pin:
  buttonState = digitalRead(buttonPin);

  // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:
      buttonPushCounter++;
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter, DEC);
    }
    else {
      // if the current state is LOW then the button
      // wend from on to off:
      Serial.println("off");
    }
  }
  // save the current state as the last state,
  //for next time through the loop
  lastButtonState = buttonState;

 
  // turns on the LED every four button pushes by
  // checking the modulo of the button push counter.
  // the modulo function gives you the remainder of
  // the division of two numbers:
  if (buttonPushCounter % 4 == 0) {
    digitalWrite(ledPin, HIGH);
   
    // Put some code here to display(43690);
   
  } else {
   digitalWrite(ledPin, LOW);
   
   // Put some code here to display(48982);

  }
 
}

void display(unsigned int numberToDisplay){
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay % 256);  //lower byte
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay / 256); // higher byte
    digitalWrite(latchPin, HIGH);
}
[/shadow]

Regards

Geoff
Logged

Global Moderator
Boston area, metrowest
Online Online
Brattain Member
*****
Karma: 439
Posts: 23751
Author of "Arduino for Teens". Available for Design & Build services. Now with Unlimited Eagle board sizes!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

What  is your question?
You seem to have a function to shift out the needed data.
Call it with data of 0xAAAA & 0xF0F0.

Altho I would call it like this per the reference page for shiftout()

// shift out highbyte
shiftOut(dataPin, clock, MSBFIRST, (data >> smiley-cool); 
// shift out lowbyte
shiftOut(data, clock, MSBFIRST, data);

Not sure wht %256 & /256 is doing for you.
Logged

Designing & building electrical circuits for over 25 years. Check out the ATMega1284P based Bobuino and other '328P & '1284P creations & offerings at  www.crossroadsfencing.com/BobuinoRev17.
Arduino for Teens available at Amazon.com.

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

Thanks crossroads, yes your right about the 256, this code came from another sketch I was using and somehow never affected my new sketch. Copy & Paste is too easy  smiley-red, I'll clean it up. Basically when I press a switch I want the LED pattern to change from one to the other. ie

Code:
if (buttonPushCounter % 4 == 0) {
    digitalWrite(ledPin, HIGH);
   
    // Put some code here to display(43690);
   
  } else {
   digitalWrite(ledPin, LOW);
   
   // Put some code here to display(48982);

  }
Regards Geoff
Logged

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

Still not sure what your question is?
Do you want code for
// Put some code here to display(43690);
in which case it is
display(43690);

Given you have a display function in the earlier code.
Logged

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

Thanks Mike, I was 90% there.

Sorted it now and cleaned the code up (thanks crossroads) so here is the code, I have specified three different patterns using 16 Led's. This code cycles through them using a push button.
Code:

//Using a pushbutton to cycle through various LED patterns
//16 LED's are used with two shift registers, used Arduino SHIFTOUT as a start


const int  buttonPin = 2;    // the pin that the pushbutton is attached to
const int ledPin = 13;       // the pin that the LED is attached to

// Pushbutton int's Variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button


//LED 595 shift int's

//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() {
 
  //Pushbutton Setup
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT);
  // initialize the LED as an output:
  pinMode(ledPin, OUTPUT);
  // initialize serial communication:
  Serial.begin(9600);
 
  //LED 595 shift setup
 
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  //display(43690);
  display(48982);
 
}


void loop() {
  // read the pushbutton input pin:
  buttonState = digitalRead(buttonPin);

  // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:
      buttonPushCounter++;
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter, DEC);
    }
    else {
      // if the current state is LOW then the button
      // wend from on to off:
      Serial.println("off");
    }
  }
  // save the current state as the last state,
  //for next time through the loop
  lastButtonState = buttonState;

  //Pressing the button once lights pattern 1, twice pattern 2 etc etc
 
switch (buttonPushCounter) {
    case 1:
       display(43690);
     
      break;
     
    case 2:
     
   display(48982);
     
      break;
     case 3:
     
           display(58163);
 
    default:
   
     
buttonPushCounter = 0;   // Resets counter to 0 so we can cycle through 1, 2, 3 again

     
       digitalWrite(ledPin, LOW);
   display(58163);
     
  }
 
}

void display(unsigned int numberToDisplay){
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);  //lower byte
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay); // higher byte
    digitalWrite(latchPin, HIGH);
}

regards

Geoff
Logged

Global Moderator
Boston area, metrowest
Online Online
Brattain Member
*****
Karma: 439
Posts: 23751
Author of "Arduino for Teens". Available for Design & Build services. Now with Unlimited Eagle board sizes!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

You're missing something here:
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);  //lower byte
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay); // higher byte

The shifout example shows:
// shift out highbyte
shiftOut(dataPin, clock, MSBFIRST, (data >> 8 );   the 8 ) got turned into smiley-cool above
// shift out lowbyte
shiftOut(data, clock, MSBFIRST, data);

You probably don't notice if your two bytes are the same: 0xA0A0 & 0xF0F0

I find using the decimal equivalent not terribly useful.

Logged

Designing & building electrical circuits for over 25 years. Check out the ATMega1284P based Bobuino and other '328P & '1284P creations & offerings at  www.crossroadsfencing.com/BobuinoRev17.
Arduino for Teens available at Amazon.com.

Pages: [1]   Go Up
Jump to: