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

Committer:
dminear
Date:
Wed Mar 09 05:09:42 2011 +0000
Revision:
0:74139f5b6180
Initial release

Who changed what in which revision?

UserRevisionLine numberNew 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