Web radiation monitoring system.
Dependencies: EthernetNetIf TextLCD mbed HTTPServer
Diff: main.cpp
- Revision:
- 0:de8fcaf0fc9b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue May 24 10:53:04 2011 +0000 @@ -0,0 +1,157 @@ +// Hello World! for the TextLCD + +#include "mbed.h" +#include "TextLCD.h" +#include "EthernetNetIf.h" +#include "HTTPServer.h" +#include "ipaddr.h" +#include "RPCVariable.h" + +IpAddr ip(192,168,1,121); +IpAddr netmask(255,255,255,0); +IpAddr gateway(192,168,1,1); +IpAddr dns(192,168,1,1); + +EthernetNetIf eth(ip,netmask,gateway,dns); +HTTPServer svr; + +DigitalOut led1(LED1); + +InterruptIn geigerIn(p5); + +TextLCD lcd(p24, p26, p27, p28, p29, p30); // rs, e, d4-d7 + +unsigned int count = 0; +unsigned int prev_count = 0; +unsigned int i = 0; + + +class MyHandler : public HTTPRequestHandler +{ +public: + MyHandler(const char* rootPath, const char* path, TCPSocket* pTCPSocket); + virtual ~MyHandler(); + +//protected: + static inline HTTPRequestHandler* inst(const char* rootPath, const char* path, TCPSocket* pTCPSocket) { return new MyHandler(rootPath, path, pTCPSocket); } //if we ever could do static virtual functions, this would be one + + virtual void doGet(); + virtual void doPost(); + virtual void doHead(); + + virtual void onReadable(); //Data has been read + virtual void onWriteable(); //Data has been written & buf is free + virtual void onClose(); //Connection is closing +}; + +MyHandler::MyHandler(const char* rootPath, const char* path, TCPSocket* pTCPSocket) : HTTPRequestHandler(rootPath, path, pTCPSocket) +{ +} + +MyHandler::~MyHandler() +{ +} + +void MyHandler::doGet() +{ + const char* resp = "Hello world !"; + char a[64]; + sprintf(a, "%d CPM.\n\0", ::prev_count); + //setContentLen( strlen(resp) ); + setContentLen( strlen(a) ); + + respHeaders()["Connection"] = "close"; + + //writeData(resp, strlen(resp)); + writeData(a, strlen(a)); + +} + +void MyHandler::doPost() +{ + +} + +void MyHandler::doHead() +{ + +} + + +void MyHandler::onReadable() //Data has been read +{ + +} + +void MyHandler::onWriteable() //Data has been written & buf is free +{ + close(); //Data written, we can close the connection +} + +void MyHandler::onClose() //Connection is closing +{ + //Nothing to do +} + + +void radioactive() +{ + count = count + 1; +} + +void count_minutes() +{ + lcd.locate(0, 0); + lcd.printf("%04dCPM ", count); lcd.printf("%02dsec", i); + lcd.locate(0, 1); + lcd.printf("Prev. %04dCPM ", prev_count); + + i = i + 1; + + if(i > 59) + { + i = 0; + prev_count = count; + count = 0; + } +} + +int main() { + + // Count variables clear. + count = 0; + prev_count = 0; + + lcd.cls(); + lcd.locate(0, 0); + + geigerIn.fall(&radioactive); + + EthernetErr ethErr = eth.setup(); + if(ethErr) + { + return -1; + } + + svr.addHandler<SimpleHandler>("/"); //Default handler + svr.addHandler<MyHandler>("/geiger"); + + svr.bind(80); + + Ticker tick; + tick.attach(count_minutes, 1); + + Timer tm; + tm.start(); + //Listen indefinitely + while(true) + { + Net::poll(); + if(tm.read()>.5) + { + led1=!led1; //Show that we are alive + tm.start(); + } + } + +} \ No newline at end of file