Hi All,
I'm trying to build a countdown timer using a 4x4 membrane keypad for Input and TM1637 7-Segment LED module for display. My problem is I want it to start counting down once I press the tact switch connected to pin 13, which it doesn't do. It just gets stuck to the input number decremented by 1. For example I will input 0025 for it to countdown 25 seconds to zero then press tact switch. It will only get down to 24 then it gets stuck there. Also, I would want to convert the input from the membrane switch to minutes such that if I input 25 and press start, it will have 25:00 display on the 7 segment and countdown to 24:59, 24:58, 24:57...etc. Would also like to add in a tact switch for stop later on.
I am fairly new to Arduino programming so I could use some help.
Thank you in advance to those who will reply. ;D
Here is the code:
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
int NewKeyPadVal = 0;
const int StartTact = 13;
//-----Tact Switch Input-----
int StartState = 0;
int lastStartState = 0;
//----Input Code Digits-----
int InputDigit1 = 0;
int InputDigit2 = 0;
int InputDigit3 = 0;
int InputDigit4 = 0;
//----------------------
TM1637Display display(CLK, DIO);
uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
void setup()
{
display.setBrightness(0x01);//MAX - 0x0f
// Selectively set different digits
data[0] = display.encodeDigit(0);
data[1] = display.encodeDigit(0);
data[2] = display.encodeDigit(0);
data[3] = display.encodeDigit(0);
display.setSegments(data);
// initialize I/O pins.
pinMode(A0, OUTPUT); //Relay or LED blinking Output at 0000
pinMode(StartTact, INPUT);//Timer Start
//--------------------------4x4 Keypad------------------
//------4 columns-----
pinMode(A4, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A1, OUTPUT);
digitalWrite(A4, HIGH);
digitalWrite(A3, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A1, HIGH);
//-------4 rows-----------
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
//------------------------
}
void loop()
{
display.setSegments(data);
if(InputDigit1 == 0 && InputDigit2 == 0 && InputDigit3 == 0 && InputDigit4 == 0)
{
delay(400);
while(Scan_4x4_keypad() == 19)
{
delay(1);
IfZero();
}
NewKeyPadVal = Scan_4x4_keypad();
InputDigit1 = NewKeyPadVal;
data[0] = display.encodeDigit(InputDigit1);
display.setSegments(data);
//----------------------------------------------------
delay(400);
while(Scan_4x4_keypad() == 19)
delay(1);
NewKeyPadVal = Scan_4x4_keypad();
InputDigit2 = NewKeyPadVal;
data[1] = display.encodeDigit(InputDigit2);
display.setSegments(data);
//----------------------------------------------------
delay(400);
while(Scan_4x4_keypad() == 19)
delay(1);
NewKeyPadVal = Scan_4x4_keypad();
InputDigit3 = NewKeyPadVal;
data[2] = display.encodeDigit(InputDigit3);
display.setSegments(data);
//----------------------------------------------------
delay(400);
while(Scan_4x4_keypad() == 19)
delay(1);
NewKeyPadVal = Scan_4x4_keypad();
InputDigit4 = NewKeyPadVal;
data[3] = display.encodeDigit(InputDigit4);
display.setSegments(data);
//-----------------------------------------------------
StartState = digitalRead(StartTact);
if(StartState != lastStartState){
TimerCount();
}
}
}
int TimerCount()
{
InputDigit4--;
delay(1000);
if(InputDigit4 == -1)
{
InputDigit4 = 9;
InputDigit3--;
}
if(InputDigit3 == -1)
{
InputDigit3 = 9;
InputDigit2--;
}
if(InputDigit2 == -1)
{
InputDigit2 = 9;
InputDigit1--;
}
data[0] = display.encodeDigit(InputDigit1);
data[1] = display.encodeDigit(InputDigit2);
data[2] = display.encodeDigit(InputDigit3);
data[3] = display.encodeDigit(InputDigit4);
}
void IfZero()
{
if(InputDigit1 == 0 && InputDigit2 == 0 && InputDigit3 == 0 )
{
digitalWrite(A0, HIGH);
delay(100);
digitalWrite(A0, LOW);
delay(100);
}
}
int Scan_4x4_keypad()
{
int keypadVal = 19;
//----------Find P1, P2, R, M ----
digitalWrite(A4, LOW);
digitalWrite(A3, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A1, HIGH);
if(digitalRead(9) == LOW)
keypadVal = 12; // P1 = 12
if(digitalRead(8) == LOW)
keypadVal = 13; // P2 = 13
if(digitalRead(7) == LOW)
keypadVal = 14; // R = 14
if(digitalRead(6) == LOW)
keypadVal = 15;// M = 15
//---------------------------
//----------Find 3,6,9,E ----
digitalWrite(A4, HIGH);
digitalWrite(A3, LOW);
digitalWrite(A2, HIGH);
digitalWrite(A1, HIGH);
if(digitalRead(9) == LOW)
keypadVal = 3;
if(digitalRead(8) == LOW)
keypadVal = 6;
if(digitalRead(7) == LOW)
keypadVal = 9;
if(digitalRead(6) == LOW)
keypadVal = 10;// E
//---------------------------
//----------Find 2,5,8,0 ----
digitalWrite(A4, HIGH);
digitalWrite(A3, HIGH);
digitalWrite(A2, LOW);
digitalWrite(A1, HIGH);
if(digitalRead(9) == LOW)
keypadVal = 2;
if(digitalRead(8) == LOW)
keypadVal = 5;
if(digitalRead(7) == LOW)
keypadVal = 8;
if(digitalRead(6) == LOW)
keypadVal = 0;
//----------Find 1,4,7,C ----
digitalWrite(A4, HIGH);
digitalWrite(A3, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A1, LOW);
if(digitalRead(9) == LOW)
keypadVal = 1;
if(digitalRead(8) == LOW)
keypadVal = 4;
if(digitalRead(7) == LOW)
keypadVal = 7;
if(digitalRead(6) == LOW)
keypadVal = 11;// C
return keypadVal;
//---------------------------
}