project:brmdoor:firmware
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
project:brmdoor:firmware [2011/02/02 12:36] – created stick | project: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. | ||
- | |||
- | < | ||
- | #include < | ||
- | |||
- | NewSoftSerial rfidSerial(2, | ||
- | 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 != ' | ||
- | 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); | ||
- | rfidSerial.print(MF_GET_SNR[i]); | ||
- | } | ||
- | } | ||
- | |||
- | int rfidParse(byte sn[], int *snl) | ||
- | { | ||
- | char bufp[128], *buf = bufp; | ||
- | int len = 0; | ||
- | |||
- | while (rfidSerial.available() > 0) { | ||
- | | ||
- | } | ||
- | |||
- | if (*buf++ != ' | ||
- | 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++ != ' | ||
- | return 0; | ||
- | } | ||
- | |||
- | void setup() | ||
- | { | ||
- | Serial.begin(9600); | ||
- | rfidSerial.begin(9600); | ||
- | digitalWrite(lockPin, | ||
- | pinMode(lockPin, | ||
- | rfidTrigger(); | ||
- | } | ||
- | |||
- | void loop() { | ||
- | if (rfidSerial.available()) { | ||
- | delay(50); | ||
- | byte sn[64]; int snl = 0; int ret; | ||
- | if ((ret = rfidParse(sn, | ||
- | int i; | ||
- | for (i = 0; i < snl; i++) { | ||
- | if (sn[i] < 0x10) Serial.print(' | ||
- | Serial.print(sn[i], | ||
- | } | ||
- | Serial.print(' | ||
- | delay(750); | ||
- | } else { | ||
- | // | ||
- | delay(250); | ||
- | } | ||
- | rfidTrigger(); | ||
- | } | ||
- | if (Serial.available()) { | ||
- | int seconds = getnum(); | ||
- | //if (seconds < 10) seconds = 10; | ||
- | digitalWrite(lockPin, | ||
- | delay(seconds * 1000); | ||
- | digitalWrite(lockPin, | ||
- | } | ||
- | } | ||
- | </ |
project/brmdoor/firmware.1296650217.txt.gz · Last modified: 2011/02/02 12:36 by stick