c++ - 'updateMenu' 未在此范围内声明
问题描述
- 我从 youtube 引用这段代码,当我运行它时,updateMenu 被定义。但是当我改变它时,突然它没有定义
- 我从此链接获取代码https://www.youtube.com/watch?v=DuAG98P9Seo
- 实际只使用带按钮的液晶显示器,我想添加一个键盘来修改代码
- 正如可以看到的错误说
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int upButton = 10;
int downButton = 11;
int selectButton = 12;
int menu = 1;
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'#','0','*'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup() {
Serial.begin(9600);
lcd.begin();
lcd.backlight();
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
updateMenu();
}
void loop() {
char key = keypad.getKey();
if (key != No_Key){
Serial.print(key);
}
{
if (!digitalRead(downButton)){
menu++;
updateMenu();
delay(100);
while (!digitalRead(downButton));
}
if (!digitalRead(upButton)){
menu--;
updateMenu();
delay(100);
while(!digitalRead(upButton));
}
if (!digitalRead(selectButton)){
executeAction();
updateMenu();
delay(100);
while (!digitalRead(selectButton));
}
}
void updateMenu() {
switch (menu) {
case 0:
menu = 1;
break;
case 1:
lcd.clear();
lcd.print(">Find Existing File");
lcd.setCursor(0, 1);
lcd.print(" Select File");
break;
case 2:
lcd.clear();
lcd.print(">Custom Setting");
lcd.setCursor(0, 1);
lcd.print("Create/Delete File");
break;
case 3:
lcd.clear();
lcd.print(">MenuItem3");
lcd.setCursor(0, 1);
lcd.print(" MenuItem4");
break;
case 4:
lcd.clear();
lcd.print(" MenuItem3");
lcd.setCursor(0, 1);
lcd.print(">MenuItem4");
break;
case 5:
menu = 4;
break;
}
}
void executeAction() {
switch (menu) {
case 1:
action1();
break;
case 2:
action2();
break;
}
}
void action1() {
lcd.clear();
lcd.print(">Select File 0 to 99");
delay(1500);
}
void action2() {
lcd.clear();
lcd.print(">Create File");
delay(1500);
}
感谢您的帮助
解决方案
代替用法编译器不知道updateMenu()
函数,所以你应该通过简单的函数声明提前告诉他这个updateMenu()
函数。
为此,您需要放置以下行:
void updateMenu();
在定义setup()
函数之前:
...
void updateMenu();
void setup() {
Serial.begin(9600);
...
PS 默认情况下,CPP 程序员将函数声明(如果需要)放在代码顶部(就在行之后#include
)。
推荐阅读
- javascript - 如何设置 `insertOne` 函数以接受重复项?
- amp-html - 如何在 AMP 故事中进行自动页面转换?
- amazon-web-services - 在 aws 中使用相同的域名进行前端和后端部署
- python - 需要帮助才能使用 Twilio 进行通过 Linux 硬件(Raspberry pi/Toradex)发起的语音呼叫,并将其重定向到 Web 平台
- azure - Windows 机器文件复制 - DevOps 任务和 IP 地址
- angular - 在 Angular 7 中并排渲染相关记录
- python - 使用 Spyder 3.3 无法在 input() 中捕获 Ctrl+C
- c# - IBM Domino - 使用 IBM Domino LDAP 进行身份验证
- php - 如何在 PHP 正则表达式中解析 Facebook 事件中的 Ical 文件?
- php - Auth::login 不会持久化用户