![](/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@1:1099d4500d8a, 2017-03-12 (annotated)
- Committer:
- bkim334
- Date:
- Sun Mar 12 00:39:38 2017 +0000
- Revision:
- 1:1099d4500d8a
- Parent:
- 0:2094aa9eeb53
- Child:
- 2:c61e6541a2b4
End of 3/ll put shit in main;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bkim334 | 0:2094aa9eeb53 | 1 | #include "mbed.h" |
bkim334 | 0:2094aa9eeb53 | 2 | #include "LSM9DS1.h" //Accelerometer |
bkim334 | 1:1099d4500d8a | 3 | #include "uLCD_4DGL.h" //LCD |
bkim334 | 1:1099d4500d8a | 4 | #include <mpr121.h> |
bkim334 | 1:1099d4500d8a | 5 | #include <string> |
bkim334 | 1:1099d4500d8a | 6 | #include <list> |
bkim334 | 0:2094aa9eeb53 | 7 | |
bkim334 | 0:2094aa9eeb53 | 8 | |
bkim334 | 0:2094aa9eeb53 | 9 | |
bkim334 | 1:1099d4500d8a | 10 | PwmOut motor(p22); //Motor |
bkim334 | 0:2094aa9eeb53 | 11 | |
bkim334 | 1:1099d4500d8a | 12 | uLCD_4DGL uLCD(p13, p14, p29); // serial tx, serial rx, reset pin; |
bkim334 | 0:2094aa9eeb53 | 13 | |
bkim334 | 1:1099d4500d8a | 14 | //Mutex LCDMutex; |
bkim334 | 0:2094aa9eeb53 | 15 | |
bkim334 | 1:1099d4500d8a | 16 | DigitalOut led1(LED1); |
bkim334 | 1:1099d4500d8a | 17 | DigitalOut led2(LED2); |
bkim334 | 1:1099d4500d8a | 18 | DigitalOut led3(LED3); |
bkim334 | 1:1099d4500d8a | 19 | DigitalOut led4(LED4); |
bkim334 | 1:1099d4500d8a | 20 | int passIndex = 0; |
bkim334 | 1:1099d4500d8a | 21 | int password[4] = {1, 32, 1024, 2048}; |
bkim334 | 1:1099d4500d8a | 22 | int attempt[4]; |
bkim334 | 0:2094aa9eeb53 | 23 | |
bkim334 | 1:1099d4500d8a | 24 | // Create the interrupt receiver object on pin 26 |
bkim334 | 1:1099d4500d8a | 25 | InterruptIn interrupt(p21); |
bkim334 | 0:2094aa9eeb53 | 26 | |
bkim334 | 1:1099d4500d8a | 27 | // Setup the i2c bus on pins 28 and 27 |
bkim334 | 1:1099d4500d8a | 28 | I2C i2c(p28, p27); |
bkim334 | 0:2094aa9eeb53 | 29 | |
bkim334 | 1:1099d4500d8a | 30 | // Setup the Mpr121: |
bkim334 | 1:1099d4500d8a | 31 | // constructor(i2c object, i2c address of the mpr121) |
bkim334 | 1:1099d4500d8a | 32 | Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); |
bkim334 | 0:2094aa9eeb53 | 33 | |
bkim334 | 0:2094aa9eeb53 | 34 | Serial pc(USBTX, USBRX); |
bkim334 | 0:2094aa9eeb53 | 35 | |
bkim334 | 0:2094aa9eeb53 | 36 | AnalogIn in(p20); //Proximity |
bkim334 | 0:2094aa9eeb53 | 37 | float voltage; |
bkim334 | 0:2094aa9eeb53 | 38 | |
bkim334 | 1:1099d4500d8a | 39 | void fallInterrupt() |
bkim334 | 1:1099d4500d8a | 40 | { |
bkim334 | 1:1099d4500d8a | 41 | pc.printf("Start interrupt"); |
bkim334 | 1:1099d4500d8a | 42 | int key_code=0; |
bkim334 | 1:1099d4500d8a | 43 | int i=0; |
bkim334 | 1:1099d4500d8a | 44 | int value=mpr121.read(0x00); |
bkim334 | 1:1099d4500d8a | 45 | value +=mpr121.read(0x01)<<8; |
bkim334 | 1:1099d4500d8a | 46 | // LED demo mod by J. Hamblen |
bkim334 | 1:1099d4500d8a | 47 | pc.printf("MPR value: %x \r\n", value); |
bkim334 | 1:1099d4500d8a | 48 | i=0; |
bkim334 | 1:1099d4500d8a | 49 | // puts key number out to LEDs for demo |
bkim334 | 1:1099d4500d8a | 50 | for (i=0; i<12; i++) { |
bkim334 | 1:1099d4500d8a | 51 | if (((value>>i)&0x01)==1) key_code=i+1; |
bkim334 | 1:1099d4500d8a | 52 | } |
bkim334 | 1:1099d4500d8a | 53 | |
bkim334 | 1:1099d4500d8a | 54 | bool correct = false; |
bkim334 | 1:1099d4500d8a | 55 | if (value !=0) { |
bkim334 | 1:1099d4500d8a | 56 | |
bkim334 | 1:1099d4500d8a | 57 | attempt[passIndex] = value; |
bkim334 | 1:1099d4500d8a | 58 | //uLCD.printf(" %d %x \n", passIndex, value); |
bkim334 | 1:1099d4500d8a | 59 | passIndex++; |
bkim334 | 1:1099d4500d8a | 60 | if (passIndex == 4) { |
bkim334 | 0:2094aa9eeb53 | 61 | |
bkim334 | 1:1099d4500d8a | 62 | if (attempt[0] == password[0] && attempt[1] == password[1] && attempt[2] == password[2] && attempt[3] == password[3]) { |
bkim334 | 1:1099d4500d8a | 63 | correct = true; |
bkim334 | 1:1099d4500d8a | 64 | pc.printf("Correct!"); |
bkim334 | 1:1099d4500d8a | 65 | } else { |
bkim334 | 1:1099d4500d8a | 66 | pc.printf("Incorrect. Try again"); |
bkim334 | 1:1099d4500d8a | 67 | } |
bkim334 | 1:1099d4500d8a | 68 | passIndex = 0; |
bkim334 | 1:1099d4500d8a | 69 | for (int k = 0; k < 4; k++) |
bkim334 | 1:1099d4500d8a | 70 | attempt[k] = NULL; |
bkim334 | 1:1099d4500d8a | 71 | } |
bkim334 | 1:1099d4500d8a | 72 | |
bkim334 | 1:1099d4500d8a | 73 | } |
bkim334 | 1:1099d4500d8a | 74 | if(correct) { |
bkim334 | 1:1099d4500d8a | 75 | motor.write(0.5); |
bkim334 | 1:1099d4500d8a | 76 | wait(1); |
bkim334 | 1:1099d4500d8a | 77 | motor.write(0); |
bkim334 | 1:1099d4500d8a | 78 | /*uLCD.cls(); |
bkim334 | 1:1099d4500d8a | 79 | uLCD.printf("Enjoy!"); |
bkim334 | 1:1099d4500d8a | 80 | wait(2.0); |
bkim334 | 1:1099d4500d8a | 81 | uLCD.cls(); |
bkim334 | 1:1099d4500d8a | 82 | wait(0.2); |
bkim334 | 1:1099d4500d8a | 83 | uLCD.printf("Enter code for candy\n");*/ |
bkim334 | 1:1099d4500d8a | 84 | |
bkim334 | 1:1099d4500d8a | 85 | } |
bkim334 | 1:1099d4500d8a | 86 | |
bkim334 | 1:1099d4500d8a | 87 | //uLCD.printf("number pressed is %d\n", key_code); |
bkim334 | 1:1099d4500d8a | 88 | led4=key_code & 0x01; |
bkim334 | 1:1099d4500d8a | 89 | led3=(key_code>>1) & 0x01; |
bkim334 | 1:1099d4500d8a | 90 | led2=(key_code>>2) & 0x01; |
bkim334 | 1:1099d4500d8a | 91 | led1=(key_code>>3) & 0x01; |
bkim334 | 1:1099d4500d8a | 92 | |
bkim334 | 1:1099d4500d8a | 93 | pc.printf("test4\n"); |
bkim334 | 1:1099d4500d8a | 94 | } |
bkim334 | 0:2094aa9eeb53 | 95 | |
bkim334 | 0:2094aa9eeb53 | 96 | int main() |
bkim334 | 0:2094aa9eeb53 | 97 | { |
bkim334 | 0:2094aa9eeb53 | 98 | |
bkim334 | 1:1099d4500d8a | 99 | LSM9DS1 IMU(p9, p10, 0xD6, 0x3C); |
bkim334 | 0:2094aa9eeb53 | 100 | IMU.begin(); |
bkim334 | 0:2094aa9eeb53 | 101 | if (!IMU.begin()) { |
bkim334 | 0:2094aa9eeb53 | 102 | pc.printf("Failed to communicate with LSM9DS1.\n"); |
bkim334 | 1:1099d4500d8a | 103 | } |
bkim334 | 1:1099d4500d8a | 104 | IMU.readGyro(); |
bkim334 | 1:1099d4500d8a | 105 | float xval = IMU.calcGyro(IMU.gx); |
bkim334 | 1:1099d4500d8a | 106 | float yval = IMU.calcGyro(IMU.gy); |
bkim334 | 1:1099d4500d8a | 107 | float zval = IMU.calcGyro(IMU.gz); |
bkim334 | 1:1099d4500d8a | 108 | |
bkim334 | 1:1099d4500d8a | 109 | |
bkim334 | 1:1099d4500d8a | 110 | uLCD.baudrate(3000000); //jack up baud rate to max for fast display |
bkim334 | 1:1099d4500d8a | 111 | interrupt.fall(&fallInterrupt); |
bkim334 | 1:1099d4500d8a | 112 | interrupt.mode(PullUp); |
bkim334 | 1:1099d4500d8a | 113 | |
bkim334 | 1:1099d4500d8a | 114 | uLCD.printf("Enter code for candy\n"); |
bkim334 | 0:2094aa9eeb53 | 115 | while(1) { |
bkim334 | 1:1099d4500d8a | 116 | //Checking if someone is skaing the machine |
bkim334 | 1:1099d4500d8a | 117 | while(!IMU.gyroAvailable()) |
bkim334 | 1:1099d4500d8a | 118 | IMU.readGyro(); |
bkim334 | 1:1099d4500d8a | 119 | if (abs(xval - IMU.calcGyro(IMU.gx)) > 10 || abs(yval - IMU.calcGyro(IMU.gy)) > 10 || abs(zval - IMU.calcGyro(IMU.gz)) > 10) { |
bkim334 | 1:1099d4500d8a | 120 | uLCD.printf("Don't shake the machine!\n"); |
bkim334 | 1:1099d4500d8a | 121 | wait(2.0); |
bkim334 | 1:1099d4500d8a | 122 | for (int i = 3; i > 0; i--) { |
bkim334 | 1:1099d4500d8a | 123 | uLCD.cls(); |
bkim334 | 1:1099d4500d8a | 124 | uLCD.printf("Machine stopped for: %d Second(s)", i); |
bkim334 | 1:1099d4500d8a | 125 | wait(1.0); |
bkim334 | 1:1099d4500d8a | 126 | } |
bkim334 | 1:1099d4500d8a | 127 | uLCD.cls(); |
bkim334 | 1:1099d4500d8a | 128 | uLCD.printf("Enter code for candy\n"); |
bkim334 | 1:1099d4500d8a | 129 | } |
bkim334 | 1:1099d4500d8a | 130 | IMU.readGyro(); |
bkim334 | 1:1099d4500d8a | 131 | xval = IMU.calcGyro(IMU.gx); |
bkim334 | 1:1099d4500d8a | 132 | yval = IMU.calcGyro(IMU.gy); |
bkim334 | 1:1099d4500d8a | 133 | zval = IMU.calcGyro(IMU.gz); |
bkim334 | 0:2094aa9eeb53 | 134 | } |
bkim334 | 0:2094aa9eeb53 | 135 | } |