SparkFun Forums 

Where electronics enthusiasts find answers.

For the discussion of Arduino related topics.
By ravinderrob
#193784
i want to make countdown clock with adjustable time and control some relays
and i want to use 2 displays seven segment and lcd 20*2

lcd is working fine but seven segment is flickering.
Code: Select all
#include <LiquidCrystal.h>
#include <Bounce2.h>
#include "SevSeg.h"

#define BUTTON_PINs   9
#define LED_PIN       13
#define feedback      8
#define BUTTON_PINin  22
#define BUTTON_PINp   10
#define BUTTON_PINn   11
#define BUTTON_PINr   12
#define BUTTON_PINf   27
#define BUTTON_PINb   26
#define BUTTON_PIN60  25
#define BUTTON_PIN30  24
Bounce debouncers  = Bounce();
Bounce debouncerp  = Bounce();
Bounce debouncern  = Bounce();
Bounce debouncerr  = Bounce();
Bounce debouncerin = Bounce();
Bounce debouncerf  = Bounce();
Bounce debouncerb  = Bounce();
Bounce debouncer60 = Bounce();
Bounce debouncer30 = Bounce();
int S = 00;  // count seconds
int M = 60;   // count minutes
int H = 00;  // count hours

int ledState =      LOW;
int feedbackState = LOW;


//initialize the library with the numbers of the interface pins
LiquidCrystal lcd(2, 3,  4, 5, 6, 7); // pins connected to LCD
SevSeg sevseg; 
void setup()
{
 byte numDigits = 4;   
  byte digitPins[] = {34, 32, 30, 28};
  byte segmentPins[] = {36, 38, 40, 42, 44, 46, 48,37};
  bool resistorsOnSegments = false; // Use 'true' if on digit pins
  byte hardwareConfig = COMMON_ANODE; // See README.md for options
  
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.setBrightness(500);
  pinMode(50, OUTPUT);
  pinMode(51, OUTPUT);
  pinMode(52, OUTPUT);
  // pinMode(50, OUTPUT);
  lcd.begin(16, 2); //set up the LCD's number of columns and rows
  Serial.begin(9600);
  pinMode(BUTTON_PINs,  INPUT_PULLUP);
  pinMode(BUTTON_PINp,  INPUT_PULLUP);
  pinMode(BUTTON_PINn,  INPUT_PULLUP);
  pinMode(BUTTON_PINr,  INPUT_PULLUP);
  pinMode(BUTTON_PINin, INPUT_PULLUP);
  pinMode(BUTTON_PINf,  INPUT_PULLUP);
  pinMode(BUTTON_PINb,  INPUT_PULLUP);
  pinMode(BUTTON_PIN60, INPUT_PULLUP);
  pinMode(BUTTON_PIN30, INPUT_PULLUP);
  // After setting up the button, setup the Bounce instance :
  debouncers.attach(BUTTON_PINs);
  debouncers.interval(0);
  debouncerp.attach(BUTTON_PINp);
  debouncerp.interval(0);
  debouncern.attach(BUTTON_PINn);
  debouncern.interval(0);
  debouncerr.attach(BUTTON_PINr);
  debouncerr.interval(0);
  debouncerin.attach(BUTTON_PINin);
  debouncerin.interval(0);
   debouncerf.attach(BUTTON_PINf);
  debouncerf.interval(0);
   debouncerb.attach(BUTTON_PINb);
  debouncerb.interval(0);
   debouncer60.attach(BUTTON_PIN60);
  debouncer60.interval(0);
   debouncer30.attach(BUTTON_PIN30);
  debouncer30.interval(0);
  pinMode(LED_PIN, OUTPUT);
  pinMode(feedback, OUTPUT);
  digitalWrite(LED_PIN, ledState);
  digitalWrite(feedback, feedbackState);
}
void loop()
{
  
   
  lcd.setCursor(1, 0);
  lcd.print ("    ");
  // lcd.setCursor(10,1);
  //lcd.print(":");
  lcd.setCursor(13, 1);
  lcd.print(":");
  debouncers .update();
  debouncerp .update();
  debouncern .update();
  debouncerr .update();
  debouncerin.update();
  debouncerf .update();
  debouncerb .update();
  debouncer60.update();
  debouncer30.update();

  // Get the updated value :
  int values  = debouncers .read();
  int valuep  = debouncerp .read();
  int valuen  = debouncern .read();
  int valuer  = debouncerr .read();
  int valuein = debouncerin.read();
  int valuef  = debouncerf .read();
  int valueb  = debouncerb .read();
  int value60 = debouncer60.read();
  int value30 = debouncer30.read();
  if ( valuep == HIGH ) {
    M = (M + 1);
   // delay(250);
  }

  if ( valuen == HIGH ) {
    M = (M - 1);
  //  delay(250);
  }
  if ( value60 == HIGH ) {
    M =60;
  }
  if ( value30 == HIGH ) {
    M =30;
  }
  if ( valuef == HIGH ) {
    digitalWrite(51, LOW);
    digitalWrite(52, LOW);
    
  }
  else if ( valueb == HIGH ) {
    digitalWrite(51, HIGH);
    digitalWrite(52,HIGH);
  }

  if ( debouncers.fell() ) {

    // Toggle LED state :
    ledState = !ledState;
    digitalWrite(LED_PIN, ledState);
    feedbackState = !feedbackState;
    digitalWrite(feedback, feedbackState);

  }
  if ( feedbackState == HIGH && M >= 0 && S >= 0 )
  {

    lcd.setCursor(0, 1);
    lcd.print("TIME LEFT:");
    S--;
    delay(1000);

  }
  else {
    S;

    lcd.setCursor(0, 1);
    lcd.print("   READY  ");
  }


  if (S < 0)
  {
    M--;
    S = 59;
  }
  if (M < 0)
  {
    H--;
    M = 00;
  }
  if (H < 0)
  {
    H = 00;
    M = 00;
    S = 00;
  }
  if (M > 9)
  {
    lcd.setCursor(11, 1);
    lcd.print(M);
     sevseg.setNumber(M);
  sevseg.refreshDisplay();
  }
  else
  {
    lcd.setCursor(11, 1);
    lcd.print("0");
    lcd.setCursor(12, 1);
    lcd.print(M);
     sevseg.setNumber(M);
  sevseg.refreshDisplay();
    lcd.setCursor(13, 1);
    lcd.print(":");
  }

  if (S > 9)
  {
    lcd.setCursor(14, 1);
    lcd.print(S);
  }
  else
  {
    lcd.setCursor(14, 1);
    lcd.print("0");
    lcd.setCursor(15, 1);
    lcd.print(S);
    lcd.setCursor(16, 1);
    lcd.print(" ");
  }

  if (H > 9)
  {
    //lcd.setCursor(8,1);
    //lcd.print (H);
  }
  else
  {
    //lcd.setCursor(8,1);
    // lcd.print("0");
    // lcd.setCursor(9,1);
    // lcd.print(H);
    // lcd.setCursor(10,1);
    //lcd.print(":");
  }
  if (M == 0 && S == 0) {
    digitalWrite(50, HIGH);
  }
  else if (valuein == LOW) {
    digitalWrite(50, HIGH);
  }
  else if (valuein == LOW) {
    digitalWrite(50, HIGH);
  }

  else
  {
    digitalWrite(50, LOW);
  }

  if ( valuer == HIGH ) {
    digitalWrite(50, LOW);
  }
  else
  {digitalWrite(50, HIGH);
  }

  
 



}
Image