xszdx

Dependencies:   mbed TCS3472_I2C MCP23017 VL6180 DebounceIn WattBob_TextLCD

Revision:
0:171d347f33f7
Child:
1:ad7134c4e365
diff -r 000000000000 -r 171d347f33f7 main_copy.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main_copy.cpp	Tue Mar 03 17:42:15 2020 +0000
@@ -0,0 +1,188 @@
+#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;
+}
\ No newline at end of file