![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Skittles Dispenser by Benjamin Kim and Alex Zdanov
Dependencies: 4DGL-uLCD-SE HC_SR04_Ultrasonic_Library LSM9DS1_Library_cal Servo mbed
main.cpp
- Committer:
- bkim334
- Date:
- 2017-03-11
- Revision:
- 0:2094aa9eeb53
- Child:
- 1:1099d4500d8a
File content as of revision 0:2094aa9eeb53:
#include "mbed.h" #include "LSM9DS1.h" //Accelerometer #include "uLCD_4DGL.h" //LCD #define MAX_BITS 100 // max number of bits #define WEIGAND_WAIT_TIME 3000 // time to wait for another weigand pulse. int databits[MAX_BITS]; // stores all of the data bits int bitCount; // number of bits currently captured int flagDone; // goes low when data is currently being captured int weigand_counter; // countdown until we assume there are no more bits unsigned long facilityCode=0; // decoded facility code unsigned long cardCode=0; // decoded card code DigitalOut LED_GREEN(p15); DigitalIn dataIn(p10); DigitalIn Clock(p5); InterruptIn int0(p10); InterruptIn int1(p5); uLCD_4DGL uLCD(p28, p27, p29); // serial tx, serial rx, reset pin; DigitalOut myled(LED1); /*int LED_GREEN = 11; int LED_RED = 12; int BEEP_BEEP = 10;*/ // interrupt that happens when INTO goes low (0 bit) void ISR_INT0() { //uLCD.print("0"); // uncomment this line to display raw binary bitCount++; flagDone = 0; weigand_counter = WEIGAND_WAIT_TIME; } // interrupt that happens when INT1 goes low (1 bit) void ISR_INT1() { //uLCD.print("1"); // uncomment this line to display raw binary databits[bitCount] = 1; bitCount++; flagDone = 0; weigand_counter = WEIGAND_WAIT_TIME; } void setup() { LED_GREEN = 1; myled = 1; uLCD.printf("RFID Reader Setup"); int0.fall(&ISR_INT0); int1.fall(&ISR_INT1); /*pinMode(LED_RED, OUTPUT); pinMode(LED_GREEN, OUTPUT); pinMode(BEEP_BEEP, OUTPUT); digitalWrite(LED_RED, HIGH); // High = Off digitalWrite(BEEP_BEEP, HIGH); // High = off digitalWrite(LED_GREEN, LOW); // Low = On pinMode(2, INPUT); // DATA0 (INT0) pinMode(3, INPUT); // DATA1 (INT1) uLCD.begin(9600); uLCD.println("RFID Readers"); // binds the ISR functions to the falling edge of INTO and INT1 attachInterrupt(0, ISR_INT0, FALLING); attachInterrupt(1, ISR_INT1, FALLING); */ weigand_counter = WEIGAND_WAIT_TIME; } void printBits() { uLCD.printf("FC = "); uLCD.printf("%lu", facilityCode); uLCD.printf(", CC = "); uLCD.printf("%lu", cardCode); } void loop() { // This waits to make sure that there have been no more data pulses before processing data if (!flagDone) { if (--weigand_counter == 0) flagDone = 1; } // if we have bits and we the weigand counter went out if (bitCount > 0 && flagDone) { int i; uLCD.printf("Read "); uLCD.printf("%d", bitCount); uLCD.printf(" bits. "); if (bitCount == 35) { // 35 bit HID Corporate 1000 format // facility code = bits 2 to 14 for (i=2; i<14; i++) { facilityCode <<=1; facilityCode |= databits[i]; } // card code = bits 15 to 34 for (i=14; i<34; i++) { cardCode <<=1; cardCode |= databits[i]; } printBits(); } else if (bitCount == 26) { // standard 26 bit format // facility code = bits 2 to 9 for (i=1; i<9; i++) { facilityCode <<=1; facilityCode |= databits[i]; } // card code = bits 10 to 23 for (i=9; i<25; i++) { cardCode <<=1; cardCode |= databits[i]; } printBits(); } else { // you can add other formats if you want! // uLCD.println("Unable to decode."); } // cleanup and get ready for the next card bitCount = 0; facilityCode = 0; cardCode = 0; for (i=0; i<MAX_BITS; i++) { databits[i] = 0; } } } Serial pc(USBTX, USBRX); AnalogIn in(p20); //Proximity float voltage; int IDNum; int main() { uLCD.cls(); /*LSM9DS1 IMU(p9, p10, 0xD6, 0x3C); IMU.begin(); if (!IMU.begin()) { pc.printf("Failed to communicate with LSM9DS1.\n"); }*/ setup(); uLCD.printf("After Setup \n"); while(1) { loop(); } }