![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
xszdx
Dependencies: mbed TCS3472_I2C MCP23017 VL6180 DebounceIn WattBob_TextLCD
main_copy.cpp
- Committer:
- sephora12680
- Date:
- 2020-03-03
- Revision:
- 0:171d347f33f7
- Child:
- 1:ad7134c4e365
File content as of revision 0:171d347f33f7:
#include "mbed.h" #include "DebounceIn.h" #include "stdint.h" #include "MCP23017.h" #include "WattBob_TextLCD.h" #include "VL6180.h" //Hyperterminal configuration //9600 bauds, 8-bit data, no parity //VL6180X defines #define IDENTIFICATIONMODEL_ID 0x0000 Serial PC(USBTX, USBRX); VL6180 TOF_sensor(p28, p27); DigitalOut myled(LED1); #define BACK_LIGHT_ON(INTERFACE) INTERFACE->write_bit(1,BL_BIT) #define BACK_LIGHT_OFF(INTERFACE) INTERFACE->write_bit(0,BL_BIT) MCP23017 *par_port; WattBob_TextLCD *lcd; DigitalOut myled1 (p12); DigitalOut myled2 (p13); DigitalOut myled3 (p14); DigitalOut myled4 (p15); DebounceIn pb1(p8); DebounceIn pb2(p9); DebounceIn pb3(p10); DebounceIn pb4(p11); int old_pb1 = 0, old_pb2 = 0, old_pb3 = 0, old_pb4 = 0; int new_pb1, new_pb2, new_pb3, new_pb4; int i = 0, j, row, led; int order[10][4]; int levelreset, tries, level = 1; float delay; uint8_t dist; /*int order[4][4] = {1,2,3,4, 4,3,2,1, 3,2,1,4, 2,1,3,4};*/ void level1(); void reset(); void light(int,int); int Dist() { lcd->cls(); lcd->locate(0,0); dist = TOF_sensor.getDistance(); lcd->printf("Dist=%d", dist); wait(0.5); return dist; } // SPST Pushbutton count demo using internal PullUp function // no external PullUp resistor needed // Pushbutton from P8 to GND. // Demonstrates need for debounce - will not count more than once per button hit // This ocuurs on all switches due to mechanical contact bounce int main() { // Use internal pullup for pushbutton pb1.mode(PullUp); pb2.mode(PullUp); pb3.mode(PullUp); pb4.mode(PullUp); // Delay for initial pullup to take effect wait(.001); TOF_sensor.VL6180_Init(); par_port = new MCP23017(p9, p10, 0x40); par_port->config(0x0F00, 0x0F00, 0x0F00); // configure MCP23017 chip on WattBob lcd = new WattBob_TextLCD(par_port); BACK_LIGHT_ON(par_port); //char c = PC.getc(); //if (c == 'o') while(1) { while(Dist() < 250) while(level <= 4) { if (level == 0) break; for (row=0; row<10; row++) for (j=0; j<4; j++) { order [row][j] = (rand()% 4) + 1;} row = rand()%4; tries = 0; level1(); } } } void level1() { while(Dist() < 250) { levelreset = 0; for (j=0; j<4; j++) { led = order[row][j]; light(led,1); } //switches on the respective LEDs according to the order while(Dist() < 250) { new_pb1 = pb1; new_pb2 = pb2; new_pb3 = pb3; new_pb4 = pb4; if( ((new_pb1 == 0) && (old_pb1 == 1)) || ((new_pb2 == 0) && (old_pb2 == 1)) || ((new_pb3 == 0) && (old_pb3 == 1)) || ((new_pb4 == 0) && (old_pb4 == 1)) ) { switch(order[row][i]) { case 1: { if((new_pb1 == 0) && (old_pb1 == 1)) { light(1,0); i++;} else {reset(); levelreset = 1; tries++;} } break; case 2: { if((new_pb2 == 0) && (old_pb2 == 1)) { light(2,0); i++;} else {reset(); levelreset = 1; tries++;} } break; case 3: { if((new_pb3 == 0) && (old_pb3 == 1)) { light(3,0); i++;} else {reset(); levelreset = 1; tries++;} } break; case 4: { if((new_pb4 == 0) && (old_pb4 == 1)) { light(4,0); i++;} else {reset(); levelreset = 1; tries++;} } break; } if (levelreset == 1) { if (tries > 3) {reset(); level = 0; return;} else break; } else if (levelreset == 0) if(i >= 4){level++; reset(); return;} } old_pb1 = new_pb1; old_pb2 = new_pb2; old_pb3 = new_pb3; old_pb4 = new_pb4; } } } void reset() //function to turn off LEDs and reset order { myled1 = 0; myled2 = 0; myled3 = 0; myled4 = 0; i = 0; wait(1); return; } void light(int n, int m) //to turn on LEDs { if (m == 0) //for answer { //turns LED on for 1 second if(n == 1) {myled1 = 1; wait(1); myled1 = 0;} else if(n == 2) {myled2 = 1; wait(1); myled2 = 0;} else if(n == 3) {myled3 = 1; wait(1); myled3 = 0;} else if(n == 4) {myled4 = 1; wait(1); myled4 = 0;} } else if (m == 1) //for demo { //sets delay based on level number if(level == 1) delay = 1; else if (level == 2) delay = 0.75; else if (level == 3) delay = 0.50; else if (level == 4) delay = 0.25; //turns LED on for delay seconds before turning off if(n == 1) {myled1 = 1; wait(delay); myled1 = 0; wait(0.2);} else if(n == 2) {myled2 = 1; wait(delay); myled2 = 0; wait(0.2);} else if(n == 3) {myled3 = 1; wait(delay); myled3 = 0; wait(0.2);} else if(n == 4) {myled4 = 1; wait(delay); myled4 = 0; wait(0.2);} } return; }