我正在做一个学校项目,基本上我必须创建一个锁定系统,当输入正确的代码时打开一个虚构的门。我们被要求在实际构建之前模拟我们的系统。因此,我在 Proteus(Labcenter Electronics 的仿真软件)中制作了以下电路: 键盘电路
抱歉,我不能发图片。
这是我的系统应该做的:一个变量包含正确的代码,用户必须在键盘上输入一个代码,如果正确,绿色 LED 会亮起,LCD 屏幕会显示“授予访问权限!” 如果密码错误,屏幕将显示“拒绝访问!”。这是一个基本系统,但我试图让它尽可能简单/简短(我必须在口头报告中解释它,所以越简单越好)并且由于某种原因,我无法让我的代码工作. 理想情况下,我想让 LCD 为每个键入的字符显示一个 *,就像在真正的安全系统上一样,但我也没有设法做到这一点。我已经为此工作了几个小时,尝试了不同的变体等等。但似乎没有什么能以我想要的方式工作。顺便提一句,我的电路工作得很好,因此我的代码的初始化部分也是正确的。谁能帮我弄清楚我的代码有什么问题以及如何使它变得更好?
到目前为止,这是我的代码:
#include <LiquidCrystal.h>
#include <Keypad.h>
//define LED pins
#define redLED 11
#define greenLED 10
String codeSerrure = "87362"; //correct code that opens the imaginative gate
String enteredCode = "";
int keyPressed;
const byte rows = 4;
const byte cols = 3;
char touches_digicode [rows] [cols] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins [rows] = {25, 26, 27, 28};
byte colPins [cols] = {24, 23, 22};
Keypad leDigicode = Keypad( makeKeymap(touches_digicode), rowPins, colPins, rows, cols);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup(){
lcd.begin(16, 2);
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
digitalWrite(redLED, HIGH);
}
void loop(){
lcd.setCursor(0,0);
lcd.print(" Entrez le code");
keyPressed = leDigicode.getKey();
enteredCode += String(keyPressed);
if(enteredCode.length() >= 5){
if(enteredCode == codeSerrure){
digitalWrite(greenLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Acces autorise!");
delay(4000);
digitalWrite(greenLED, LOW);
digitalWrite(redLED, HIGH);
enteredCode = "";
}
else{
digitalWrite(redLED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Acces refuse!");
delay(4000);
enteredCode = "";
}
}
if(keyPressed == "#"){
lcd.clear();
enteredCode = "";
}
}
问题是当我在模拟软件中运行这段代码时,液晶显示屏显示“访问拒绝!” 并且红色 LED 亮起。无论我按什么键(在键盘上),都没有任何反应。所以问题是我的代码直接跳转到 else 语句,推断输入的密码是错误的(尽管实际上没有输入密码)。我认为错误在这里:
keyPressed = leDigicode.getKey();
enteredCode += String(keyPressed);
if(enteredCode.length() >= 5){
if(enteredCode == codeSerrure){
顺便说一句,原谅法语的话,我是法国人。另外,我忘了说,# 键应该清除输入的代码。任何解释、代码示例或链接都会有所帮助。谢谢!