Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何降低ARDUINO和RFID mfrc522的功耗_Arduino_Rfid - Fatal编程技术网

如何降低ARDUINO和RFID mfrc522的功耗

如何降低ARDUINO和RFID mfrc522的功耗,arduino,rfid,Arduino,Rfid,我正在做一个项目,我扫描rfid卡,以进入一扇门。我已经使代码的方式,我希望它的功能,但目前它的绘图22mA。我希望这个项目是由一个4Ah铅酸电池供电 我已经从读卡器和arduino上移除了LED,以降低功耗。我还以1Mhz的频率运行arduino,这看起来大大降低了功耗。我还禁用了arduino的模拟转换器 IM使用arduino nano和RFID-RC522阅读器 输出为5伏继电器 代码如下: #include <SPI.h> #include <MFRC522.h>

我正在做一个项目,我扫描rfid卡,以进入一扇门。我已经使代码的方式,我希望它的功能,但目前它的绘图22mA。我希望这个项目是由一个4Ah铅酸电池供电

我已经从读卡器和arduino上移除了LED,以降低功耗。我还以1Mhz的频率运行arduino,这看起来大大降低了功耗。我还禁用了arduino的模拟转换器

IM使用arduino nano和RFID-RC522阅读器 输出为5伏继电器

代码如下:

#include <SPI.h>
#include <MFRC522.h>
#include <EEPROM.h>

#define SS_PIN 10
#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);

#define relay 4
#define led 2
#define button 5


byte readCard[4];
byte storeCard[4];
byte lastCard[4] = {1,2,3,4};
uint8_t successread = 0;
int flag=0;

void setup() {

CLKPR = 0x80;
CLKPR = 0x04;
ADCSRA = 0;
pinMode(relay, OUTPUT);
pinMode(button, INPUT_PULLUP);
pinMode(led, OUTPUT);
digitalWrite(relay, LOW);
digitalWrite(led, LOW);
SPI.begin();
mfrc522.PCD_Init();
}

void loop() {
  do {
    successread = getID();
  }
  while(!successread);
  digitalWrite(led, HIGH);
  delayMicroseconds(100);
  digitalWrite(led, LOW);
  lastcard();
  if(digitalRead(button)==LOW){
     save_delCard();
  }

  if(checkID(readCard) && !(digitalRead(button)==LOW)){
    if(flag==0){
       digitalWrite(relay, HIGH);
       flag = !flag;
    }
  else{
    digitalWrite(relay, LOW);
    flag = !flag;
  }
 }
}
/////////READ CARD FROM READER/////////////////
uint8_t getID(){
 if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID 
    reader continue
    return 0;
 }
 if ( ! mfrc522.PICC_ReadCardSerial()) {   //Since a PICC placed get 
   Serial and continue
   return 0;
 }
  for (uint8_t i=0; i<4; i++){
    readCard[i] = mfrc522.uid.uidByte[i];
 }
 mfrc522.PICC_HaltA(); // stop reading
 return 1;
}
///////////////////SAVE OR DELETE CARD/////////////////////////
uint8_t save_delCard(){
  uint8_t count = EEPROM.read(0);
  int start = (count*4) + 1;
  int num = count*4 +1;
  if(checkID(readCard)){

     uint8_t slot = slotcheck(readCard);
     for(uint8_t m=0;m<4;m++){
         EEPROM.write((num-m-1),0); 
     }
     for(uint8_t k=0;k<4;k++){
         EEPROM.write((((slot-1)*4)+1+k),lastCard[k]);
     }

       count--;
     }
     else{
     count++;
   }


  for(uint8_t j=0; j<4;j++){
    EEPROM.write(j + start, readCard[j]);
  }

  EEPROM.write(0,count);
  return 0;
  }
////////////////////READ FROM MEMORY//////////////////////////////////
uint8_t readID(uint8_t number){
  uint8_t start = (number*4) + 1;
  for(uint8_t j=0;j<4;j++){
    storeCard[j] = EEPROM.read(start + j);
  }
}
///////////////////COMPARE IDS///////////////////////////////
bool compare(byte arraya[],byte arrayb[]){
  for(uint8_t i=0;i<4;i++){
    if(arraya[i]!=arrayb[i]){
      return false;
    }
    else{
      return true;
    }
  }
}
/////////CHECK IF CARD IS IN MEMORY/////////////////////////////////////
bool checkID(byte arraya[]){
  uint8_t count = EEPROM.read(0);
  for(int i=0;i<count;i++){
    readID(i);
    if(compare(arraya, storeCard)){
      return true;
    }
    else {

    }
  }
  return false;
}
////////////////FINDS WHERE CARD IS IN MEMORY//////////////////
uint8_t slotcheck(byte arraya[]){
  uint8_t count = EEPROM.read(0);
  uint8_t slot=0;
  for(int i=0;i<count;i++){
    readID(i);
    slot = i+1;
    if(compare(arraya, storeCard)){
      return slot;
    }
    else {

    }
  }
  return NULL;
}
///////////////SAVES LAST CARD/////////////////////

void lastcard(){
  uint8_t count = EEPROM.read(0);
  for(uint8_t p=0;p<4;p++){

    lastCard[p] = EEPROM.read((count*4)-3+p);
  }
}
//////////////////////////////////////////////////////////////////
#包括
#包括
#包括
#定义SS_引脚10
#定义RST_引脚9
MFRC522 MFRC522(不锈钢插脚、RST插脚);
#定义继电器4
#定义led 2
#定义按钮5
字节读卡[4];
字节存储卡[4];
字节lastCard[4]={1,2,3,4};
uint8_t successread=0;
int标志=0;
无效设置(){
CLKPR=0x80;
CLKPR=0x04;
ADCSRA=0;
pinMode(继电器、输出);
pinMode(按钮、输入\上拉);
引脚模式(led,输出);
数字写入(继电器,低电平);
数字写入(led,低电平);
SPI.begin();
mfrc522.PCD_Init();
}
void循环(){
做{
successread=getID();
}
而(!successread);
数字写入(led,高电平);
延迟微秒(100);
数字写入(led,低电平);
lastcard();
如果(数字读取(按钮)=低){
保存卡片();
}
如果(检查ID(读卡)和&!(数字读取(按钮)=低){
如果(标志==0){
数字写入(继电器,高);
flag=!flag;
}
否则{
数字写入(继电器,低电平);
flag=!flag;
}
}
}
/////////从读卡器读卡/////////////////
uint8_t getID(){
如果(!mfrc522.PICC_IsNewCardPresent()){//如果将新PICC放置到RFID
读者继续
返回0;
}
如果(!mfrc522.PICC_ReadCardSerial()){//自PICC放置get
连载并继续
返回0;
}
对于(uint8_t i=0;i