求大佬们给个Arduino uno+RC522+舵机的门禁全教程-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3302|回复: 4

[未解决] 求大佬们给个Arduino uno+RC522+舵机的门禁全教程

[复制链接]
发表于 2021-6-11 01:39 | 显示全部楼层 |阅读模式
本人纯新小白,啥都不懂,简单点的代码还能稍微明白点意思
目前手上有个Arduino uno的板子,一个RC522的板子,一个MG90s的金属舵机,
求一个门禁的全教程就是包含接线方法,库,还有源码的
求求大佬们了
 楼主| 发表于 2021-6-11 01:40 | 显示全部楼层

#include"rfid.h"
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);
RFID rfid; //create a variable type of RFID
#define relayPin 8  //relay module attach to pin8
uchar serNum[5]; // array to store your ID

void setup()
{
  lcd.init(); //initialize lcd
  lcd.backlight(); //turn on the backlight
  Serial.begin(9600);
  rfid.begin(7, 5, 4, 3, 6, 2);//rfid.begin(IRQ_PIN,SCK_PIN,MOSI_PIN,MISO_PIN,NSS_PIN,RST_PIN)
  delay(100);
  rfid.init(); //initialize the RFID
  pinMode(relayPin, OUTPUT);  //set relayPin as OUTPUT
  digitalWrite(relayPin,HIGH); //and high level
  //Serial.begin(9600);
  lcd.setCursor(0,0);
  lcd.print("    Welcome!    "); //print"    Welcome!    "
  delay(2000);//delay 2s
}

void loop()
{
  uchar status;
  uchar str[MAX_LEN];
  status = rfid.request(PICC_REQIDL, str);
  if (status != MI_OK)
  {
    return;
  }
  
  rfid.showCardType(str);
  status = rfid.anticoll(str);
  
  if (status == MI_OK)
  {
    //Serial.print("The card's number is: ");
    lcd.setCursor(0,0);
    lcd.print(" ID: ");
    memcpy(serNum, str, 5);
    rfid.showCardID(serNum);//show the card ID
    // Serial.println();

    //1号大宝贝的卡
    // 显示你饭卡的card ID 8F3D0329
    uchar* id = serNum;
    if( id[0]==0xDA && id[1]==0x5C && id[2]==0x20 && id[3]==0x86 )
    {
      digitalWrite(relayPin,LOW);
      lcd.setCursor(0,1);
      lcd.print(" Hello dou ");
      delay(2000);
      lcd.clear();
      digitalWrite(relayPin,HIGH);
       }   
  else if( id[0]==0x8B && id[1]==0x95 && id[2]==0xC5 && id[3]==0x22 )
    {
      digitalWrite(relayPin,LOW);
      lcd.setCursor(0,1);
      lcd.print(" Hello Chen ");
      delay(2000);
      lcd.clear();
      digitalWrite(relayPin,HIGH);
    }

  
   else
    {
      //Serial.println("Hello unkown guy!");
      lcd.setCursor(0,1);
      lcd.print("Hello bye");
      delay(2000);
      lcd.clear();
    }
  }
  lcd.setCursor(0,0);
  lcd.print("    Welcome!    ");
  delay(2000);
  rfid.halt(); //command the card into sleep mode
}
 楼主| 发表于 2021-6-11 01:41 | 显示全部楼层
楼上这个是群里一个好友发我的,可以连上一个lcd的屏幕,我想去掉它,然后连接的5V的继电器,我也用不到,也想去掉,然后加上个舵机,哪个大佬会弄啊
发表于 2021-6-11 19:43 | 显示全部楼层
不急的话,下周二回复你,这几天放假,没时间
发表于 2021-6-15 18:55 | 显示全部楼层
#include "RC522.h"
#include <SPI.h>
#include <Servo.h>
unsigned char serNum[5];
Servo myservo;
void setup(){
  Serial.begin(9600);
  myservo.attach(9);
  SPI.begin();
  pinMode(chipSelectPin,OUTPUT);
  digitalWrite(chipSelectPin, LOW);
  pinMode(NRSTPD,OUTPUT);
  MFRC522_Init();        
  }

void loop(){
  unsigned char status;
  unsigned char str[MAX_LEN];
  status =MFRC522_Request(PICC_REQIDL,str);
  if (status ==MI_OK){
    status = MFRC522_Anticoll(str);
  }
  if (status==MI_OK){
    memcpy(serNum,str,5);
    Serial.print("ID:");
    ShowCardID(serNum);
    unsigned char* id =serNum;
    if(id[0]==0x90 && id[1]==0x71 && id[2]==0xF6 && id[3]==0x75 ){     //id地址根据自己的读写卡ID地址更改
      myservo.write(90);
      Serial.println("HELLO");
    }
    else {
      myservo.write(0);
      Serial.println("Stranger");
    }
  }
  MFRC522_Halt();
  delay(1000);
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 03:38 , Processed in 0.112944 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表