Excel-based automation timer & cycle logic generator (feedback welcome)

Hello everyone,

For small automation and Arduino-based projects, I often need to define ON/OFF timing, number of cycles, and estimate total runtime before implementing the logic in code.

To simplify this, I created an Excel-based tool that:

  • Calculates cycle timing and total runtime
  • Displays a cycle table (first 20 cycles)
  • Generates a structured logic description (state-based)
  • Provides basic warnings and notes

The tool does not generate executable code and is intended purely as a planning and documentation aid before implementation.

I’ve shared it here in case it’s useful to others and would appreciate any feedback or suggestions.

Link: Automation Timer & Cycle Logic Generator (Excel)

@lost_alex ,

Your topic was moved to its current location as it is more suitable.

Could you also take a few moments to Learn How To Use The Forum.

It will help you get the best out of the forum in the future.

Thank you

You might add an option to export the cycle table to CSV or text, making it easier to reference when coding. Also, maybe let users define more than 20 cycles for longer projects.

Thanks for the feedback, that’s a good point.
Exporting the cycle table (e.g. to CSV or plain text) is something I’ve been considering, especially for referencing timing directly while coding.
Regarding the cycle count: the table is currently limited to the first 20 cycles to keep the sheet readable, but extending this (or making it configurable) would definitely make sense for longer projects.
I’ll keep both suggestions in mind for a future update.

Welcome!

Thanks for sharing, many will find it useful.

I think ideally, an export option might be to export your table as code-ready content; in your case, a complete array definition in a more or less standard form, such as:
constexpr int table[][] = {
{val, val, val},
.
.
.
{val, val, val},
{val, val, val}
};
which is instantly pasteable into the user's .ino file. Saves the drudgery of formatting.

But then, I already do this for my config tables for my Nano network's servo nodes. Just never thought it would be of interest.

If you're curious, here's an example. In an Excel file, I can generate 12 different node definitions, all similar to:

//--------------------------------   OBA WEST -------------------------------------------------
#ifdef OBAW
#define NODENAME "OBAW"
#define NODENUM 8
#define NODFLT  //if this is not defined, code creates a standard 16 TO, 32 LED node, no routes
#define HAS23017 false
#define HAS9685 false
Button Buttons[] = { 18, 57, 95, 128, 162,  203, 243, 280, 320};
Turnout Turnouts[] = {
  // st    ty  Pn  | rm    lc    Bn  | hA  | tA  | --   hL  | --  tL  | hs    hk    hf    hT  |  ts    tk    tf   tT 20250301
  {HOME, SRVO,  3,   LOCL, YARD,  0,   31,   29,    0,   0,    0,  1,   THRN, NORM, NLNK,  0,   HOME, NORM, NLNK,  0  }, //Turnout 0
  {HOME, SRVO,  4,   LOCL, YARD,  1,   31,   29,    0,   2,    0,  3,   THRN, NORM, NLNK,  0,   HOME, NORM, NLNK,  0  }, //Turnout 1
  {HOME, SRVO,  5,   LOCL, YARD,  2,   31,   29,    0,   4,    0,  5,   THRN, NORM, NLNK,  0,   HOME, NORM, NLNK,  0  }, //Turnout 2
  {HOME, SRVO,  6,   LOCL, YARD,  3,   31,   29,    0,   6,    0,  7,   THRN, NORM, NLNK,  0,   HOME, NORM, NLNK,  0  }, //Turnout 3
  {HOME, SRVO,  7,   LOCL, YARD,  4,   31,   29,    0,   8,    0,  9,   THRN, NORM, NLNK,  0,   HOME, NORM, NLNK,  0  }, //Turnout 4
  {HOME, TORT,  8,   LOCL, MAIN,  5,   31,   29,    0,  10,    0, 11,   THRN, NORM, NLNK,  0,   HOME, NORM, NLNK,  0  }, //Turnout 5
  {HOME, TORT,  9,   LOCL, MAIN,  6,   31,   29,    0,  12,    0, 13,   THRN, NORM, NLNK,  0,   HOME, NORM, NLNK,  0  }, //Turnout 6
  {HOME, SRVO, 10,   LOCL, MAIN,  7,   31,   29,    0,  14,    0, 15,   THRN, NORM, NLNK,  0,   HOME, NORM, NLNK,  0  }, //Turnout 7
  {HOME, SRVO, 11,   LOCL, MAIN,  8,   31,   29,    0,  16,    0, 17,   THRN, NORM, NLNK,  0,   HOME, NORM, NLNK,  0  }, //Turnout 8
};
Route Routes[][ROUTELEN] = {
  { 'A',  -1,  -1,  -1,  -1,  -1,  -1, -1,  -1, -1},   //
  { 'a', 'B', 'C', 'D', 'E',  -1,  -1, -1,  -1, -1},   //
  { 'a', 'B', 'C', 'D', 'e',  -1,  -1, -1,  -1, -1},   //
  { 'a', 'B', 'C', 'd',  -1,  -1,  -1, -1,  -1, -1},   //
  { 'a', 'B', 'c', 'g',  -1,  -1,  -1, -1,  -1, -1},   //
  { 'a', 'B', 'c', 'g',  -1,  -1,  -1, -1,  -1, -1},   //
  { 'a', 'b', 'f',  -1,  -1,  -1,  -1, -1,  -1, -1},   //
  { 'a', 'b', 'F', 'g',  -1,  -1,  -1, -1,  -1, -1},   //
  { 'a', 'B', 'F',  -1,  -1,  -1,  -1, -1,  -1, -1},   //
}; //end of routes table - 9 routes
#endif //END of OBAW

These definitions are output to a file named locations.h; as you can see, they are compiler-ready. My .ino file simply pulls in the correct definition from the above output file, in this case by

#define OBAW  //must occur before locations.h inclusion
#include "locations.h"

And the dataset for OBAW is incorporated in my config program in a Nano. My config program then writes the Nano EEPROM with the OBAW configuration. A second program is then written to the Nano, which simply reads and implements the EEPROM configuration; all nodes contain the same code; their personality, if you will, is defined by the EEPROM content.

Hope that gives you some ideas for extensions of what looks like a great beginning!
Best of luck, have fun!

That’s a really interesting approach, thanks for sharing such a detailed example.

Exporting compiler-ready content (e.g. array or table definitions that can be pasted directly into an .ino file) would definitely be a powerful extension beyond a simple CSV or text export. I can see how that would remove a lot of manual formatting work.

For the current version I deliberately kept the output descriptive rather than code-generating, but your example is a great illustration of how an export layer could evolve in a more code-centric direction.

I appreciate you taking the time to explain your setup — it’s given me some good ideas for future extensions.

@lost_alex

I noticed one has to buy this tool, is that correct?
It would have been appropriate to mention that + price in your first post.

As I see more and more AI based tools that could do similar things, can you describe what the added value is from this tool?

Agree on the export of code mentioned earlier.

There is a lot of criticism of AI as though it will somehow take over everything.
A UK Chief Constable is about to lose his job for using AI instead of the normal investigative routes.
My impression so far (Google AI mode) is that it is very useful.
The key as ever is to ask the right question(s).
The speed at which it delivers answers is impressive as is the sum of all human knowledge.
It's here to stay, use or don't use.
However, I watched a video recently of US Coast Guard vessel ice-breaking. Some of it was real looking, some of it not so, too manufactured. Use judgement and caution.
The cat rescuing infant from bear while someone films it, fools no-one.

I mostly agree with you.

AI is a tool, not an authority and it absolutely depends on the quality of the questions and the user’s judgement. Used blindly, it can mislead; used critically, it can save a lot of time.

My intent here isn’t to replace understanding or engineering decisions, but to reduce mechanical work so people can focus on the parts that actually require thought.

The examples you mention are a good reminder that discernment still matters especially when outputs look convincing.

That’s a fair point thanks for calling it out.

Yes, it’s a paid tool (€4.99 one-time), and you’re right that I should make that clearer upfront in future posts.

As for added value vs generic AI tools: this isn’t meant to “think” or generate logic for you, but to structure repetitive timing/cycle data in a deterministic, code-adjacent way that fits how embedded projects are actually implemented.

The focus is on repeatability, transparency, and avoiding hand-built tables or copy-paste errors especially when projects grow beyond a few cycles.

I fully agree on the export suggestions, code-ready or structured export formats are a natural next step.

thank you for sharing.