极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11131|回复: 2

求助 F100讀取RFID

[复制链接]
发表于 2013-8-12 11:18:34 | 显示全部楼层 |阅读模式
本帖最后由 jasonqoo0622 于 2013-8-12 11:23 编辑

各位大家好

小弟最近在網路上面買了F100 RFID讀寫卡模組MFRC522(如下圖)




小弟使用的是Arduino Uno

並且想要試著使用這個讀寫卡模組讀取RFID的資料

我嘗試使用賣家給的程式碼並且依照網路上的資料去對腳位

可是在serial print卻都沒有反應

不知道是不是小弟腳位對應上有問題 或是賣家提供的程式碼有問題

想上來請教大家 謝謝~

http://wenku.baidu.com/view/64c10a10a300a6c30c229fb0?fr=prin
這是賣家提供的資訊


小弟連接腳位的方式是
   F100                 Arduino Uno
VCC3V3     <=>           3.3V
UART_RX   <=>     Digital Pin 1(TX)
UART_TX   <=>     Digital Pin 0(RX)
GND          <=>          GND

中間Pin1 Pin0相對應的TX RX我有交替換過去嘗試

以下是程式碼:

int led = 13;

void setup(){

  Serial.begin(9600);

  pinMode(led, OUTPUT);

}

char gBuffer[128];

int gIndex=0;


void readLine(){

  gIndex=0;

  while(true){

    int iAvailable = Serial.available();

    if(iAvailable > 0){

       for(int i=0; i<iAvailable; i++){

         gBuffer[gIndex] = Serial.read();

         gIndex++;

       }

       if(gBuffer[gIndex-1] == '\r'){

         return;
       }

    }

  }

}

void printBuffer(){

  for(int i=0; i<gIndex; i++){

    Serial.print(gBuffer);

  }
  //parse data here

}

boolean atPrint(){

  Serial.print("at+print\r");

  readLine();

  String response = gBuffer;

  if(response.indexOf("+print") != -1){

     printBuffer();  

     return true;

  }

  return false;

}

boolean atSet(){

  Serial.print("at+set block=04 number=01\r");

  readLine();

  String response = gBuffer;

  if(response.indexOf("+set") != -1){

     printBuffer();  

     return true;

  }

  return false;

}

boolean atQuery(){

  Serial.print("AT+QUERY\r");

  readLine();

  String response = gBuffer;

  if(response.indexOf("FAIL") != -1){

    return false;

  }

  if(response.indexOf("+query") != -1){

     printBuffer();  

     return true;

  }

  return false;

}

boolean atRead(){

  int iNumber = 1;

  Serial.print("AT+READ number=01\r");

  readLine();

  String response = gBuffer;

  if(response.indexOf("FAIL") != -1){

    return false;

  }

  if(response.indexOf("+read") == -1){

     return false;

  }

  printBuffer();

  //the read times depends on the read block number

  for(int i=0; i<iNumber; i++){

    readLine();

    response = gBuffer;

    if(response.indexOf("FAIL") != -1){

      return false;

    }

    if(response.indexOf("+read") == -1){

       return false;

    }

    printBuffer();

  }  
  
  return true;

}

boolean atWrite(){

  Serial.print("AT+WRITE data=12345678901234567890123456789012\r");

  readLine();

   String response = gBuffer;

  if(response.indexOf("FAIL") != -1){

    return false;

  }

  if(response.indexOf("+write") == -1){

     return false;

  }

  printBuffer();

  //read result

  readLine();

  response = gBuffer;

  if(response.indexOf("FAIL") != -1){

    return false;

  }

  if(response.indexOf("+write") == -1){

     return false;

  }

  printBuffer();

return true;

}

void blink(int num){

  for(int i=0; i<num; i++){

    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)

    delay(200);               // wait for a second

    digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW

    delay(200);              // wait for a second

  }

}

void loop(){

   blink(2);

   if(atPrint() == true){

     digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
   }else{

     digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW

   }
   
   delay(2000);

   blink(4);

   if(atSet() == true){

     digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)

   }else{

     digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW

   }

   delay(4000);

   blink(8);
   
   if(atQuery() == true){

     digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)

   }else{

     digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
   }

   delay(4000);

   blink(3);
   
   if(atRead() == true){

     digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)

   }else{

     digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW

   }

   delay(4000);

   blink(6);
   
   if(atWrite() == true)

   {

     digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)

   }else{

     digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW

   }

   delay(2000);
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-8-13 13:14:37 | 显示全部楼层
感應線圈有接上嗎?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-14 11:04:28 | 显示全部楼层
有接上 第一張圖的外圍部分 就是天線
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-5 08:29 , Processed in 0.036327 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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