A Simple, Practical Arduino Stopwatch

519

3

1

Introduction: A Simple, Practical Arduino Stopwatch

Search the web for Arduino stopwatch. You probably just did it, if you're here. From personal experience, I can tell you that any stopwatch on the internet is either way too complex (in code, for beginners), or is way too simplified, and not practical, like the ones that just keep counting seconds without resetting.

You think so too, eh? Well guess what. I did it, and what's more, I directly take my input from the millis() function- an endless line of numbers (until 49 days, or whatever). The best part? It's only one line.

Resetting, is the actual hard part of the stopwatch. For intermediate, programmers, if you haven't already, go ahead and try to do this yourself, with seconds, minutes, and hours together. You'll get what I'm talking about.

For beginners, read on, and revel in the genius of my mind.

Just kidding, but the solution I came up with is pretty neat. Here's what it is:

Step 1: The Solution

So the problem is resetting. What we want is a continuous, repeating cycle of numbers, from an endless output of sequential numbers (millis() - it basically counts milliseconds, or actually 1.024 milliseconds, but whatever).

The first thing that comes to mind is using difference, like time1 -time2 and a delay. Forget that. It takes at least six lines of code, and an if statement to boot.

So here's how to do it. We have a limit (59). We want everything from 0 to 59 to repeat over and over. How?

What if... we took the remainder... of the millis function divided by 59.... Bingo!

So, it should be like so:

(60[as the initial value because the limit is 59]+ millis() / 1000[1000 milliseconds is a second] ) % 60

Ok, lemme explain. (%) or modulus, is basically an operator like (+) that finds the remainder. Like 9 % 2 = 1.

So:

• remainder of (60 + 0) % 60 = 0
• remainder of (60 + 1) % 60 =1

• remainder of (60 + 58) % 60 = 58

• remainder of (60 + 59) % 60 = 59

• remainder of (60 + 60) % 60 = 60

• remainder of (60 + 61) % 60 = 1

See!

Now, for the parts.

Step 2: The Parts

Not much, at all.

1. Any arduino
2. Any display (I used the 0.96" OLED, but you can use whatever you have, just make sure to put the right variables into the display functions of your display.)

That's it.

Step 3: The Code

Here ya go. It's pretty clearly commented, so there should be no problems. The libraries and init for 0.96" OLED is in the code. Replace it with your own display's if it it's different.

```// 0.96" OLED libraries#include <SPI.h>#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>// 0.96" OLED Init#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);int seconds;int minutes;int hours;void setup() {// Some more 0.96" OLED Init  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
}void loop() {  seconds = (60 + millis() / 1000) % 60;
minutes = (60 + millis() / 60000) % 60;
hours = (25 + millis() / 3600000) % 25;  display.clearDisplay();

display.setCursor(0, 22);
// print the number of hours since reset
display.print(hours);
display.print("h:");// print the number of miutes since reset  display.print(minutes);  display.print("m:");
// print the number of seconds since reset
display.print(seconds);
display.print("s");  display.setCursor(0, 0);
display.print("Stopwatch");
display.drawLine(0,18,128,18, WHITE);

display.display();}```

Step 4: En Finalment...

So that's it! Now go do what you want with it. Time some eggs, or take over your neighborhood.

Cheers, Aarush

12 605
244 17K
81 7.5K
290 25K