Rube Goldberg machine

Dependencies:   4DGL-uLCD-SE mbed PinDetect

Revision:
5:8ff6c76ead80
Parent:
4:c38d2a1fb99d
Child:
6:8ec8b00d6d7c
--- a/main.cpp	Sun Sep 25 00:39:55 2016 +0000
+++ b/main.cpp	Sun Sep 25 10:37:38 2016 +0000
@@ -4,9 +4,10 @@
 
 Timer t;    //timer to generate number
 
-PinDetect begin(p5);  //start of it all
+PinDetect begin(p8);  //start of it all
 bool volatile stop = 0;
 int num;
+int smallFinale;
 
 DigitalOut d1(p21); //display number in binary
 DigitalOut d2(p22);
@@ -14,10 +15,31 @@
 
 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
 
+AnalogIn finish(p15);
+
+DigitalOut latch(p26);
+DigitalOut enable(p27);
+SPI spi(p5, p6, p7);
+
+int red=0;
+int green=0;
+int blue=0;
+
+void RGB_LED(int red, int green, int blue)
+{
+    unsigned int low_color=0;
+    unsigned int high_color=0;
+    high_color=(blue<<4)|((red&0x3C0)>>6);
+    low_color=(((red&0x3F)<<10)|(green));
+    spi.write(high_color);
+    spi.write(low_color);
+    latch=1;
+    latch=0;
+}
+
 void start()    //make random numbers and fast lights until flip value
 {
-    while(!stop)
-    {
+    while(!stop) {
         d1 = !d1;
         d2 = !d2;
         d3 = !d3;
@@ -33,29 +55,39 @@
 
 void lights()
 {
-    if (num > 3)
-    {
+    if (num > 3) {
         d3 = 1;
     }
-    if (num == 2 || num == 3 || num == 6 || num == 7)
-    {
+    if (num == 2 || num == 3 || num == 6 || num == 7) {
         d2 = 1;
     }
-    if ((num % 2) == 1)
-    {
+    if ((num % 2) == 1) {
         d1 = 1;
     }
 }
 
+void bigFinale(int a, int b)
+{
+    red = a;
+    green = b;
+    blue = abs(a-b/2);
+    RGB_LED(red, green, blue);
+}
+
 int main()
 {
     t.start();              //start timer
     uLCD.cls();             //prepare screen
-    //uLCD.baudrate(3000000);
-    wait(.1);               //wait just in case
+    uLCD.baudrate(3000000);
+    wait(0.1);
+    spi.format(16,0);       //setup spi
+    spi.frequency(500000);
+    enable=0;
+    latch=0;
+    wait(2);
     uLCD.locate(0,0);
     uLCD.color(WHITE);
-    begin.mode(PullUp);     //attach interrupt
+    begin.mode(PullUp);     //attach pushbutton
     wait(.01);              //setup delay
     begin.attach_deasserted(&stopper);
     begin.setSampleFrequency();
@@ -64,4 +96,6 @@
     uLCD.printf("got the number %d\n", num);
     lights();               //light lights according to generated number
     uLCD.printf("did the lights \n");
+    smallFinale = t.read_us()%4;
+    bigFinale((smallFinale+num)*256/21,256*finish.read()/3.3); //output branch numbers to light
 }