Задать вопрос
@EternalEnvy

В чем ошибка кода?

Здравствуйте, дело вот в чем, хотелось бы сделать замок с двойной защитой (rfid карта и проверка пароля).
В программировании не силен и не могу понять в чем ошибка. Уже перепробовал кучу разных вариантов кода. Остановился на этом "быдло-коде".

Сделал так, что бы ввод пароля или проверка метки производились в любой момент, а потом отдельно проверялись, но ничего не выводится после правильного ввода пароля.

#include <Keypad.h>
#include <Servo.h>
#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
#define SS_PIN 10
#define RST_PIN 9



int tar; //переменная для перебора
char* password = "147923"; //пароль
const byte ROWS = 4; //кол-во строк у клавы
const byte COLS = 4; // кол-во столбцов
char keys [ROWS] [COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
int klavishi; //для проверки пароля
int karta; //для проверки карты
byte rowPins[ROWS] = {16,17,18,19}; //куда подкл
byte colPins[COLS] = {7,6,5,4};
// создаем клаву
Keypad klava = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);

MFRC522 metka(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате



void setup() {
 Serial.begin(9600);
 while (!Serial);
 SPI.begin(); 
 metka.PCD_Init();   
 Serial.println("Please enter password");
 karta = 0;
 klavishi = 0;
 tar = 0;
}

void loop() {
  //ввод пароля 
  char key = klava.getKey();
  if (key){
  Serial.print('*');
  if (key == password[tar]){
    tar ++;
     if (tar == 6){
   klavishi = 1; //если пароль правильный
   
   }
  }
 }
{
  //проверка метки
  
  if ( ! metka.PICC_IsNewCardPresent() || ! metka.PICC_ReadCardSerial() ){
    return;
  }
}
  int x=0;
  uidDec = 0;
  // Выдача серийного номера метки.
  for (byte i = 0; i < metka.uid.size; i++)
  {
    uidDecTemp = metka.uid.uidByte[i];
    uidDec = uidDec * 256 + uidDecTemp;
  }
  if (uidDec == 2868417909){
    karta = 1;
  }
}

//совмещение метки и пароля
void sborka(){
  if (klavishi == 1){
    Serial.println(" correct password");
    Serial.println("insert card");
    if (karta == 1) {
      Serial.println(" dostup razreshen");
      delay (10000);
      karta = 0;
      klavishi = 0;
      tar = 0;
      Serial.println("Please enter password");
    }
  }
}
  • Вопрос задан
  • 212 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg Куратор тега Arduino
Любые ответы на любые вопросы
Начнем с того, что переменная tar у вас не сбрасывается в 0 после набора шести символов. А надо бы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы