Skittles Dispenser by Benjamin Kim and Alex Zdanov
Dependencies: 4DGL-uLCD-SE HC_SR04_Ultrasonic_Library LSM9DS1_Library_cal Servo mbed
Revision 0:2094aa9eeb53, committed 2017-03-11
- Comitter:
- bkim334
- Date:
- Sat Mar 11 21:40:03 2017 +0000
- Child:
- 1:1099d4500d8a
- Commit message:
- After trying the RFID;
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/4DGL-uLCD-SE.lib Sat Mar 11 21:40:03 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/4180_1/code/4DGL-uLCD-SE/#e39a44de229a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HC_SR04_Ultrasonic_Library.lib Sat Mar 11 21:40:03 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/ejteb/code/HC_SR04_Ultrasonic_Library/#e0f9c9fb4cf3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LSM9DS1_Library_cal.lib Sat Mar 11 21:40:03 2017 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/4180_1/code/LSM9DS1_Library_cal/#36abf8e18ade
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sat Mar 11 21:40:03 2017 +0000
@@ -0,0 +1,175 @@
+#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();
+
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sat Mar 11 21:40:03 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e1686b8d5b90 \ No newline at end of file