
This is the ServoCam Project, as shown here: http://youtu.be/riiqyXnckR4
Dependencies: mbed NetEthApiLPC1768 NetServicesLPC1768 Camera_LS_Y201 Servo
Revision 0:13c861a5ed0f, committed 2011-06-03
- Comitter:
- tbaumg
- Date:
- Fri Jun 03 19:12:28 2011 +0000
- Commit message:
- V1
Changed in this revision
diff -r 000000000000 -r 13c861a5ed0f Camera_LS_Y201.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Camera_LS_Y201.lib Fri Jun 03 19:12:28 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/shintamainjp/code/Camera_LS_Y201/#43358d40f879
diff -r 000000000000 -r 13c861a5ed0f NetEthApiLPC1768.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NetEthApiLPC1768.lib Fri Jun 03 19:12:28 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/donatien/code/NetEthApiLPC1768/#2929fcb16bbf
diff -r 000000000000 -r 13c861a5ed0f NetServicesLPC1768.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NetServicesLPC1768.lib Fri Jun 03 19:12:28 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/donatien/code/NetServicesLPC1768/#acb9b7d53771
diff -r 000000000000 -r 13c861a5ed0f Servo.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Servo.lib Fri Jun 03 19:12:28 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/Servo/#36b69a7ced07
diff -r 000000000000 -r 13c861a5ed0f main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Jun 03 19:12:28 2011 +0000 @@ -0,0 +1,165 @@ +#include "mbed.h" +#include "Camera_LS_Y201.h" +#include "Servo.h" +#include "EthernetNetIf.h" +#include "HttpServer.h" + +Servo servo1(p21); +Servo servo2(p22); +DigitalOut myled(LED1); +DigitalOut myled4(LED4); +Camera_LS_Y201 cam1(p13, p14); +Serial device(p28, p27); // tx, rx +LocalFileSystem local("local"); // Create the local filesystem under the name "local" +LocalFileSystem fs("webfs"); + +EthernetNetIf eth; +HttpServer svr; + +FILE *fp = NULL; +int datcnt = 0; +float ServoVal1[5] = {0,.25,.5,.75,1}; +//float ServoVal2[5] = {0,.25,.5,.75,1}; +float ServoVal2[5] = {1,.9,.5,.1,0}; + +/** + * Callback function for readJpegFileContent. + * + * @param buf A pointer to a buffer. + * @param siz A size of the buffer. + */ +void callback_func(int done, int total, uint8_t *buf, size_t siz) { + fwrite(buf, siz, 1, fp); + + static int n = 0; + int tmp = done * 100 / total; + if (n != tmp) { + n = tmp; + // You can print the progress to LCD here. + } +} + +int capture(int n) { + /* + * Take a picture.(L) + */ + if (cam1.takePicture() != 0) { + return -1; + } + // lcd.locate(0, 1); + device.printf("Captured.\r\n"); + + char fname[64]; + + /* + * Open file. + * Read the content. + */ + snprintf(fname, sizeof(fname) - 1, "/local/IMG_%04d.jpg", n); + fp = fopen(fname, "wb"); + if (fp == NULL) { + return -2; + } + //lcd.locate(0, 0); + device.printf("Capture: %04d\r\n", n); + datcnt = 0; + if (cam1.readJpegFileContent(callback_func) != 0) { + fclose(fp); + return -3; + } + fclose(fp); + + /* + * Stop taking pictures. + */ + cam1.stopTakingPictures(); + + return 0; +} + + +int main() { + device.baud(115200); + device.printf("***********************************\r\n"); + device.printf("**** ServoCamera mbed Project ****\r\n"); + device.printf("**** NXP mbed Design Challenge ****\r\n"); + device.printf("***********************************\r\n"); + wait(.25); + + if (cam1.reset() == 0) { + device.printf("Camera Reset OK.\r\n "); + } + wait(.5); + + //device.printf("setImageSize=%d\n", cam1.setImageSize(LS_Y201::ImageSize640x480)); + //wait(1); + device.printf("******************************\r\n"); +/* device.printf("** MOVE SERVO **\r\n"); + for(float p=0; p<1.0; p += 0.01) { + servo2 = p; + servo1 = p; + wait(0.15); + } +*/ + servo2 = 0.5; + servo1 = 0.5; + device.printf("** SERVOs CENTERED! **\r\n"); + device.printf("******************************\r\n"); + wait(2); + int cnt = 0; + int col = 0; + int row = 0; + servo2 = 0.5; + servo1 = 0.3; + wait(1); + for (int j = 0; j < 3; j++) { + col = j; + servo1 = (ServoVal1[col+1]-0.15); // Move servo to new position + for (int i = 0; i < 3; i++) { + row = i; + servo2 = ServoVal2[row+1]; // Move servo to new position + wait(1); + myled4 = 0; // turns LED ON + int r = capture(cnt); // capture image + if (r == 0) { + device.printf("[%04d]:OK.\r\n", cnt); + } else { + device.printf("[%04d]:NG. (code=%d)\r\n", cnt, r); + } + cnt++; + myled4 = 1; // turns LED OFF + } + } + servo2 = 0.5; + servo1 = 0.3; + // + Base::add_rpc_class<DigitalOut>(); + + device.printf("\r\nSetting up Ethernet...\r\n"); + EthernetErr ethErr = eth.setup(); + if(ethErr) + { + device.printf("Error %d in setup.\n", ethErr); + return -1; + } + device.printf("\r\nSetup OK\r\n"); + + svr.addHandler<SimpleHandler>("/hello"); + svr.addHandler<RpcHandler>("/rpc"); + svr.addHandler<FSHandler>(""); //Default handler + //Example : Access to mbed.htm : http://a.b.c.d/webfs/mbed.htm + + svr.bind(80); + + device.printf("\r\nListening @port 80...\r\n"); + + // + while (1) { + Net::poll(); + myled = 1; + wait(0.2); + myled = 0; + wait(0.2); + } + +}
diff -r 000000000000 -r 13c861a5ed0f mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Jun 03 19:12:28 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e