arduino 用522开锁代码 没注释 掉电保存

int a=2;
int s=3;
int addr = 0;

int v0=0;
int v1=0;
int v2=0;
int v3=0;
#include <SPI.h>
#include <Servo.h>
#include <MFRC522.h>
#include <EEPROM.h>
#define SS_PIN 10
#define RST_PIN 9
 Servo myservo;  
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class

MFRC522::MIFARE_Key key; 

// Init array that will store new NUID 
byte nuidPICC[4];

void setup() { 
  Serial.begin(9600);
  pinMode(a,INPUT_PULLUP);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522 
myservo.attach(3);
  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
    
  }
v0=EEPROM.read(addr);
    v1=EEPROM.read(addr+1);
    v2=EEPROM.read(addr+2);
    v3=EEPROM.read(addr+3);
    Serial.print(v0);
    Serial.print(v1);
    Serial.print(v2);
    Serial.print(v3);
  Serial.println(F("This code scan the MIFARE Classsic NUID."));
  Serial.print(F("Using the following key:"));
  printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
 
void loop() {

  if ( ! rfid.PICC_IsNewCardPresent())
    return;
  if ( ! rfid.PICC_ReadCardSerial())
    return;

  Serial.print(F("PICC type: "));
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
  Serial.println(rfid.PICC_GetTypeName(piccType));

  // Check is the PICC of Classic MIFARE type
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&  
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println(F("Your tag is not of type MIFARE Classic."));
    return;
  }
  
  if(digitalRead(a)==LOW){
    delay(15);
    if(digitalRead(a)==LOW){
      EEPROM.write(addr,rfid.uid.uidByte[0]);
      EEPROM.write(addr+1,rfid.uid.uidByte[1]);
      EEPROM.write(addr+2,rfid.uid.uidByte[2]);
      EEPROM.write(addr+3,rfid.uid.uidByte[3]);
      Serial.println("write OK!");
    
      }}
      


 // Store NUID into nuidPICC array
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
   
    Serial.println(F("The NUID tag is:"));
    Serial.print(F("In hex: "));
  //  printHex(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
    Serial.print(F("In dec: "));
    printDec(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
  if (rfid.uid.uidByte[0] == v0 &&
    rfid.uid.uidByte[1] == v1 &&
    rfid.uid.uidByte[2] ==v2 &&
    rfid.uid.uidByte[3] == v3 ) {
    Serial.println(F("OK  KAISUO  CHENGGONG! **********."));
       myservo.write(90);                  // sets the servo position according to the scaled value
       delay(1200); 
        myservo.write(0); 
  }
  else Serial.println(F("key budui !!!!!!"));

  // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
}


void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}


void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], DEC);
  }
}

 

 

 

下面的加入串口 只把板子当下位机 发送串口给wifi板子

定时长传 off状态还没写好 

int a=0;
int s=16;
int addr = 400;
#include <ESP8266WiFi.h>
#define EEPROM_SIZE 512//EEPROM 大小
#include <ESP8266AVRISP.h>
int v0=0;
int v1=0;
int v2=0;
int v3=0;
#include <SPI.h>

#include <MFRC522.h>
#include <EEPROM.h>
#define SS_PIN 4
#define RST_PIN 10
boolean off=true;
String statu = "on";
String uid = "";
#define offj 16

 
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class

MFRC522::MIFARE_Key key; 

// Init array that will store new NUID 
byte nuidPICC[4];
void Init_EEPROM()                                   //初始化EEPROM size
{
  EEPROM.begin(EEPROM_SIZE);//初始化EEPROM
}
void setup() { 
  Serial.begin(9600);
  Init_EEPROM();
  pinMode(a,INPUT_PULLUP);
  pinMode(offj,INPUT_PULLUP);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522 

  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
    
  }
v0=EEPROM.read(addr);
    v1=EEPROM.read(addr+1);
    v2=EEPROM.read(addr+2);
    v3=EEPROM.read(addr+3);
    Serial.print(v0);
    Serial.print(v1);
    Serial.print(v2);
    Serial.print(v3);

  printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
 
void loop() {
 //Serial.println((String)"{\"statu\":\"write\",\"uid\":" + rfid.uid.uidByte[0]+ rfid.uid.uidByte[1]+ rfid.uid.uidByte[2]+ rfid.uid.uidByte[3] + "}");
  if ( ! rfid.PICC_IsNewCardPresent())
    return;
  if ( ! rfid.PICC_ReadCardSerial())
    return;

  Serial.print(F("PICC type: "));
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
  Serial.println(rfid.PICC_GetTypeName(piccType));

  // Check is the PICC of Classic MIFARE type
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&  
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println(F("Your tag is not of type MIFARE Classic."));
    return;
  }
  
  if(digitalRead(a)==LOW){
    delay(15);
    if(digitalRead(a)==LOW){Serial.println("write ......");
      EEPROM.write(addr,rfid.uid.uidByte[0]); 
      EEPROM.write(addr+1,rfid.uid.uidByte[1]); 
      EEPROM.write(addr+2,rfid.uid.uidByte[2]); 
      EEPROM.write(addr+3,rfid.uid.uidByte[3]);
      EEPROM.commit();
      Serial.println((String)"{\"statu\":\"write\",\"uid\":" + rfid.uid.uidByte[0]+ rfid.uid.uidByte[1]+ rfid.uid.uidByte[2]+ rfid.uid.uidByte[3] + "}");
      
      }}
      


 // Store NUID into nuidPICC array
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
   
    Serial.println(F("The NUID tag is:"));
    Serial.print(F("In hex: "));
  //  printHex(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
    Serial.print(F("In dec: "));
    printDec(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
  if (rfid.uid.uidByte[0] == v0 &&
    rfid.uid.uidByte[1] == v1 &&
    rfid.uid.uidByte[2] ==v2 &&
    rfid.uid.uidByte[3] == v3 ) {
    Serial.println((String)"{\"statu\":\"on\",\"uid\":" + rfid.uid.uidByte[0]+ rfid.uid.uidByte[1]+ rfid.uid.uidByte[2]+ rfid.uid.uidByte[3] + "}");
           
  
  }
  else Serial.println(F("key budui !!!!!!"));

  // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();

 //如果状态改变就执行
 off_statu();
 delay(1000);
}
void off_statu()
{
    if(digitalRead(offj)==LOW)
    {
      Serial.println((String)"{\"statu\":\"statu\",\"off\":"+"0"+"}");
      }
     else
     Serial.println((String)"{\"statu\":\"statu\",\"off\":"+"1"+"}");
}

void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}


void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], DEC);
  }
}

 

转载于:https://www.cnblogs.com/xiaohe520/articles/7434685.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个简单的Arduino控制步进电机的代码示例: ```c++ #include <Stepper.h> // 定义步进电机的引脚 #define STEPPER_PIN_1 #define STEPPER_PIN_2 9 #definePPER_PIN_3 10 #define STEPPER_PIN_4 11 // 定义步进电机的步数和转速 const int STEPS_PER_REVOLUTION = 2048; const int STEPPER_SPEED = 30; // 创建步进电机对象 Stepper stepper(STEPS_PER_REVOLUTION, STEPPER_PIN_1, STEPPER_PIN_3, STEPPER_PIN_2, STEPPER_PIN_4); void setup() { // 设置步进电机转速 stepper.setSpeed(STEPPER_SPEED); } void loop() { // 顺时针旋转一个完整的圆 stepper.step(STEPS_PER_REVOLUTION); // 延迟2秒 delay(2000); // 逆时针旋转半个圆 stepper.step(-STEPS_PER_REVOLUTION/2); // 延迟2秒 delay(2000); } ``` 这个例子使用了Arduino的Stepper库,通过定义步进电机的引脚、步数和转速,创建Stepper对象,并在循环中控制步进电机旋转。你可以根据你所使用的步进电机的型号和需要,修改代码中的参数。 ### 回答2: Arduino是一种开源的硬件平台,可以通过编写代码控制各种外部设备。步进电机是一种特殊的电机,可以根据控制信号以步进的方式旋转。下面是一个简单的Arduino控制步进电机的示例代码: 首先,我们需要准备一个步进电机和一个驱动模块。将步进电机连接到驱动模块上,并将驱动模块连接到Arduino的数字引脚上(通常是两个引脚)。 接下来,我们需要在Arduino代码中引入步进电机的库,通过这个库来控制步进电机。我们可以在Arduino的官方网站上找到这个库(Stepper.h),并将其导入到我们的代码中。 然后,我们需要定义步进电机的引脚连接。通过调用Stepper库中的Stepper函数,我们可以指定步进电机的引脚连接方式和其他参数。例如,我们可以指定步进电机是否是双相还是四相驱动,以及每个步进的角度等。 接下来,我们可以使用Stepper库中的函数来控制步进电机的运动。例如,我们可以使用函数stepper.setSpeed来设置步进电机的旋转速度,使用函数stepper.step来控制步进电机向指定方向移动指定的步数。 最后,在Arduino的循环函数中,我们可以根据需要不断调用步进电机的控制函数,从而可以实现步进电机的连续运动。 需要注意的是,具体的步进电机控制代码可能会因步进电机的型号和驱动模块的不同而有所差异。在实际开发中,我们需要了解具体步进电机和驱动模块的规格和控制方式,然后根据需要来编写相应的代码。 ### 回答3: Arduino控制步进电机的代码如下: 步进电机需要驱动器来控制,常用的驱动器有A4988和DRV8825。首先需要将驱动器与Arduino连接好,将步进电机的步进和方向端口连接到驱动器的对应引脚。然后,在Arduino中编写代码来控制步进电机。 首先,需要引入步进电机库: #include <Stepper.h> 然后,定义步进电机的引脚: #define motorSteps 200 // 步进电机每转一圈的步数 #define motorPin1 2 // 步进电机引脚1连接到Arduino的引脚2 #define motorPin2 3 // 步进电机引脚2连接到Arduino的引脚3 #define motorPin3 4 // 步进电机引脚3连接到Arduino的引脚4 #define motorPin4 5 // 步进电机引脚4连接到Arduino的引脚5 创建一个步进电机对象: Stepper myStepper(motorSteps, motorPin1, motorPin3, motorPin2, motorPin4); 设置步进电机的速度和方向: myStepper.setSpeed(500); // 设置步进电机的速度,单位是步/秒 myStepper.step(100); // 步进电机顺时针旋转100步 在循环中不断控制步进电机运动: void loop() { myStepper.step(100); // 每次循环步进电机顺时针旋转100步 delay(500); // 延时500毫秒 myStepper.step(-100); // 每次循环步进电机逆时针旋转100步 delay(500); // 延时500毫秒 } 这是一个简单的步进电机控制代码示例,可以根据需求进行调整和优化。记得使用正确的引脚连接和步进电机驱动器,同时根据具体步进电机的规格和要求进行设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值