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

Committer:
dminear
Date:
2011-03-09
Revision:
0:74139f5b6180

File content as of revision 0:74139f5b6180:

#include "mbed.h"
#include "EthernetNetIf.h"
#include "HTTPServer.h"
#include "derby_handler.h"
#include "Servo.h"
#include "share.h"

//I2C i2c(p28,p27); //p9, p10);        // sda, scl

DigitalOut led1(LED1, "led1");
DigitalOut led2(LED2, "led2");
DigitalOut led3(LED3, "led3");
DigitalOut led4(LED4, "led4");
DigitalOut ledgreen(p30);
DigitalOut ledyellow(p29);

LocalFileSystem fs("webfs");

EthernetNetIf eth;  
HTTPServer svr;
InterruptIn button1(p11);
InterruptIn button2(p12);
InterruptIn button3(p13);
InterruptIn button4(p14);
Timer timer;
Servo myservo(p26);
DigitalOut startsol(p25);
DigitalOut lane1led(p21);
DigitalOut lane2led(p22);
DigitalOut lane3led(p23);
DigitalOut lane4led(p24);

int blinkm=0;
float lane1;
float lane2;
float lane3;
float lane4;
int lane1enable = 0;
int lane2enable = 0;
int lane3enable = 0;
int lane4enable = 0;

void reset_lane_latch_enables() {
    lane1enable = 1;
    lane2enable = 1;
    lane3enable = 1;
    lane4enable = 1;
}
    
void lane1trig () {
    if (lane1enable == 1) {
        lane1enable = 0;
        lane1 = timer.read();
        lane1led = 0;
    }
}
    
void lane2trig () {
    if (lane2enable == 1) {
        lane2enable = 0;
        lane2 = timer.read();
        lane2led = 0;
    }
}

void lane3trig () {
    if (lane3enable == 1) {
        lane3enable = 0;
        lane3 = timer.read();
        lane3led = 0;
    }
}

void lane4trig () {
    if (lane4enable == 1) {
        lane4enable = 0;
        lane4 = timer.read();
        lane4led = 0;
    }
}


int main() {
  //Base::add_rpc_class<DigitalOut>();
  button1.rise( &lane1trig );
  button2.rise( &lane2trig );
  button3.rise( &lane3trig );
  button4.rise( &lane4trig );
  ledyellow = 0;
  ledgreen = 0;
  myservo.calibrate(0.0006,45);
  timer.reset();
  myservo = 0.7;
  startsol = 0;
    lane1led = 0;
    lane2led = 0;
    lane3led = 0;
    lane4led = 0;


  printf("Setting up...\n");
  EthernetErr ethErr = eth.setup();
  if(ethErr)
  {
    printf("Error %d in setup.\n", ethErr);
    return -1;
  } else {
    ledgreen = 1;
  }

  printf("Setup OK\n");
  
  FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path
  FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
  
  svr.addHandler<SimpleHandler>("/simple");
  svr.addHandler<SimpleHandler3>("/simple3");
  //svr.addHandler<RPCHandler>("/rpc");
  svr.addHandler<FSHandler>("/files");
  svr.addHandler<FSHandler>("/"); //Default handler
  //Example : Access to mbed.htm : http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm
  
  svr.bind(80);
  
  printf("Listening...\n");
  if (blinkm) {BlinkInit();}
  
  Timer tm;
  tm.start();
  //Listen indefinitely
  while(true) {
    Net::poll();
    if(tm.read()>0.5) {
      ledyellow = !ledyellow; //Show that we are alive
      //FadeToRandomColor();
      tm.start();
      //printf ("timer is %f\n\r", timer.read() );
    }
    
    led1 = ! button1;
    led2 = ! button2;
    led3 = ! button3;
    led4 = ! button4;
    
  }
  
  return 0;

}