ARDUINO AND 16X2 LCD BASED STOP WATCH

Simple 16X2 LCD based stop watch, the project tested on multi LCD shield, circuit includes 3 switches, start, stop and reset, project works with 7-12V DC supply or USB power input, code is written for Arduino Nano.
Arduino Connections
- Switch 1 Arduino Pin A3 RESET SWITCH
- Switch 2 Arduino Pin D6 TIMER START SWITCH
- Switch 3 Arduino Pin D7 TIMER STOP SWITCH
Arduino Pins LCD
- LCD RS pin to digital pin 12
- LCD Enable pin to digital pin 11
- LCD D4 pin to digital pin 5
- LCD D5 pin to digital pin 4
- LCD D6 pin to digital pin 3
- LCD D7 pin to digital pin 2
- LCD R/W pin to ground
Arduino Pins Vs. Various options Multi-Purpose Shield
- Switch 1 Arduino Pin A3 RESET SWITCH
- Switch 2 Arduino Pin D6 TIMER START SWITCH
- Switch 3 Arduino Pin D7 TIMER STOP SWITCH
- Current Sensor ACS714 Arduino Pin A5
- Trimmer Potentiometer Arduino Pin A0
- LM35 Sensor Arduino Pin A4
- Power Mosfet Arduino Pin D9
- Relay Arduino Pin D8









ARDUINO CODE
/*Simple LCD stopwatch program with Start, Stop, Reset Switches.
Schematic and PCB layout available at www.twovolt.com Code is modification
of original code from author TechWithZan*/
//including liblary for LCD
#include <LiquidCrystal.h>
//setting up LCD INPUT pins
LiquidCrystal lcd(12,11,5,4,3,2);
//setting hours, minutes, secound and miliseconds to 0
int h=0;
int m=0;
int s=0;
int ms=0;
//defines pin for all buttons
const int start_pin = 6;
const int stop1_pin = 7;
const int reset_pin = 17;
//defines starting points (in my case 0)
int start=0;
int stop1=0;
int reset=0;
void setup()
{
lcd.begin(16 ,2); //starting LCD
//defining pins if they are INPUT or OUTPUT pins
pinMode(start_pin, INPUT);
pinMode(stop1_pin, INPUT);
pinMode(reset_pin, INPUT);
}
void loop()
{
lcd.setCursor(0,1);
lcd.print(“STOP-WATCH”);
lcd.setCursor(0,0);
lcd.print(“TIME:”);
lcd.print(h);
lcd.print(“:”);
lcd.print(m);
lcd.print(“:”);
lcd.print(s);
start = digitalRead(start_pin); //reading buton state
if(start == HIGH)
{
stopwatch(); //goes to sub program stopwatch
}
}
void stopwatch()
{
lcd.setCursor(0,0); //setting start point on lcd
lcd.print(“TIME:”); //writting TIME
lcd.print(h); //writing hours
lcd.print(“:”);
lcd.print(m); //writing minutes
lcd.print(“:”);
lcd.print(s); //writing seconds
ms=ms+10;
delay(10);
if(ms==590)
{
lcd.clear(); //clears LCD
}
if(ms==590) //if state for counting up seconds
{
ms=0;
s=s+1;
}
if(s==60) //if state for counting up minutes
{
s=0;
m=m+1;
}
if(m==60) //if state for counting up hours
{
m=00;
h=h+01;
}
lcd.setCursor(0,1);
lcd.print(“STOP-WATCH”);
stop1 = digitalRead(stop1_pin); //reading buton state
if(stop1 == HIGH) //checking if button is pressed
{
stopwatch_stop(); //going to sub program
}
else
{
stopwatch(); //going to sub program
}
}
void stopwatch_stop()
{
lcd.setCursor(0,0);
lcd.print(“TIME:”);
lcd.print(h);
lcd.print(“:”);
lcd.print(m);
lcd.print(“:”);
lcd.print(s);
lcd.setCursor(0,1);
lcd.print(“STOP-WATCH”);
start = digitalRead(start_pin); //reading buton state
if(start == HIGH)
{
stopwatch(); //going to sub program
}
reset = digitalRead(reset_pin); //reading buton state
if(reset == HIGH)
{
stopwatch_reset(); //going to sub program
loop();
}
if(reset == LOW)
{
stopwatch_stop(); //going to sub program
}
}
void stopwatch_reset()
{
lcd.clear();
lcd.setCursor(0,1);
lcd.print(“STOPWATCH”);
h=00; //seting hours to 0
m=00; //seting minutes to 0
s=00; //seting seconds to 0
return; //exiting the program and returning to the point where entered the program
}