This example is based on "arduino and memory how to" article. Let's say that we want to make a single level vertical circular menu.
We need two buttons the down and the enter.
We connect the down button at pin 7 and the enter button at pin 5. like the photo below:

Pressing the down button we increase the BtnDownCounter until the maximum number of the menu elements then BtnDownCounter starts from the value 1 again.
By doing this we have the circularity.
Each time that the enter button is pressed the algorithm looks at the BtnDownCounter value and executes the associated code.
//The DOWN button
const int BtnDownPin = 7;
int BtnDownCounter = 0;
int BtnDownState = 0;
int BtnDownLastState = 0;
//The ENTER button
const int BtnEnterPin = 5;
int BtnEnterState = 0;
void ClearScreen(){
int i;
for (i = 0; i < 15; i = i + 1) {
Serial.println();
}
}
void setup() // the set up part (runs only once)
{
Serial.begin(9600); // set up Serial library at 9600 bps
pinMode(BtnDownPin, INPUT);
pinMode(BtnEnterPin, INPUT);
BtnDownCounter=1;
ClearScreen();
Serial.println(">MENU1");
Serial.println("menu2");
}
void loop() // The main loop (runs over and over again)
{
BtnDownState = digitalRead(BtnDownPin);
BtnEnterState = digitalRead(BtnEnterPin);
//THE DOWN BUTTON
if (BtnDownState != BtnDownLastState) {
if (BtnDownState == HIGH) {
if (BtnDownCounter < 4) {
BtnDownCounter++;
} else {
BtnDownCounter = 1;
}
if (BtnDownCounter == 1) { //Menu 1
ClearScreen();
Serial.println(">MENU1");
Serial.println("menu2");
} else if (BtnDownCounter == 2) { //Menu 2
ClearScreen();
Serial.println(">MENU2");
Serial.println("menu3");
} else if (BtnDownCounter == 3) { //Menu 3
ClearScreen();
Serial.println(">MENU3");
Serial.println("menu4");
} else if (BtnDownCounter == 4) { //Menu 4
ClearScreen();
Serial.println(">MENU4");
Serial.println("menu1");
}
}
}
BtnDownLastState = BtnDownState;
//THE ENTER BUTTON
if (BtnEnterState == HIGH) {
if (BtnDownCounter == 1) {
ClearScreen();
Serial.println("You have entered at menu 1");
} else if (BtnDownCounter == 2) {
ClearScreen();
Serial.println("You have entered at menu 2");
} else if (BtnDownCounter == 3) {
ClearScreen();
Serial.println("You have entered at menu 3");
} else if (BtnDownCounter == 4) {
ClearScreen();
Serial.println("You have entered at menu 4");
}
}
}
You can download this demo from here : CircularMenuSimple
Below we can see this demo in video :
In the next page we will see an advanced multilevel circular menu...