-1

私は学校のプロジェクトに取り組んでいます。基本的には、正しいコードが入力されたときに架空のゲートを開くロック システムを作成する必要があります。実際にシステムを構築する前に、システムをシミュレートするように依頼されました。そこで、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){

ところで、フランス語の言葉を許してください、私はフランス人です。また、言い忘れていましたが、# キーは入力されたコードをクリアする必要があります。説明、コードサンプル、またはリンクが役立ちます。ありがとうございました!

4

2 に答える 2