简易门禁编程代码是什么

worktile 其他 13

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    简易门禁编程代码通常是使用基于Arduino或树莓派等开源硬件平台和C/C++等编程语言编写的。下面是一个示例代码,实现了一个简单的门禁系统:

    #include <Keypad.h>
    #include <Servo.h>
    
    // 定义密码
    char password[4] = {'1', '2', '3', '4'};
    char enteredPassword[4];
    int passwordIndex = 0;
    
    // 定义按键矩阵
    const byte ROW_NUM = 4; // 按键行数
    const byte COLUMN_NUM = 4; // 按键列数
    
    char keys[ROW_NUM][COLUMN_NUM] = {
      {'1', '2', '3', 'A'},
      {'4', '5', '6', 'B'},
      {'7', '8', '9', 'C'},
      {'*', '0', '#', 'D'}
    };
    
    byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; // 按键行引脚
    byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; // 按键列引脚
    
    Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
    
    // 定义舵机
    Servo servo;
    int servoPin = 10;
    
    void setup() {
      Serial.begin(9600);
      servo.attach(servoPin);
      servo.write(0); // 设置舵机初始位置为关闭状态
    }
    
    void loop() {
      char key = keypad.getKey(); // 获取当前按下的按键
      if (key) {
        if (key == '#') {
          // 输入完整密码,验证密码是否正确
          if (checkPassword()) {
            // 密码正确,开启门
            openDoor();
          }
          else {
            // 密码错误,错误提示
            Serial.println("Invalid password!");
          }
          // 重置输入的密码
          resetEnteredPassword();
        }
        else {
          // 输入密码
          enteredPassword[passwordIndex] = key;
          passwordIndex++;
          if (passwordIndex >= 4) {
            // 已经输入4位密码,验证密码是否正确
            if (checkPassword()) {
              // 密码正确,开启门
              openDoor();
            }
            else {
              // 密码错误,错误提示
              Serial.println("Invalid password!");
            }
            // 重置输入的密码
            resetEnteredPassword();
          }
        }
      }
    }
    
    // 验证密码是否正确
    bool checkPassword() {
      for (int i = 0; i < 4; i++) {
        if (enteredPassword[i] != password[i]) {
          return false;
        }
      }
      return true;
    }
    
    // 打开门
    void openDoor() {
      servo.write(90); // 门锁舵机旋转到打开的位置
      delay(2000); // 延迟2秒钟保持门打开状态
      servo.write(0); // 门锁舵机旋转到关闭的位置
    }
    
    // 重置输入的密码
    void resetEnteredPassword() {
      for (int i = 0; i < 4; i++) {
        enteredPassword[i] = ' '; // 清空输入的密码
      }
      passwordIndex = 0; // 重置密码索引
    }
    

    以上代码实现了一个简单的门禁系统,使用4×4的按键矩阵作为密码输入界面,通过舵机控制门锁的打开和关闭。用户输入正确的密码后,舵机会旋转到打开的位置打开门,保持2秒钟后再关闭。如果输入错误的密码,则会提示密码错误。这只是一个简单的示例代码,实际的门禁系统可以根据需求进行修改和扩展。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    简易门禁编程代码是指用于控制门禁系统的代码,通常用于对门禁设备进行控制和管理,比如开门权限的设置、刷卡记录的查询等功能。下面是一个简单的门禁编程代码示例:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    // 定义用户结构体
    typedef struct {
        char username[20];  // 用户名
        char card_id[20];   // 卡片ID
        time_t access_time; // 门禁刷卡时间
    } User;
    
    // 定义用户数组
    User users[100];
    int user_count = 0;
    
    // 添加用户
    void add_user(const char* username, const char* card_id) {
        strcpy(users[user_count].username, username);
        strcpy(users[user_count].card_id, card_id);
        users[user_count].access_time = time(NULL);
        user_count++;
    }
    
    // 根据卡片ID查找用户
    User* find_user(const char* card_id) {
        for (int i = 0; i < user_count; i++) {
            if (strcmp(users[i].card_id, card_id) == 0) {
                return &users[i];
            }
        }
        return NULL;
    }
    
    // 刷卡验证
    void card_swipe(const char* card_id) {
        User* user = find_user(card_id);
        if (user != NULL) {
            printf("用户:%s\n", user->username);
            printf("刷卡时间:%s", ctime(&(user->access_time)));
            printf("验证通过,门已开启。\n");
        } else {
            printf("验证失败,无此用户。\n");
        }
    }
    
    // 主函数
    int main() {
        // 添加测试用户
        add_user("张三", "123456");
        add_user("李四", "654321");
    
        // 模拟刷卡
        card_swipe("123456");
        card_swipe("654321");
        card_swipe("777777");
    
        return 0;
    }
    

    这个示例代码使用C语言实现了一个简单的门禁系统,具有添加用户、刷卡验证等功能。用户信息保存在一个用户数组中,通过刷卡时输入的卡片ID来查找对应的用户,并进行验证。符合条件的用户会被识别为通过验证,门禁系统会打印出相应的用户信息,并开启门禁。如果输入的卡片ID没有找到对应的用户,则验证失败,门禁系统打印出相应的提示。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    简易门禁系统可以使用Arduino等开发板来实现,以下是一个简单的门禁编程代码示例。

    #include <Keypad.h>
    #include <LiquidCrystal_I2C.h>
    
    #define ROW_NUM 4      // 行数
    #define COLUMN_NUM 4   // 列数
    
    char keys[ROW_NUM][COLUMN_NUM] = {
      {'1','2','3','A'},
      {'4','5','6','B'},
      {'7','8','9','C'},
      {'*','0','#','D'}
    };
    
    byte pin_rows[ROW_NUM] = {9, 8, 7, 6};         // 连接行脚的引脚
    byte pin_column[COLUMN_NUM] = {5, 4, 3, 2};    // 连接列脚的引脚
    
    Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
    LiquidCrystal_I2C lcd(0x27, 16, 2);            // I2C LCD屏幕
    
    const char* accessCode = "1234";               // 门禁密码
    
    void setup() {
      lcd.begin(16, 2);                            // 初始化LCD
      lcd.backlight();                             // 打开背光
      lcd.print("Enter access code");               // LCD显示文字
    }
    
    String getInput() {
      String inputCode = "";
      
      while (true) {
        char key = keypad.getKey();
        
        if (key) {
          if (key == '#') {
            return inputCode;
          } else if (key == '*') {
            inputCode = "";
            lcd.clear();
            lcd.print("Enter access code");
          } else {
            inputCode += key;
          }
        }
      }
    }
    
    void showResult(bool accessGranted) {
      lcd.clear();
      
      if (accessGranted) {
        lcd.print("Access Granted");
      } else {
        lcd.print("Access Denied");
      }
      
      delay(2000);
      lcd.clear();
      lcd.print("Enter access code");
    }
    
    void loop() {
      String inputCode = getInput();
      
      if (inputCode == accessCode) {
        showResult(true);
      } else {
        showResult(false);
      }
    }
    

    这段代码使用了Keypad库来读取按键输入,LiquidCrystal_I2C库来控制I2C LCD屏幕显示。先定义了按键矩阵的布局和引脚连接,然后在setup()函数中初始化LCD并显示提示文字。

    然后在getInput()函数中循环检测按键输入,每次按键结束后判断是否输入结束,如果按下了"#"键则返回输入的密码字符串,如果按下了"*"键则清空输入并重新显示提示文字,其他按键则将按键值添加到输入密码字符串中。

    接下来,在showResult()函数中根据传入的参数(是否授权)显示不同的信息在LCD屏幕上。

    最后,在loop()函数中循环调用getInput()函数获取输入的密码,并与预设的密码比较,如果相等则调用showResult()函数显示授权信息,否则显示拒绝信息。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部