How to make Arduino push button counter with 2 Digit 7 Segment



Schematic diagram


Wiring 7 Segment and Arduino


7 Segment Pin 10 to Pin 6 on Arduino board
7 Segment Pin 9 to Pin 7 on Arduino board
7 Segment Pin 1 to Pin 8 on Arduino board
7 Segment Pin 4 to Pin 9 on Arduino board
7 Segment Pin 3 to Pin 10 on Arduino board
7 Segment Pin 6 to Pin 11 on Arduino board
7 Segment Pin 5 to Pin 12 on Arduino board
7 Segment Pin 2 to Pin 13 on Arduino board

7 Segment Pin 7 ( ds1) to 1k ohm resistor , another leg of 1k ohm resistor to pin 3 on Arduino board
7 Segment Pin 7 ( ds2) to 1k ohm resistor,  another leg of 1k ohm resistor to pin 2 on Arduino board

button1 to pin 4 on Arduino board
button2 to pin 5 on Arduino board

Part list

- Arduino board
- 2 Digit 7 Segment
- Jumper wire
- Breadboard
- 1K ohm Resistor x 2
- button switch x 2

Sparkfun/SevSeg Library : https://github.com/sparkfun/SevSeg

Arduino Sketch


#include <SevSeg.h>

//Create an instance of the object.
SevSeg myDisplay;

//Create global variables
unsigned long timer;
int deciSecond = 0;

bool bPress = false;
const int IncbuttonPin = 4;
const int DecbuttonPin = 5;

// Variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses

int IncbuttonState = 0;         // current state of the button
int lastIncbuttonState = 0;     // previous state of the button

int DecbuttonState = 0;         // current state of the button
int lastDecbuttonState = 0;     // previous state of the button

void setup()
{
  Serial.begin(9600);
  int displayType = COMMON_CATHODE; //Your display is either common cathode or common anode

   pinMode( IncbuttonPin ,INPUT_PULLUP);
   pinMode( DecbuttonPin ,INPUT_PULLUP);
  /*
  //This pinout is for a regular display
   //Declare what pins are connected to the digits
   int digit1 = 2; //Pin 12 on my 2 digit display
   int digit2 = 3; //Pin 9 on my 2 digit display
   int digit3 = 4; //Pin 8 on my 2 digit display
   int digit4 = 5; //Pin 6 on my 2 digit display
   
   //Declare what pins are connected to the segments
   int segA = 6; //Pin 11 on my 2 digit display
   int segB = 7; //Pin 7 on my 2 digit display
   int segC = 8; //Pin 4 on my 2 digit display
   int segD = 9; //Pin 2 on my 2 digit display
   int segE = 10; //Pin 1 on my 2 digit display
   int segF = 11; //Pin 10 on my 2 digit display
   int segG = 12; //Pin 5 on my 2 digit display
   int segDP= 13; //Pin 3 on my 2 digit display
   */

  //This pinout is for OpenSegment PCB layout
  //Declare what pins are connected to the digits
  int digit1 = 3; //Pin 7 on my 2 digit display
  int digit2 = 2; //Pin 8 on my 2 digit display
  int digit3 = 0;
  int digit4 = 0;

  //Declare what pins are connected to the segments
  int segA = 6; //Pin 10 on my 2 digit display
  int segB = 7; //Pin 9 on my 2 digit display
  int segC = 8; //Pin 1 on my 2 digit display
  int segD = 9; //Pin 4 on my 2 digit display
  int segE = 10; //Pin 3 on my 2 digit display
  int segF = 11; //Pin 6 on my 2 digit display
  int segG = 12; //Pin 5 on my 2 digit display
  int segDP= 13; //Pin 2 on my 2 digit display

  int numberOfDigits = 2; //Do you have a 1, 2 or 4 digit display?

  myDisplay.Begin(displayType, numberOfDigits, digit1, digit2, digit3, digit4, segA, segB, segC, segD, segE, segF, segG, segDP);
  
  myDisplay.SetBrightness(100); //Set the display to 100% brightness level

  timer = millis();
}

void loop()
{
  IncbuttonState = digitalRead(IncbuttonPin);
  DecbuttonState = digitalRead(DecbuttonPin);

    checkIncButtonPress();
   checkDecButtonPress();
  //Example ways of displaying a decimal number
  char tempString[10]; //Used for sprintf
  sprintf(tempString, "%2d", buttonPushCounter); //Convert deciSecond into a string that is right adjusted
  //sprintf(tempString, "%d", deciSecond); //Convert deciSecond into a string that is left adjusted
  //sprintf(tempString, "%04d", deciSecond); //Convert deciSecond into a string with leading zeros
  //sprintf(tempString, "%4d", deciSecond * -1); //Shows a negative sign infront of right adjusted number
  //sprintf(tempString, "%4X", deciSecond); //Count in HEX, right adjusted

   
  //Produce an output on the display
  myDisplay.DisplayString(tempString, 0); //(numberToDisplay, decimal point location)

  //Other examples
  //myDisplay.DisplayString(tempString, 0); //Display string, no decimal point
  //myDisplay.DisplayString("-23b", 3); //Display string, decimal point in third position

  

  delay(5);
}

void checkIncButtonPress()
{
   // compare the IncbuttonState to its previous state
  if (IncbuttonState != lastIncbuttonState) {
    // if the state has changed, increment the counter
    if (IncbuttonState == LOW) {
      // if the current state is HIGH then the button went from off to on:
      bPress = true;
      buttonPushCounter++;
      if( buttonPushCounter > 99) buttonPushCounter =0 ;
      Serial.println("on");
      
    } else {
      // if the current state is LOW then the button went from on to off:
      Serial.println("off");
    }
    // Delay a little bit to avoid bouncing
    delay(50);
  }
  // save the current state as the last state, for next time through the loop
  lastIncbuttonState = IncbuttonState;

}
void checkDecButtonPress()
{
   // compare the IncbuttonState to its previous state
  if (DecbuttonState != lastDecbuttonState) {
    // if the state has changed, increment the counter
    if (DecbuttonState == LOW) {
      // if the current state is HIGH then the button went from off to on:
      bPress = true;
      buttonPushCounter--;
      if( buttonPushCounter < 0) buttonPushCounter =0 ;
      Serial.println("on");
      
    } else {
      // if the current state is LOW then the button went from on to off:
      Serial.println("off");
    }
    // Delay a little bit to avoid bouncing
    delay(50);
  }
  // save the current state as the last state, for next time through the loop
  lastDecbuttonState = DecbuttonState;

}  

ความคิดเห็น