Pages: [1]   Go Down
Author Topic: [Student] Having problems with figuring out getting button to work with build  (Read 792 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So I'm new (to the forums, and the study of robotics), and am working on writing a code that adds count to a variable that will in turn change the display of a 7-segment display based on 4 buttons each representing a bit in a 4-bit setup

so here's what I have so far:

Code:
// Zane
// 7-Segment binary button

// set up
void setup()
{
  // 7-segment dispaly
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
 
  // buttons
  pinMode(10, INPUT);
  pinMode(11, INPUT);
  pinMode(12, INPUT);
  pinMode(13, INPUT);
 
  digitalWrite(9, 1);  // start with the "dot" off
}

void loop()
{
  // set each binary button to 0 for 0
  int binary_3 = 0;
  if (binary_3 > 1)
  {
    binary_3 =0
  }
  int binary_2 = 0;
  if (binary_2 > 1)
  {
    binary_2 =0
  }
  int binary_1 = 0;
  if (binary_1 > 1)
  {
    binary_1 =0
  }
  int binary_0 = 0;
  if (binary_0 > 1)
  {
    binary_0 =0
  }
  // =====================================
//  Button Press area.
//  Press binary button and adds 1
//  since conditions set before, if the button goes over 1, reset
// 
  // ======================================
  // Create light up sequence
  // Zero
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 0 && binary_0 == 0)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 0);
   digitalWrite(8, 1);
   delay(1000);
  }
 
  // One
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 0 && binary_0 == 1)
  {
   digitalWrite(2, 1);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 1);
   digitalWrite(6, 1);
   digitalWrite(7, 1);
   digitalWrite(8, 1);
   delay(1000);
  }
 
  // Two
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 1 && binary_0 == 0)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 1);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 1);
   digitalWrite(8, 0);
   delay(1000);
  }
 
  // Three
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 1 && binary_0 == 1)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 1);
   digitalWrite(7, 1);
   digitalWrite(8, 0);
   delay(1000);
  }
 
  // Four
  if (binary_3 == 0 && binary_2 == 1 && binary_1 == 0 && binary_0 == 0)
  {
   digitalWrite(2, 1);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 1);
   digitalWrite(6, 1);
   digitalWrite(7, 0);
   digitalWrite(8, 0);
   delay(1000);
  }
 
  // Five
  if (binary_3 == 0 && binary_2 == 1 && binary_1 == 0 && binary_0 == 1)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 1);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 1);
   digitalWrite(7, 0);
   digitalWrite(8, 0);
   delay(1000);
  }
 
  // Six
  if (binary_3 == 0 && binary_2 == 1 && binary_1 == 1 && binary_0 == 0)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 1);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 0);
   digitalWrite(8, 0);
   delay(1000);
  }
 
  // Seven
  if (binary_3 == 0 && binary_2 == 1 && binary_1 == 1 && binary_0 == 1)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 1);
   digitalWrite(6, 1);
   digitalWrite(7, 1);
   digitalWrite(8, 1);
   delay(1000);
   
   }
   
   // Eight
   if (binary_3 == 1 && binary_2 == 0 && binary_1 == 0 && binary_0 == 0)
   {
     digitalWrite(2, 0);
     digitalWrite(3, 0);
     digitalWrite(4, 0);
     digitalWrite(5, 0);
     digitalWrite(6, 0);
     digitalWrite(7, 0);
     digitalWrite(8, 0);
     delay(1000);
   }
   
   // Nine
   if (binary_3 == 1 && binary_2 == 0 && binary_1 == 0 && binary_0 == 0)
   {
     digitalWrite(2, 0);
     digitalWrite(3, 0);
     digitalWrite(4, 0);
     digitalWrite(5, 1);
     digitalWrite(6, 1);
     digitalWrite(7, 0);
     digitalWrite(8, 0);
     delay(1000);
   }
   
}



I do know that I'm going to need to have a delay after the button press for debouncing, but how am I making sure the button (which is set as active high) to read being pressed in the right time?
Logged

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

Hey Zane!  I will try to help you out a bit with the simple stuff.

Quote
digitalWrite(9, 1);  // start with the "dot" off

Should be -
Code:
digitalWrite(9, LOW);  // start with the "dot" off


Quote
binary_3 =0

Should be -
Code:
binary_3 = 0;


Quote
binary_2 =0

Should be -
Code:
binary_2 = 0;


Quote
binary_1 =0

Should be -
Code:
binary_1 = 0;


Quote
 // Create light up sequence
  // Zero
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 0 && binary_0 == 0)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 0);
   digitalWrite(8, 1);
   delay(1000);
  }
  
  // One
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 0 && binary_0 == 1)
  {
   digitalWrite(2, 1);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 1);
   digitalWrite(6, 1);
   digitalWrite(7, 1);
   digitalWrite(8, 1);
   delay(1000);
  }
  
  // Two
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 1 && binary_0 == 0)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 1);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 1);
   digitalWrite(8, 0);
   delay(1000);
  }
  
  // Three
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 1 && binary_0 == 1)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 1);
   digitalWrite(7, 1);
   digitalWrite(8, 0);
   delay(1000);
  }
  
  // Four
  if (binary_3 == 0 && binary_2 == 1 && binary_1 == 0 && binary_0 == 0)
  {
   digitalWrite(2, 1);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 1);
   digitalWrite(6, 1);
   digitalWrite(7, 0);
   digitalWrite(8, 0);
   delay(1000);
  }
  
  // Five
  if (binary_3 == 0 && binary_2 == 1 && binary_1 == 0 && binary_0 == 1)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 1);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 1);
   digitalWrite(7, 0);
   digitalWrite(8, 0);
   delay(1000);
  }
  
  // Six
  if (binary_3 == 0 && binary_2 == 1 && binary_1 == 1 && binary_0 == 0)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 1);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 0);
   digitalWrite(8, 0);
   delay(1000);
  }
  
  // Seven
  if (binary_3 == 0 && binary_2 == 1 && binary_1 == 1 && binary_0 == 1)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 1);
   digitalWrite(6, 1);
   digitalWrite(7, 1);
   digitalWrite(8, 1);
   delay(1000);
  
   }
  
   // Eight
   if (binary_3 == 1 && binary_2 == 0 && binary_1 == 0 && binary_0 == 0)
   {
     digitalWrite(2, 0);
     digitalWrite(3, 0);
     digitalWrite(4, 0);
     digitalWrite(5, 0);
     digitalWrite(6, 0);
     digitalWrite(7, 0);
     digitalWrite(8, 0);
     delay(1000);
   }
  
   // Nine
   if (binary_3 == 1 && binary_2 == 0 && binary_1 == 0 && binary_0 == 0)
   {
     digitalWrite(2, 0);
     digitalWrite(3, 0);
     digitalWrite(4, 0);
     digitalWrite(5, 1);
     digitalWrite(6, 1);
     digitalWrite(7, 0);
     digitalWrite(8, 0);
     delay(1000);
   }

It should be:
Code:
 // Create light up sequence
  // Zero
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 0 && binary_0 == 0)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 0);
   digitalWrite(8, 1);
   delay(1000);
  }
  
  // One
  else if (binary_3 == 0 && binary_2 == 0 && binary_1 == 0 && binary_0 == 1)
  {
   digitalWrite(2, 1);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 1);
   digitalWrite(6, 1);
   digitalWrite(7, 1);
   digitalWrite(8, 1);
   delay(1000);
  }
  
  // Two
  else if (binary_3 == 0 && binary_2 == 0 && binary_1 == 1 && binary_0 == 0)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 1);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 1);
   digitalWrite(8, 0);
   delay(1000);
  }
  
  // Three
  else if (binary_3 == 0 && binary_2 == 0 && binary_1 == 1 && binary_0 == 1)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 1);
   digitalWrite(7, 1);
   digitalWrite(8, 0);
   delay(1000);
  }
  
  // Four
  else if (binary_3 == 0 && binary_2 == 1 && binary_1 == 0 && binary_0 == 0)
  {
   digitalWrite(2, 1);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 1);
   digitalWrite(6, 1);
   digitalWrite(7, 0);
   digitalWrite(8, 0);
   delay(1000);
  }
  
  // Five
  else if (binary_3 == 0 && binary_2 == 1 && binary_1 == 0 && binary_0 == 1)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 1);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 1);
   digitalWrite(7, 0);
   digitalWrite(8, 0);
   delay(1000);
  }
  
  // Six
  else if (binary_3 == 0 && binary_2 == 1 && binary_1 == 1 && binary_0 == 0)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 1);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 0);
   digitalWrite(8, 0);
   delay(1000);
  }
  
  // Seven
  else if (binary_3 == 0 && binary_2 == 1 && binary_1 == 1 && binary_0 == 1)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 1);
   digitalWrite(6, 1);
   digitalWrite(7, 1);
   digitalWrite(8, 1);
   delay(1000);
  
   }
  
   // Eight
   else if (binary_3 == 1 && binary_2 == 0 && binary_1 == 0 && binary_0 == 0)
   {
     digitalWrite(2, 0);
     digitalWrite(3, 0);
     digitalWrite(4, 0);
     digitalWrite(5, 0);
     digitalWrite(6, 0);
     digitalWrite(7, 0);
     digitalWrite(8, 0);
     delay(1000);
   }
  
   // Nine
   else if (binary_3 == 1 && binary_2 == 0 && binary_1 == 0 && binary_0 == 0)
   {
     digitalWrite(2, 0);
     digitalWrite(3, 0);
     digitalWrite(4, 0);
     digitalWrite(5, 1);
     digitalWrite(6, 1);
     digitalWrite(7, 0);
     digitalWrite(8, 0);
     delay(1000);
   }

Now you can't have 1 or 0 if it is a digitalWrite. It needs to be HIGH or LOW so you need to change that!

Hope this helps!
« Last Edit: February 22, 2012, 08:17:57 pm by TECman » Logged

-TECman-

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

Thanks for the reply, I'm far from finished with this, but when I tested with digitalWrite(#, 1) and etc, they work the same as low and high.

I'm more curious to how am I to go about getting the buttons to work.

as to why it says 0 for on, I do not know, or maybe it's just the display I'm using, why but having it HIGH causes the lights to be off.

but I still need clearance on how I would go about having the button input added.
Logged

North Queensland, Australia
Offline Offline
Edison Member
*
Karma: 64
Posts: 2100
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

When the arduino due comes out for example, the digital pins have more modes than just on/off on the ARM processor. So the values of HIGH and LOW could change to something arbitrary, so when you explicitly put in 1 & 0 you prevent your code from being compatible with possible future releases of the Arduino core.

EDIT: Also you need digitalRead to read the button values.
« Last Edit: February 22, 2012, 09:41:47 pm by pYro_65 » Logged


Global Moderator
UK
Offline Offline
Brattain Member
*****
Karma: 285
Posts: 25626
I don't think you connected the grounds, Dave.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey TECman! I will try to help you out a bit with the simple stuff.
Quote
Should be -

Code:

digitalWrite(9, LOW); // start with the "dot" off

If you look carefully at the code, you'll recognize that the display is a common anode device, so it is quite correct to write a 1 to turn the segment off.
« Last Edit: February 24, 2012, 12:58:16 pm by AWOL » Logged

"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

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

Hello guys, I've done a bit of updating on the code, and everything works fine except for the buttons x.x

before you read the code, please read what the code is supposed to do.

there are four buttons,
the 7-segment display lights up when they are LOW.

I have each set of display sequences set to a pattern represented by the binary variables.

When I press one of the four buttons, the following binary number represented by said button (I.E. button 3 goes to binary_3 - which is in the order "3 2 1 0") should increase by "1" followed by a delay for debounce.

when the button is pressed again, it adds 1 (making 2) but due to prior coding in the loop, when the number is > 1 it resets to 0.

but for some reason, the buttons aren't working, and all that will display on the segment is "0".


Here's the new code:
Code:
// Zane
// 7-Segment binary button

// set up

// buttons

int binary_button_3 = 10;
int binary_button_2 = 11;
int binary_button_1 = 12;
int binary_button_0 = 13;

// binary data
int binary_3 = 0;
int binary_2 = 0;
int binary_1 = 0;
int binary_0 = 0;

 
void setup()
{
  // 7-segment dispaly
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
   
 
  pinMode(binary_button_3, INPUT);
  pinMode(binary_button_2, INPUT);
  pinMode(binary_button_1, INPUT);
  pinMode(binary_button_0, INPUT);
 
  digitalWrite(9, 1);  // start with the "dot" off
}

void loop()
{
  // set each binary button to 0 for 0
  if (binary_3 > 1)
  {
    binary_3 =0;
  }

  if (binary_2 > 1)
  {
    binary_2 =0;
  }

  if (binary_1 > 1)
  {
    binary_1 =0;
  }

  if (binary_0 > 1)
  {
    binary_0 =0;
  }
  // =====================================
//  Button Press area.
//  Press binary button and adds 1
//  since conditions set before, if the button goes over 1, reset



  digitalRead(binary_button_3);
  digitalRead(binary_button_2);
  digitalRead(binary_button_1);
  digitalRead(binary_button_0);
   
  if(binary_button_3 == HIGH)
  {
    binary_3 += 1;
    delay(100); // debounce
  }

  if(binary_button_2 == HIGH)
  {
    binary_2 += 1;
    delay(100); // debounce
  }

  if(binary_button_1 == HIGH)
  {
    binary_1 += 1;
    delay(100); // debounce
  }

  if(binary_button_0 == HIGH)
  {
    binary_0 += 1;
    delay(100); // debounce
  } 
 
  // ======================================
  // Create light up sequence
  // Zero
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 0 && binary_0 == 0)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 0);
   digitalWrite(8, 1);
   delay(1000);
  }
 
  // One
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 0 && binary_0 == 1)
  {
   digitalWrite(2, 1);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 1);
   digitalWrite(6, 1);
   digitalWrite(7, 1);
   digitalWrite(8, 1);
   delay(1000);
  }
 
  // Two
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 1 && binary_0 == 0)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 1);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 1);
   digitalWrite(8, 0);
   delay(1000);
  }
 
  // Three
  if (binary_3 == 0 && binary_2 == 0 && binary_1 == 1 && binary_0 == 1)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 1);
   digitalWrite(7, 1);
   digitalWrite(8, 0);
   delay(1000);
  }
 
  // Four
  if (binary_3 == 0 && binary_2 == 1 && binary_1 == 0 && binary_0 == 0)
  {
   digitalWrite(2, 1);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 1);
   digitalWrite(6, 1);
   digitalWrite(7, 0);
   digitalWrite(8, 0);
   delay(1000);
  }
 
  // Five
  if (binary_3 == 0 && binary_2 == 1 && binary_1 == 0 && binary_0 == 1)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 1);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 1);
   digitalWrite(7, 0);
   digitalWrite(8, 0);
   delay(1000);
  }
 
  // Six
  if (binary_3 == 0 && binary_2 == 1 && binary_1 == 1 && binary_0 == 0)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 1);
   digitalWrite(4, 0);
   digitalWrite(5, 0);
   digitalWrite(6, 0);
   digitalWrite(7, 0);
   digitalWrite(8, 0);
   delay(1000);
  }
 
  // Seven
  if (binary_3 == 0 && binary_2 == 1 && binary_1 == 1 && binary_0 == 1)
  {
   digitalWrite(2, 0);
   digitalWrite(3, 0);
   digitalWrite(4, 0);
   digitalWrite(5, 1);
   digitalWrite(6, 1);
   digitalWrite(7, 1);
   digitalWrite(8, 1);
   delay(1000);
   
   }
   
   // Eight
   if (binary_3 == 1 && binary_2 == 0 && binary_1 == 0 && binary_0 == 0)
   {
     digitalWrite(2, 0);
     digitalWrite(3, 0);
     digitalWrite(4, 0);
     digitalWrite(5, 0);
     digitalWrite(6, 0);
     digitalWrite(7, 0);
     digitalWrite(8, 0);
     delay(1000);
   }
   
   // Nine
   if (binary_3 == 1 && binary_2 == 0 && binary_1 == 0 && binary_0 == 0)
   {
     digitalWrite(2, 0);
     digitalWrite(3, 0);
     digitalWrite(4, 0);
     digitalWrite(5, 1);
     digitalWrite(6, 1);
     digitalWrite(7, 0);
     digitalWrite(8, 0);
     delay(1000);
   }
   
}


Logged

Cleveland, TN
Offline Offline
Full Member
***
Karma: 2
Posts: 207
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I have read a post in the past about how quickly a main loop cycles but I don't remember how to calculate it. However, what I think is happening is that when you press a button, it is counting faster than you think so it is counting to two before you can release your button and going back to 0. The problem is compounded by the fact that you have not truly debounced your button in the code. That after each button state check is not going to do it since you can get bounce when you press the button as well as when you release.

I moved your zero reset. This cleans the code up a bit.

Code:
boolean lastbutton0 = LOW;
boolean currentbutton0 = HIGH;
boolean lastbutton1 = LOW;
boolean currentbutton1 = HIGH;
boolean lastbutton2 = LOW;
boolean currentbutton2 = HIGH;
boolean lastbutton3 = LOW;
boolean currentbutton3 = HIGH;


void loop()
{
 //Debounce button
  currentbutton0 = debounce(lastbutton0,binary_button_0);

  if (lastbutton0 == LOW && currentbutton0 == HIGH)
  {
  binary_0++;
  if (binary_0 > 1)
  {
   binary_0 = 0;
  }
  }

 //Debounce button
  currentbutton1 = debounce(lastbutton1,binary_button_1);

  if (lastbutton1 == LOW && currentbutton1 == HIGH)
  {
  binary_1++;
  if (binary_1 > 1)
  {
   binary_1 = 0;
  }
  }

 //Debounce button
  currentbutton2 = debounce(lastbutton2,binary_button_2);

  if (lastbutton2 == LOW && currentbutton2 == HIGH)
  {
  binary_2++;
  if (binary_2 > 1)
  {
   binary_2 = 0;
  }
  }


 //Debounce button
  currentbutton3 = debounce(lastbutton3,binary_button_3);

  if (lastbutton3 == LOW && currentbutton3 == HIGH)
  {
  binary_3++;
  if (binary_3 > 1)
  {
   binary_3 = 0;
  }
  }

}




//Debounce Routine
boolean debounce(boolean last, int buttonpin)
{
  boolean current = digitalRead(buttonpin);
  if (last != current)
  {
    delay(50);
    current = digitalRead(buttonpin);
  }
  return current;
}
Logged

Luck,

Wade

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 601
Posts: 48543
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
but for some reason, the buttons aren't working, and all that will display on the segment is "0".
So, are we chasing a hardware problem or a software problem? You are not enabling the internal pullup resistors. Therefore, you must have external pullup or pulldown resistors. Since the test is for HIGH to mean the the switch is pressed, this implies that the switch is wired in a pulldown configuration.

So, exactly how are your switches wired?
Logged

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

I have four buttons, each connected to a resistor (not sure what makes it a pull up, over a pull down.) and each button is connected to a pin on the board.

I can take a picture if you'd like.

I was thinking that the problem was software side.
Logged

Left Coast, CA (USA)
Offline Offline
Brattain Member
*****
Karma: 361
Posts: 17253
Measurement changes behavior
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I have four buttons, each connected to a resistor (not sure what makes it a pull up, over a pull down.) and each button is connected to a pin on the board.

I can take a picture if you'd like.

I was thinking that the problem was software side.

Yes a clear picture, or better yet a schematic drawing, even if hand drawn and photographed. I suspect you don't have the resistors wired correctly. Also the value of the resistors would be helpful to know.

Lefty

Logged

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



Logged

Offline Offline
Edison Member
*
Karma: 19
Posts: 1041
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

That's not quite correct. You need to have the arduino pin connected through the resistor to ground AND the button. The other side of the button should be connected to Vcc (5V)

Code:
PIN --- resistor --- ground
     |
     |
  button --- 5V

The resistor should be "gently pulling" the pin to ground when the button is not pressed. When the button gets pressed, then it "strongly pulls" the pin to 5V, "overpowering" the resistor
Logged

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

I've redesigned the buttons and inputs, and now It's constantly showing "8"...

I've tried moving a lot of things around, but I'm starting to think that I'm just not getting the hang of this stuff =/

I want to thank you guys for all your help but I think I might either just change majors or possibly transfer to a school that moves slower and can teach me in smaller steps and more hands on...
Logged

Global Moderator
UK
Offline Offline
Brattain Member
*****
Karma: 285
Posts: 25626
I don't think you connected the grounds, Dave.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The simplest way to debug a program like this is to get it to talk to you.
Serial.print is your friend
Logged

"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

Pages: [1]   Go Up
Jump to: