User Tools

Site Tools


project:brmdoor:firmware

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
project:brmdoor:firmware [2011/02/02 12:36] – created stickproject:brmdoor:firmware [2018/04/29 19:34] (current) – remove outdated page abyssal
Line 1: Line 1:
-===== Brmdoor Firmware ===== 
  
-This brmdoor.pde sketch is running on the Arduino. It listens for numbers specifying numbers of seconds to unlock the door for, and sends serial ids of rfid cards detected. 
- 
-<code> 
-#include <NewSoftSerial.h> 
- 
-NewSoftSerial rfidSerial(2, 3); 
-const int lockPin = 13; 
- 
-int getnum() 
-{ 
-  char cmdbuf[64]; char c; int i = 0; 
-  do { 
-    while (!Serial.available()) delay(1); 
-    c = Serial.read(); 
-    cmdbuf[i++] = c; 
-  } while (i < 64 && c != '\n'); 
-  return atoi(cmdbuf); 
-} 
- 
-void rfidTrigger(void) 
-{ 
-  byte MF_GET_SNR[] = {0xAA, 0x00, 0x03,0x25, 0x26, 0x00, 0x00,0xBB}; 
-  for (int i = 0; i < sizeof(MF_GET_SNR); i++) { 
-    rfidSerial.print(MF_GET_SNR[i]); 
-  } 
-} 
- 
-int rfidParse(byte sn[], int *snl) 
-{ 
-  char bufp[128], *buf = bufp; 
-  int len = 0; 
- 
-  while (rfidSerial.available() > 0) { 
-     buf[len++] = rfidSerial.read(); 
-  } 
- 
-  if (*buf++ != '\xaa') return 1; // STX 
-  buf++; // STATION ID 
-  byte datalen = *buf++; // DATA LENGTH 
-  if (datalen != len - 5) return 2; 
-  byte rstatus = *buf++; // STATUS 
-  if (rstatus != 0x00 && rstatus != 0xFF) { 
-    return 3; 
-  } else { 
-    memcpy(sn, buf, datalen - 1); 
-    *snl = datalen - 1; 
-  } 
-  buf += datalen - 1; 
-  buf++; // BCC; TODO: check 
-  if (*buf++ != '\xbb') return 4; // ETX 
-  return 0; 
-} 
- 
-void setup() 
-{ 
-  Serial.begin(9600); 
-  rfidSerial.begin(9600); 
-  digitalWrite(lockPin, 0); 
-  pinMode(lockPin, OUTPUT); 
-  rfidTrigger(); 
-} 
- 
-void loop() { 
-  if (rfidSerial.available()) {     
-      delay(50); 
-      byte sn[64]; int snl = 0; int ret; 
-      if ((ret = rfidParse(sn, &snl)) == 0) { 
-        int i; 
-        for (i = 0; i < snl; i++) { 
-          if (sn[i] < 0x10) Serial.print('0'); 
-          Serial.print(sn[i], HEX); 
-        } 
-        Serial.print('\n'); 
-        delay(750); 
-      } else { 
-        //Serial.println(ret, DEC); 
-        delay(250); 
-      } 
-      rfidTrigger(); 
-  } 
-  if (Serial.available()) { 
-      int seconds = getnum(); 
-      //if (seconds < 10) seconds = 10; 
-      digitalWrite(lockPin, 1); 
-      delay(seconds * 1000); 
-      digitalWrite(lockPin, 0); 
-  } 
-} 
-</code> 
project/brmdoor/firmware.1296650217.txt.gz · Last modified: 2011/02/02 12:36 by stick