Я создал меню, используя корпус переключателя, поэтому, когда пользователь нажимает кнопку выбора, выполняется функция.
Проблема: одна из функций содержит другой корпус переключателя, в котором также используются кнопки, но когда я нажимаю кнопку Кнопки снова управляются только меню, а не функцией, т. е. она загружает функцию и первый случай, но при нажатии кнопки ничего не происходит.
Что я хочу сделать: я хочу, чтобы кнопки перестали управлять меню и управление переключателем в другой функции. Кнопки должны управлять меню, только когда вызывается функция меню (и то же самое для других соответствующих функций).
Я не уверен, как решить эту проблему, и не знаю, в чем проблема.
nb, пожалуйста, не предлагайте никаких дополнительных библиотек, кроме тех, которые я использовал, также функция отлично работает сама по себе вне меню, так что я знаю, что она работает. Я также новичок в программировании на C и использовании arduino.
nb Я также попытался использовать случай с вложенным переключателем безрезультатно :( (хотя я, возможно, поступил об этом неправильно) Я также могу использовать операторы if (или что-либо еще подходящее) (в крайнем случае), однако я бы предпочел использовать переключатели.
Я очень признателен за любую помощь, поскольку я в своем уме. : O
#include <Wire.h>
#include <Adafruit_RGBLCDShield.h>
#include <utility/Adafruit_MCP23017.h>
#include <EEPROM.h>
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
//variables to decide which buttons are being used when
bool choosing;
bool playing;
//variables to select the users choices, 3 and 2 and the starting numbers displayed
int size_S=4;
int size_M=2;
uint8_t choice=1;
uint8_t oldButtons=0;
char buffer [12];
//function displaying the menu options
void SelectDisplay(int size_S, int size_M){
lcd.setCursor(0,0);
sprintf(buffer, "S:%02d M:%02d", size_S, size_M);
lcd.print(buffer);
lcd.setCursor (0,1);
lcd.print((choice==1?"Choose S":"Choose M"));
}
//variables to store user's choice
int choice_S;
int choice_M;
//!!THIS IS THE FUNCTION THAT DOESN'T WORK INSIDE THE MENU
//function for user to select options S and M
int Select(int choice_S, int choice_M){
uint8_t buttons, changes;
buttons = lcd.readButtons ();
changes = oldButtons & (~buttons);
if (playing==true){
//calling the menu disply function
SelectDisplay (size_S,size_M);
switch (choice){
case 1: //case S
if (changes & BUTTON_UP){
size_S = (size_S == 10 ? 4:size_S+1);
}else if (changes & BUTTON_DOWN){
size_S = (size_S == 4 ? 10:size_S-1);
}else if (changes & BUTTON_RIGHT){
choice= 2;
}
break;
case 2: //case M
if (changes & BUTTON_UP){
size_M = (size_M == 4 ? 2:size_M+1);
}else if (changes & BUTTON_DOWN){
size_M = (size_M == 2 ? 4:size_M-1);
}else if (changes & BUTTON_LEFT){
choice = 1;
}
break;
}
if (changes & BUTTON_SELECT){
choice_S=size_S;
choice_M=size_M;
}
}
oldButtons=buttons;
}
//variable to change the menu page and options
int menu=1;
//function displaying what the menu options
void displayMenu(){
switch(menu){
case 0:
menu=1;
break;
case 1:
lcd.clear();
lcd.setCursor(0,0);
lcd.print(">Play");
lcd.setCursor(0,1);
lcd.print(" Characters");
break;
case 2:
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Play");
lcd.setCursor(0,1);
lcd.print(">Characters");
break;
case 3:
break;
//etc..
}
}
//function for carrying out the user's menu selection
void menuAction (){
switch (menu){
case 1://play
Select(choice_S, choice_M); //!!HERE IS WHERE THE FUNCTION I WANT TO WORK IS CALLED
break;
case 2:
break;
case 3:
break;
//etc..
}
}
//function for navigating the menu
void mainMenu(){
int navigate = lcd.readButtons ();
if (playing==true){
choosing=false;
}else{
choosing=true;
}
if(choosing==true){
//if statement to navigate the menu
if (BUTTON_DOWN & navigate){
menu++;
displayMenu();
delay(200);
}
if (BUTTON_UP & navigate){
menu--;
displayMenu();
delay(200);
}
if (BUTTON_SELECT & navigate){
playing=true;
menuAction();
delay(200);
}
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.begin(16,2);
displayMenu();
choice=1;
choosing=true;
}
void loop() {
// put your main code here, to run repeatedly:
mainMenu();
}