This is the end gate portion of a pinewood derby timer that uses an mbed. It communicates via HTTP to a web server that is doing the racer control and race management. Still need to put all that code together into a package on the net.
Dependencies: EthernetNetIf mbed HTTPServer Servo
main.cpp@0:74139f5b6180, 2011-03-09 (annotated)
- Committer:
- dminear
- Date:
- Wed Mar 09 05:09:42 2011 +0000
- Revision:
- 0:74139f5b6180
Initial release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dminear | 0:74139f5b6180 | 1 | #include "mbed.h" |
dminear | 0:74139f5b6180 | 2 | #include "EthernetNetIf.h" |
dminear | 0:74139f5b6180 | 3 | #include "HTTPServer.h" |
dminear | 0:74139f5b6180 | 4 | #include "derby_handler.h" |
dminear | 0:74139f5b6180 | 5 | #include "Servo.h" |
dminear | 0:74139f5b6180 | 6 | #include "share.h" |
dminear | 0:74139f5b6180 | 7 | |
dminear | 0:74139f5b6180 | 8 | //I2C i2c(p28,p27); //p9, p10); // sda, scl |
dminear | 0:74139f5b6180 | 9 | |
dminear | 0:74139f5b6180 | 10 | DigitalOut led1(LED1, "led1"); |
dminear | 0:74139f5b6180 | 11 | DigitalOut led2(LED2, "led2"); |
dminear | 0:74139f5b6180 | 12 | DigitalOut led3(LED3, "led3"); |
dminear | 0:74139f5b6180 | 13 | DigitalOut led4(LED4, "led4"); |
dminear | 0:74139f5b6180 | 14 | DigitalOut ledgreen(p30); |
dminear | 0:74139f5b6180 | 15 | DigitalOut ledyellow(p29); |
dminear | 0:74139f5b6180 | 16 | |
dminear | 0:74139f5b6180 | 17 | LocalFileSystem fs("webfs"); |
dminear | 0:74139f5b6180 | 18 | |
dminear | 0:74139f5b6180 | 19 | EthernetNetIf eth; |
dminear | 0:74139f5b6180 | 20 | HTTPServer svr; |
dminear | 0:74139f5b6180 | 21 | InterruptIn button1(p11); |
dminear | 0:74139f5b6180 | 22 | InterruptIn button2(p12); |
dminear | 0:74139f5b6180 | 23 | InterruptIn button3(p13); |
dminear | 0:74139f5b6180 | 24 | InterruptIn button4(p14); |
dminear | 0:74139f5b6180 | 25 | Timer timer; |
dminear | 0:74139f5b6180 | 26 | Servo myservo(p26); |
dminear | 0:74139f5b6180 | 27 | DigitalOut startsol(p25); |
dminear | 0:74139f5b6180 | 28 | DigitalOut lane1led(p21); |
dminear | 0:74139f5b6180 | 29 | DigitalOut lane2led(p22); |
dminear | 0:74139f5b6180 | 30 | DigitalOut lane3led(p23); |
dminear | 0:74139f5b6180 | 31 | DigitalOut lane4led(p24); |
dminear | 0:74139f5b6180 | 32 | |
dminear | 0:74139f5b6180 | 33 | int blinkm=0; |
dminear | 0:74139f5b6180 | 34 | float lane1; |
dminear | 0:74139f5b6180 | 35 | float lane2; |
dminear | 0:74139f5b6180 | 36 | float lane3; |
dminear | 0:74139f5b6180 | 37 | float lane4; |
dminear | 0:74139f5b6180 | 38 | int lane1enable = 0; |
dminear | 0:74139f5b6180 | 39 | int lane2enable = 0; |
dminear | 0:74139f5b6180 | 40 | int lane3enable = 0; |
dminear | 0:74139f5b6180 | 41 | int lane4enable = 0; |
dminear | 0:74139f5b6180 | 42 | |
dminear | 0:74139f5b6180 | 43 | void reset_lane_latch_enables() { |
dminear | 0:74139f5b6180 | 44 | lane1enable = 1; |
dminear | 0:74139f5b6180 | 45 | lane2enable = 1; |
dminear | 0:74139f5b6180 | 46 | lane3enable = 1; |
dminear | 0:74139f5b6180 | 47 | lane4enable = 1; |
dminear | 0:74139f5b6180 | 48 | } |
dminear | 0:74139f5b6180 | 49 | |
dminear | 0:74139f5b6180 | 50 | void lane1trig () { |
dminear | 0:74139f5b6180 | 51 | if (lane1enable == 1) { |
dminear | 0:74139f5b6180 | 52 | lane1enable = 0; |
dminear | 0:74139f5b6180 | 53 | lane1 = timer.read(); |
dminear | 0:74139f5b6180 | 54 | lane1led = 0; |
dminear | 0:74139f5b6180 | 55 | } |
dminear | 0:74139f5b6180 | 56 | } |
dminear | 0:74139f5b6180 | 57 | |
dminear | 0:74139f5b6180 | 58 | void lane2trig () { |
dminear | 0:74139f5b6180 | 59 | if (lane2enable == 1) { |
dminear | 0:74139f5b6180 | 60 | lane2enable = 0; |
dminear | 0:74139f5b6180 | 61 | lane2 = timer.read(); |
dminear | 0:74139f5b6180 | 62 | lane2led = 0; |
dminear | 0:74139f5b6180 | 63 | } |
dminear | 0:74139f5b6180 | 64 | } |
dminear | 0:74139f5b6180 | 65 | |
dminear | 0:74139f5b6180 | 66 | void lane3trig () { |
dminear | 0:74139f5b6180 | 67 | if (lane3enable == 1) { |
dminear | 0:74139f5b6180 | 68 | lane3enable = 0; |
dminear | 0:74139f5b6180 | 69 | lane3 = timer.read(); |
dminear | 0:74139f5b6180 | 70 | lane3led = 0; |
dminear | 0:74139f5b6180 | 71 | } |
dminear | 0:74139f5b6180 | 72 | } |
dminear | 0:74139f5b6180 | 73 | |
dminear | 0:74139f5b6180 | 74 | void lane4trig () { |
dminear | 0:74139f5b6180 | 75 | if (lane4enable == 1) { |
dminear | 0:74139f5b6180 | 76 | lane4enable = 0; |
dminear | 0:74139f5b6180 | 77 | lane4 = timer.read(); |
dminear | 0:74139f5b6180 | 78 | lane4led = 0; |
dminear | 0:74139f5b6180 | 79 | } |
dminear | 0:74139f5b6180 | 80 | } |
dminear | 0:74139f5b6180 | 81 | |
dminear | 0:74139f5b6180 | 82 | |
dminear | 0:74139f5b6180 | 83 | int main() { |
dminear | 0:74139f5b6180 | 84 | //Base::add_rpc_class<DigitalOut>(); |
dminear | 0:74139f5b6180 | 85 | button1.rise( &lane1trig ); |
dminear | 0:74139f5b6180 | 86 | button2.rise( &lane2trig ); |
dminear | 0:74139f5b6180 | 87 | button3.rise( &lane3trig ); |
dminear | 0:74139f5b6180 | 88 | button4.rise( &lane4trig ); |
dminear | 0:74139f5b6180 | 89 | ledyellow = 0; |
dminear | 0:74139f5b6180 | 90 | ledgreen = 0; |
dminear | 0:74139f5b6180 | 91 | myservo.calibrate(0.0006,45); |
dminear | 0:74139f5b6180 | 92 | timer.reset(); |
dminear | 0:74139f5b6180 | 93 | myservo = 0.7; |
dminear | 0:74139f5b6180 | 94 | startsol = 0; |
dminear | 0:74139f5b6180 | 95 | lane1led = 0; |
dminear | 0:74139f5b6180 | 96 | lane2led = 0; |
dminear | 0:74139f5b6180 | 97 | lane3led = 0; |
dminear | 0:74139f5b6180 | 98 | lane4led = 0; |
dminear | 0:74139f5b6180 | 99 | |
dminear | 0:74139f5b6180 | 100 | |
dminear | 0:74139f5b6180 | 101 | printf("Setting up...\n"); |
dminear | 0:74139f5b6180 | 102 | EthernetErr ethErr = eth.setup(); |
dminear | 0:74139f5b6180 | 103 | if(ethErr) |
dminear | 0:74139f5b6180 | 104 | { |
dminear | 0:74139f5b6180 | 105 | printf("Error %d in setup.\n", ethErr); |
dminear | 0:74139f5b6180 | 106 | return -1; |
dminear | 0:74139f5b6180 | 107 | } else { |
dminear | 0:74139f5b6180 | 108 | ledgreen = 1; |
dminear | 0:74139f5b6180 | 109 | } |
dminear | 0:74139f5b6180 | 110 | |
dminear | 0:74139f5b6180 | 111 | printf("Setup OK\n"); |
dminear | 0:74139f5b6180 | 112 | |
dminear | 0:74139f5b6180 | 113 | FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path |
dminear | 0:74139f5b6180 | 114 | FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path |
dminear | 0:74139f5b6180 | 115 | |
dminear | 0:74139f5b6180 | 116 | svr.addHandler<SimpleHandler>("/simple"); |
dminear | 0:74139f5b6180 | 117 | svr.addHandler<SimpleHandler3>("/simple3"); |
dminear | 0:74139f5b6180 | 118 | //svr.addHandler<RPCHandler>("/rpc"); |
dminear | 0:74139f5b6180 | 119 | svr.addHandler<FSHandler>("/files"); |
dminear | 0:74139f5b6180 | 120 | svr.addHandler<FSHandler>("/"); //Default handler |
dminear | 0:74139f5b6180 | 121 | //Example : Access to mbed.htm : http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm |
dminear | 0:74139f5b6180 | 122 | |
dminear | 0:74139f5b6180 | 123 | svr.bind(80); |
dminear | 0:74139f5b6180 | 124 | |
dminear | 0:74139f5b6180 | 125 | printf("Listening...\n"); |
dminear | 0:74139f5b6180 | 126 | if (blinkm) {BlinkInit();} |
dminear | 0:74139f5b6180 | 127 | |
dminear | 0:74139f5b6180 | 128 | Timer tm; |
dminear | 0:74139f5b6180 | 129 | tm.start(); |
dminear | 0:74139f5b6180 | 130 | //Listen indefinitely |
dminear | 0:74139f5b6180 | 131 | while(true) { |
dminear | 0:74139f5b6180 | 132 | Net::poll(); |
dminear | 0:74139f5b6180 | 133 | if(tm.read()>0.5) { |
dminear | 0:74139f5b6180 | 134 | ledyellow = !ledyellow; //Show that we are alive |
dminear | 0:74139f5b6180 | 135 | //FadeToRandomColor(); |
dminear | 0:74139f5b6180 | 136 | tm.start(); |
dminear | 0:74139f5b6180 | 137 | //printf ("timer is %f\n\r", timer.read() ); |
dminear | 0:74139f5b6180 | 138 | } |
dminear | 0:74139f5b6180 | 139 | |
dminear | 0:74139f5b6180 | 140 | led1 = ! button1; |
dminear | 0:74139f5b6180 | 141 | led2 = ! button2; |
dminear | 0:74139f5b6180 | 142 | led3 = ! button3; |
dminear | 0:74139f5b6180 | 143 | led4 = ! button4; |
dminear | 0:74139f5b6180 | 144 | |
dminear | 0:74139f5b6180 | 145 | } |
dminear | 0:74139f5b6180 | 146 | |
dminear | 0:74139f5b6180 | 147 | return 0; |
dminear | 0:74139f5b6180 | 148 | |
dminear | 0:74139f5b6180 | 149 | } |
dminear | 0:74139f5b6180 | 150 |