(Semi) Automated Brewery

Hello all,

I'm in the research portion of my senior project. That project is to build a 3-kettle brewing system that utilizes an arduino as its controller. I've been trying to wrap my head around building an LCD menu for my process and have failed at every try I've made. Ideally, I would have a rotary encoder w/ built-in push button as user input hardware.

Basically, I want to have a main menu that looks something like this:

MAIN MENU

  1. Setup
  2. Settings
  3. Exit

If option 1 is selected, it goes to this menu:

SETUP
1a)Single Stage Mash
2a)Step Mash

If option 1a is selected, this menu appears:

Single Stage Mash
Select Temperature:
Select Time:

If option 2a is selected, this menu appears:

Step Mash
Select Number of Steps:

Say for example, 3 steps is chosen in Step Mash menu, this shows up:

Step Mash
Step 1 Temperature:
Step 1 Time:
Step 2 Temperature:
Step 2 Time:
Step 3 Temperature:
Step 3 Time:

Depending on what setup is selected, a pump, heating element (PID algorithm), motorized ball valves, sensors will all act to monitor and transfer the liquid whenever and wherever it needs to go.

So, as said before I'm really struggling with this. I've been searching online but nothing I have found has been of any use to me as I'm still kind of a noob. I could really use any help you can provide. Thanks.

Why do you need a rotary encoder?

I wrote something like this but for a piece of test equipment. I had UP, DOWN, RIGHT, LEFT, and ENTER buttons.
Pushing the ENTER button each time would display one menu.
Then within each menu, you would use the UP,DOWN,RIGHT,LEFT buttons to move the cursor and increment/decrement values and the ENTER button to select an item or enter the value.

You need to map out what you want to do in detail. It is fun, but not easy.

I'd like a rotary encoder because I'd be dealing with a pretty large range of numbers (especially when selecting time). It would be a lot faster to spin a rotary encoder from zero to 60 than it would be to push a button 60 times, right?

jeebsinc:
I'd like a rotary encoder because I'd be dealing with a pretty large range of numbers (especially when selecting time). It would be a lot faster to spin a rotary encoder from zero to 60 than it would be to push a button 60 times, right?

0 to 60 is eight key presses for my system

one key press to move cursor to the tens position; the ones position remains at 0
0 to 1 to 2 to 3 to 4 to 5 to 6 to increase the tens digit to 6 = six key presses
ENTER key is one key press

Alright, you've convinced me. It would probably be easier that way as well. So, how do I go about coding this thing? Anytime I try to learn, I get overwhelmed pretty quickly. How did you do yours? If you don't mind me asking.

jeebsinc:
I'd like a rotary encoder because I'd be dealing with a pretty large range of numbers (especially when selecting time). It would be a lot faster to spin a rotary encoder from zero to 60 than it would be to push a button 60 times, right?

Wrong. Settting time from 0 hours to 20 hours is only two button presses when I do the programming for something like that.
Think of suitable formatting and cursor position: Time display hh:mm:ss = 00:00:00 and cursor in the leftmost position means, that "up" for 00: becomes 10 with a single buttton "up" press and 20 with the next "up" press. You c ould easily create time ntry for 999 hours and changing from 000 hours to 999 hours just requires 29 button presses: 9 presses "up" with each digit and two times "right" for switching the cursor position one to the right. It's the decimal system and you can make each digit editable of its own.

jeebsinc:
Alright, you've convinced me. It would probably be easier that way as well. So, how do I go about coding this thing? Anytime I try to learn, I get overwhelmed pretty quickly. How did you do yours? If you don't mind me asking.

You will have to write out your hierarchial menu structure just as you did in your first post but in further detail.

You will need to make sure that the user enters all the values.

You will need to select a LCD display. I think 20 x 4 would work best for what you want to do. Or maybe you want to use a touch panel?

You will need to "invert" the display at a particular position to indicate where the "cursor" is. For example, if you push the LEFT button you would need to move the cursor to the second position and indicate that on the LCD to the user. I don't know whether the traditional Arduino-compatible LCD is capable of this.

Before you go too far with this, you will want to Google and see if someone had done a similar type of project and has documented it.