Rube Goldberg machine

Dependencies:   4DGL-uLCD-SE mbed PinDetect

Committer:
nhardy6
Date:
Sun Sep 25 12:46:54 2016 +0000
Revision:
6:8ec8b00d6d7c
Parent:
5:8ff6c76ead80
finale

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nhardy6 0:26331a8bcec1 1 #include "mbed.h"
nhardy6 1:5315c3a587a0 2 #include "PinDetect.h"
nhardy6 0:26331a8bcec1 3 #include "uLCD_4DGL.h"
nhardy6 0:26331a8bcec1 4
nhardy6 0:26331a8bcec1 5 Timer t; //timer to generate number
nhardy6 0:26331a8bcec1 6
nhardy6 5:8ff6c76ead80 7 PinDetect begin(p8); //start of it all
mvaca3 2:2bb8f06b7924 8 bool volatile stop = 0;
nhardy6 0:26331a8bcec1 9 int num;
nhardy6 5:8ff6c76ead80 10 int smallFinale;
nhardy6 6:8ec8b00d6d7c 11 int inc = 1;
nhardy6 0:26331a8bcec1 12
nhardy6 0:26331a8bcec1 13 DigitalOut d1(p21); //display number in binary
nhardy6 0:26331a8bcec1 14 DigitalOut d2(p22);
nhardy6 0:26331a8bcec1 15 DigitalOut d3(p23);
nhardy6 0:26331a8bcec1 16
nhardy6 0:26331a8bcec1 17 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
nhardy6 0:26331a8bcec1 18
nhardy6 5:8ff6c76ead80 19 AnalogIn finish(p15);
nhardy6 5:8ff6c76ead80 20
nhardy6 5:8ff6c76ead80 21 DigitalOut latch(p26);
nhardy6 5:8ff6c76ead80 22 DigitalOut enable(p27);
nhardy6 5:8ff6c76ead80 23 SPI spi(p5, p6, p7);
nhardy6 5:8ff6c76ead80 24
nhardy6 6:8ec8b00d6d7c 25 int red=0; //for shiftbrite
nhardy6 5:8ff6c76ead80 26 int green=0;
nhardy6 5:8ff6c76ead80 27 int blue=0;
nhardy6 5:8ff6c76ead80 28
nhardy6 6:8ec8b00d6d7c 29 void show() {
nhardy6 6:8ec8b00d6d7c 30 uLCD.cls();
nhardy6 6:8ec8b00d6d7c 31 uLCD.locate(0,0);
nhardy6 6:8ec8b00d6d7c 32 uLCD.text_width(2);
nhardy6 6:8ec8b00d6d7c 33 uLCD.text_height(2);
nhardy6 6:8ec8b00d6d7c 34 uLCD.printf("GRINDING GEARS...\n\n");
nhardy6 6:8ec8b00d6d7c 35 wait(0.5);
nhardy6 6:8ec8b00d6d7c 36 uLCD.printf("STAR \nSEARCHING...");
nhardy6 6:8ec8b00d6d7c 37 wait(1);
nhardy6 6:8ec8b00d6d7c 38 }
nhardy6 6:8ec8b00d6d7c 39
nhardy6 5:8ff6c76ead80 40 void RGB_LED(int red, int green, int blue)
nhardy6 5:8ff6c76ead80 41 {
nhardy6 5:8ff6c76ead80 42 unsigned int low_color=0;
nhardy6 5:8ff6c76ead80 43 unsigned int high_color=0;
nhardy6 5:8ff6c76ead80 44 high_color=(blue<<4)|((red&0x3C0)>>6);
nhardy6 5:8ff6c76ead80 45 low_color=(((red&0x3F)<<10)|(green));
nhardy6 5:8ff6c76ead80 46 spi.write(high_color);
nhardy6 5:8ff6c76ead80 47 spi.write(low_color);
nhardy6 5:8ff6c76ead80 48 latch=1;
nhardy6 5:8ff6c76ead80 49 latch=0;
nhardy6 5:8ff6c76ead80 50 }
nhardy6 5:8ff6c76ead80 51
nhardy6 0:26331a8bcec1 52 void start() //make random numbers and fast lights until flip value
nhardy6 0:26331a8bcec1 53 {
nhardy6 5:8ff6c76ead80 54 while(!stop) {
nhardy6 0:26331a8bcec1 55 d1 = !d1;
nhardy6 0:26331a8bcec1 56 d2 = !d2;
nhardy6 0:26331a8bcec1 57 d3 = !d3;
nhardy6 0:26331a8bcec1 58 num = t.read_us()%8;
nhardy6 0:26331a8bcec1 59 wait(0.2);
nhardy6 0:26331a8bcec1 60 }
nhardy6 0:26331a8bcec1 61 }
nhardy6 0:26331a8bcec1 62
mvaca3 2:2bb8f06b7924 63 void stopper(void) //flip the value
nhardy6 0:26331a8bcec1 64 {
nhardy6 0:26331a8bcec1 65 stop = 1;
nhardy6 0:26331a8bcec1 66 }
nhardy6 0:26331a8bcec1 67
nhardy6 0:26331a8bcec1 68 void lights()
nhardy6 0:26331a8bcec1 69 {
nhardy6 5:8ff6c76ead80 70 if (num > 3) {
nhardy6 4:c38d2a1fb99d 71 d3 = 1;
nhardy6 6:8ec8b00d6d7c 72 } else {
nhardy6 6:8ec8b00d6d7c 73 d3 = 0;
nhardy6 0:26331a8bcec1 74 }
nhardy6 5:8ff6c76ead80 75 if (num == 2 || num == 3 || num == 6 || num == 7) {
nhardy6 0:26331a8bcec1 76 d2 = 1;
nhardy6 6:8ec8b00d6d7c 77 } else {
nhardy6 6:8ec8b00d6d7c 78 d2 = 0;
nhardy6 0:26331a8bcec1 79 }
nhardy6 5:8ff6c76ead80 80 if ((num % 2) == 1) {
nhardy6 4:c38d2a1fb99d 81 d1 = 1;
nhardy6 6:8ec8b00d6d7c 82 } else {
nhardy6 6:8ec8b00d6d7c 83 d1 = 0;
nhardy6 0:26331a8bcec1 84 }
nhardy6 0:26331a8bcec1 85 }
nhardy6 0:26331a8bcec1 86
nhardy6 5:8ff6c76ead80 87 void bigFinale(int a, int b)
nhardy6 5:8ff6c76ead80 88 {
nhardy6 5:8ff6c76ead80 89 red = a;
nhardy6 5:8ff6c76ead80 90 green = b;
nhardy6 6:8ec8b00d6d7c 91 blue = 0;
nhardy6 6:8ec8b00d6d7c 92 while (true) {
nhardy6 6:8ec8b00d6d7c 93 RGB_LED(red, green, blue);
nhardy6 6:8ec8b00d6d7c 94 blue = blue + inc;
nhardy6 6:8ec8b00d6d7c 95 if (blue == 0 || blue == 256) {
nhardy6 6:8ec8b00d6d7c 96 inc = -inc;
nhardy6 6:8ec8b00d6d7c 97 }
nhardy6 6:8ec8b00d6d7c 98 wait(0.01);
nhardy6 6:8ec8b00d6d7c 99 }
nhardy6 5:8ff6c76ead80 100 }
nhardy6 5:8ff6c76ead80 101
nhardy6 0:26331a8bcec1 102 int main()
nhardy6 0:26331a8bcec1 103 {
nhardy6 0:26331a8bcec1 104 t.start(); //start timer
nhardy6 0:26331a8bcec1 105 uLCD.cls(); //prepare screen
nhardy6 5:8ff6c76ead80 106 wait(0.1);
nhardy6 5:8ff6c76ead80 107 spi.format(16,0); //setup spi
nhardy6 5:8ff6c76ead80 108 spi.frequency(500000);
nhardy6 5:8ff6c76ead80 109 enable=0;
nhardy6 5:8ff6c76ead80 110 latch=0;
nhardy6 5:8ff6c76ead80 111 wait(2);
mvaca3 3:f108df5ad90b 112 uLCD.locate(0,0);
mvaca3 3:f108df5ad90b 113 uLCD.color(WHITE);
nhardy6 5:8ff6c76ead80 114 begin.mode(PullUp); //attach pushbutton
nhardy6 4:c38d2a1fb99d 115 wait(.01); //setup delay
nhardy6 1:5315c3a587a0 116 begin.attach_deasserted(&stopper);
mvaca3 2:2bb8f06b7924 117 begin.setSampleFrequency();
nhardy6 6:8ec8b00d6d7c 118 uLCD.text_width(3);
nhardy6 6:8ec8b00d6d7c 119 uLCD.text_height(3);
nhardy6 6:8ec8b00d6d7c 120 uLCD.printf(" FIRE\n WHEN\n READY");
nhardy6 0:26331a8bcec1 121 start(); //begin the choosing
nhardy6 0:26331a8bcec1 122 lights(); //light lights according to generated number
nhardy6 6:8ec8b00d6d7c 123 show();
nhardy6 6:8ec8b00d6d7c 124 uLCD.cls();
nhardy6 6:8ec8b00d6d7c 125 uLCD.locate(0,0);
nhardy6 6:8ec8b00d6d7c 126 uLCD.printf("You got the number");
nhardy6 6:8ec8b00d6d7c 127 uLCD.text_width(5);
nhardy6 6:8ec8b00d6d7c 128 uLCD.text_height(5);
nhardy6 6:8ec8b00d6d7c 129 uLCD.locate(1,1);
nhardy6 6:8ec8b00d6d7c 130 uLCD.printf("%2D",num);
nhardy6 6:8ec8b00d6d7c 131 uLCD.text_width(1);
nhardy6 6:8ec8b00d6d7c 132 uLCD.text_height(1);
nhardy6 6:8ec8b00d6d7c 133 uLCD.locate(0,13);
nhardy6 6:8ec8b00d6d7c 134 uLCD.printf("The lights knew\n this would happen");
nhardy6 6:8ec8b00d6d7c 135 wait(4);
nhardy6 6:8ec8b00d6d7c 136
nhardy6 6:8ec8b00d6d7c 137 smallFinale = 256*finish.read();
nhardy6 6:8ec8b00d6d7c 138 uLCD.cls();
nhardy6 6:8ec8b00d6d7c 139 uLCD.text_width(3);
nhardy6 6:8ec8b00d6d7c 140 uLCD.text_height(3);
nhardy6 6:8ec8b00d6d7c 141 uLCD.locate(0,0);
nhardy6 6:8ec8b00d6d7c 142 uLCD.printf(" YOUR\nSTATS:");
nhardy6 6:8ec8b00d6d7c 143 uLCD.text_width(2);
nhardy6 6:8ec8b00d6d7c 144 uLCD.text_height(2);
nhardy6 6:8ec8b00d6d7c 145 uLCD.locate(1,5);
nhardy6 6:8ec8b00d6d7c 146 uLCD.color(RED);
nhardy6 6:8ec8b00d6d7c 147 uLCD.printf("\t%2D",num*256/7);
nhardy6 6:8ec8b00d6d7c 148 uLCD.color(GREEN);
nhardy6 6:8ec8b00d6d7c 149 uLCD.printf("\t %2D",smallFinale);
nhardy6 6:8ec8b00d6d7c 150 bigFinale(num*256/7,smallFinale); //output branch numbers to light
nhardy6 0:26331a8bcec1 151 }