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