Arduino Based Auto Timer / Stop Watch Timer for stroking time Measurement by chuppandi
Featured

Step 5: Arduino Sketch - Programming

Final sketch\code for Arduino below:
/*
Sketch \ Code by Chuppandi aka Subu
Chuppandi@gmail.com
www.chuppandee.blgospot.com
*/

#include <StopWatch.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // LCD pins decleration
int switchPin1 = 3;// switch1 is connected to pin 3
int switchPin2 = 2;// switch2 is connected to pin 2
int ledPin = 13; // LED is connected to pin 13 in arduino
int val1;
int val2;
int frameRate = 500;                // the frame rate (frames per second) at which the stopwatch runs - Change to suit
long interval = (1000/frameRate);   // blink interval
char buf[15f00];                       // string buffer for itoa function
unsigned long starttime = 0;
unsigned long endtime = 0;
unsigned long lasttime = 0;
unsigned long currenttime = 0;
StopWatch sw_millis;    // MILLIS (default)
StopWatch sw_micros(StopWatch::MICROS);
StopWatch sw_secs(StopWatch::SECONDS);
void setup() {
    lcd.begin(16,2);
    pinMode(switchPin1, INPUT);
    pinMode(switchPin2, INPUT);
    pinMode(ledPin, OUTPUT);
    Serial.begin(9600);
    sw_millis.start();
    sw_micros.start();
    sw_secs.start();
}
void loop() {
  val1 = digitalRead(switchPin1);   // read input value and store it in val
  val2 = digitalRead(switchPin2);   // read input value and store it in val
    if (val1 == LOW && val2 == LOW)
   {
    digitalWrite(ledPin, HIGH);   // turn LED on
    currenttime = (sw_millis.elapsed() - lasttime) ;
    Serial.print("sw_millis=");
    Serial.println(sw_millis.elapsed());
    Serial.print("sw_micros=");
    Serial.println(sw_micros.elapsed());
    Serial.print("sw_secs=");
    Serial.println(sw_secs.elapsed());
    lcd.clear();
    lcd.print("SECS:");
    float sec = sw_millis.elapsed()/10;
    lcd.print(sec);
  int elapsedMinutes = (currenttime / 60000L);
  int elapsedSeconds = (currenttime / 1000L);
  int elapsedFrames = (currenttime / interval);
  int fractionalSecs = (int)(elapsedSeconds % 60L);
  int fractional = (int)(elapsedFrames % frameRate);       // use modulo operator to get fractional part of 100 Seconds
   fractionalSecs = (int)(elapsedSeconds % 60L);        // use modulo operator to get fractional part of 60 Seconds
  int fractionalMins = (int)(elapsedMinutes % 60L);        // use modulo operator to get fractional part of 60 Minutes
   lcd.clear();                                         // clear the LCD
lcd.print("TIME:");

   if (fractionalMins < 10){                            // pad in leading zeros
      lcd.print("0");                                 // add a zero
      }
    lcd.print(itoa(fractionalMins, buf, 10));       // convert the int to a string and print a fractional part of 60 Minutes to the LCD
      lcd.print(":");                                 //print a colan.
if (fractionalSecs < 10){                            // pad in leading zeros
      lcd.print("0");                                 // add a zero
      }
lcd.print(itoa(fractionalSecs, buf, 10));          // convert the int to a string and print a fractional part of 60 Seconds to the LCD
   lcd.print(":");                                    //print a colan.
if (fractional < 10){                                // pad in leading zeros
      lcd.print("0");                                 // add a zero
      }
lcd.print(itoa(fractional, buf, 10));              // convert the int to a string and print a fractional part of 25 Frames to the LCD


    lcd.setCursor(0, 1);
    lcd.print("ACTUATOR TIMER");

    endtime = currenttime;
/*  lcd.print(" ms=");
    lcd.print(sw_millis.elapsed());
    lcd.setCursor(0, 1);

    lcd.print("us=");
    lcd.print(sw_micros.elapsed());
*/
  delay(10);
}
// if (val1 == LOW){
//       digitalWrite(ledPin, LOW);}
else{
  lasttime = sw_millis.elapsed();
//  endtime = (sw_millis.elapsed() - starttime);
//  endtime = (currenttime - starttime);
digitalWrite(ledPin, LOW);
  int elapsedMinutes = (endtime / 60000L);
  int elapsedSeconds = (endtime / 1000L);
  int elapsedFrames = (endtime / interval);
  int fractionalSecs = (int)(elapsedSeconds % 60L);


int fractional = (int)(elapsedFrames % frameRate);       // use modulo operator to get fractional part of 100 Seconds
fractionalSecs = (int)(elapsedSeconds % 60L);        // use modulo operator to get fractional part of 60 Seconds
int fractionalMins = (int)(elapsedMinutes % 60L);        // use modulo operator to get fractional part of 60 Minutes
lcd.clear();                                         // clear the LCD
lcd.print("TIME:");

   if (fractionalMins < 10){                            // pad in leading zeros
      lcd.print("0");                                 // add a zero
      }
    lcd.print(itoa(fractionalMins, buf, 10));       // convert the int to a string and print a fractional part of 60 Minutes to the LCD
      lcd.print(":");                                 //print a colan.
if (fractionalSecs < 10){                            // pad in leading zeros
      lcd.print("0");                                 // add a zero
      }
lcd.print(itoa(fractionalSecs, buf, 10));          // convert the int to a string and print a fractional part of 60 Seconds to the LCD
   lcd.print(":");                                    //print a colan.
if (fractional < 10){                                // pad in leading zeros
      lcd.print("0");                                 // add a zero
      }
lcd.print(itoa(fractional, buf, 10));              // convert the int to a string and print a fractional part of 25 Frames to the LCD
    lcd.setCursor(0, 1);
    lcd.print("ACTUATOR TIMER");
}
}
// End of the program
 
Remove these adsRemove these ads by Signing Up
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!