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-12
- Revision:
- 1:1099d4500d8a
- Parent:
- 0:2094aa9eeb53
- Child:
- 2:c61e6541a2b4
File content as of revision 1:1099d4500d8a:
#include "mbed.h" #include "LSM9DS1.h" //Accelerometer #include "uLCD_4DGL.h" //LCD #include <mpr121.h> #include <string> #include <list> PwmOut motor(p22); //Motor uLCD_4DGL uLCD(p13, p14, p29); // serial tx, serial rx, reset pin; //Mutex LCDMutex; DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); int passIndex = 0; int password[4] = {1, 32, 1024, 2048}; int attempt[4]; // Create the interrupt receiver object on pin 26 InterruptIn interrupt(p21); // Setup the i2c bus on pins 28 and 27 I2C i2c(p28, p27); // Setup the Mpr121: // constructor(i2c object, i2c address of the mpr121) Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); Serial pc(USBTX, USBRX); AnalogIn in(p20); //Proximity float voltage; void fallInterrupt() { pc.printf("Start interrupt"); int key_code=0; int i=0; int value=mpr121.read(0x00); value +=mpr121.read(0x01)<<8; // LED demo mod by J. Hamblen pc.printf("MPR value: %x \r\n", value); i=0; // puts key number out to LEDs for demo for (i=0; i<12; i++) { if (((value>>i)&0x01)==1) key_code=i+1; } bool correct = false; if (value !=0) { attempt[passIndex] = value; //uLCD.printf(" %d %x \n", passIndex, value); passIndex++; if (passIndex == 4) { if (attempt[0] == password[0] && attempt[1] == password[1] && attempt[2] == password[2] && attempt[3] == password[3]) { correct = true; pc.printf("Correct!"); } else { pc.printf("Incorrect. Try again"); } passIndex = 0; for (int k = 0; k < 4; k++) attempt[k] = NULL; } } if(correct) { motor.write(0.5); wait(1); motor.write(0); /*uLCD.cls(); uLCD.printf("Enjoy!"); wait(2.0); uLCD.cls(); wait(0.2); uLCD.printf("Enter code for candy\n");*/ } //uLCD.printf("number pressed is %d\n", key_code); led4=key_code & 0x01; led3=(key_code>>1) & 0x01; led2=(key_code>>2) & 0x01; led1=(key_code>>3) & 0x01; pc.printf("test4\n"); } int main() { LSM9DS1 IMU(p9, p10, 0xD6, 0x3C); IMU.begin(); if (!IMU.begin()) { pc.printf("Failed to communicate with LSM9DS1.\n"); } IMU.readGyro(); float xval = IMU.calcGyro(IMU.gx); float yval = IMU.calcGyro(IMU.gy); float zval = IMU.calcGyro(IMU.gz); uLCD.baudrate(3000000); //jack up baud rate to max for fast display interrupt.fall(&fallInterrupt); interrupt.mode(PullUp); uLCD.printf("Enter code for candy\n"); while(1) { //Checking if someone is skaing the machine while(!IMU.gyroAvailable()) IMU.readGyro(); if (abs(xval - IMU.calcGyro(IMU.gx)) > 10 || abs(yval - IMU.calcGyro(IMU.gy)) > 10 || abs(zval - IMU.calcGyro(IMU.gz)) > 10) { uLCD.printf("Don't shake the machine!\n"); wait(2.0); for (int i = 3; i > 0; i--) { uLCD.cls(); uLCD.printf("Machine stopped for: %d Second(s)", i); wait(1.0); } uLCD.cls(); uLCD.printf("Enter code for candy\n"); } IMU.readGyro(); xval = IMU.calcGyro(IMU.gx); yval = IMU.calcGyro(IMU.gy); zval = IMU.calcGyro(IMU.gz); } }