Rube Goldberg machine
Dependencies: 4DGL-uLCD-SE mbed PinDetect
Diff: main.cpp
- 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 }