Skittles Dispenser by Benjamin Kim and Alex Zdanov

Dependencies:   4DGL-uLCD-SE HC_SR04_Ultrasonic_Library LSM9DS1_Library_cal Servo mbed

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?

UserRevisionLine numberNew 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 }