私は学校のプロジェクトに取り組んでいます。基本的には、正しいコードが入力されたときに架空のゲートを開くロック システムを作成する必要があります。実際にシステムを構築する前に、システムをシミュレートするように依頼されました。そこで、Proteus( Labcenter Electronicsのシミュレーションソフト)で以下の回路を作りました。
申し訳ありませんが、画像を投稿できません。
私のシステムがすべきことは次のとおりです。変数には正しいコードが含まれており、ユーザーはキーパッドでコードを入力する必要があります。コードが正しい場合は、緑色の LED が点灯し、LCD 画面に「Acces Granted!」と表示されます。コードが間違っていると、画面に「アクセスが拒否されました!」と表示されます。これは基本的なシステムですが、できるだけシンプル/短くしようとしています (口頭で説明する必要があるため、シンプルであるほど良い)、何らかの理由でコードが機能しません。 . 理想的には、入力された各文字に対して 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 = "";
}
}
問題は、このコードをシミュレーション ソフトウェアで実行すると、LCD に「アクセスが拒否されました!」と表示されることです。そして赤いLEDが点灯。(キーパッドで) どのキーを押しても、何も起こりません。したがって、問題は、コードが直接 else ステートメントにジャンプし、入力されたパスワードが間違っていると推測することです (ただし、実際にはパスワードは入力されていません)。エラーはここにあると思います:
keyPressed = leDigicode.getKey();
enteredCode += String(keyPressed);
if(enteredCode.length() >= 5){
if(enteredCode == codeSerrure){
ところで、フランス語の言葉を許してください、私はフランス人です。また、言い忘れていましたが、# キーは入力されたコードをクリアする必要があります。説明、コードサンプル、またはリンクが役立ちます。ありがとうございました!