Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: StepperMotors mbed CNCAirbrush Servo
main.cpp
- Committer:
- stretch
- Date:
- 2012-04-28
- Revision:
- 0:ba40c5f30cf0
- Child:
- 1:f3fda065e614
File content as of revision 0:ba40c5f30cf0:
#include "mbed.h" #include "Wifly.h" #include "Bitmap.h" #include "Stepper.h" #include "LinearMotion.h" #include "Servo.h" #define PAN_RANGE 0.0009 #define PAN_DEGREE 90 #define PAN_CENTER 0.0002 LocalFileSystem local("local"); Serial pc(USBTX, USBRX); DigitalOut led(LED1); DigitalOut solenoid(p29); Wifly wifi(p9, p10, p8); Command * cmd; Bitmap bmp; bool paused = false; bool stopped = false; Stepper x(p6,p5,p14); Stepper y(p24,p27,p28); Stepper z(p22,p23,p21); LinearMotion linearMotion; Servo servoTilt(p25); Servo servoPan(p26); /*1B:Blue 1A:Red 2A:Black 2B:Green*/ void savePosition (Vector position, float pan, float tilt) { FILE * fp = fopen("/local/hrmm.settings", "w"); if (fp != NULL) { fwrite(&position.x, sizeof(long), 1, fp); fwrite(&position.y, sizeof(long), 1, fp); fwrite(&position.z, sizeof(long), 1, fp); fwrite(&pan, sizeof(float), 1, fp); fwrite(&tilt, sizeof(float), 1, fp); fclose(fp); } } void pause(Command * c) { paused = !paused; printf("paused:%d\n\r", paused); } void stop(Command * c) { stopped = true; paused = false; } int main() { servoPan.calibrate(PAN_RANGE, PAN_DEGREE, PAN_CENTER); float pan = .5; float tilt = 0; Vector pos = {0, 0, 0}; FILE * fp = fopen("/local/hrmm.settings", "r"); if (fp != NULL) { fread(&pos.x, sizeof(long), 1, fp); fread(&pos.y, sizeof(long), 1, fp); fread(&pos.z, sizeof(long), 1, fp); fread(&pan, sizeof(float), 1, fp); fread(&tilt, sizeof(float), 1, fp); fclose(fp); } x.setPosition(pos.x); y.setPosition(pos.y); z.setPosition(pos.z); servoPan = pan; servoTilt = tilt; solenoid = 0; pc.baud(460800); printf("Test Airbrush!\r\n"); linearMotion.setStepMotors(&x, &y, &z, &solenoid, &paused, &stopped); wifi.createAdhocNetwork(); wifi.attach_interrupt(0x09, pause, 0); wifi.attach_interrupt(0x0a, stop, 1); led = 1; while (1) { while (pc.readable()) { wifi.putc(pc.getc()); } while (wifi.readable()) { pc.putc(wifi.getc()); } if (wifi.hasCmd()) { cmd = wifi.getCmd(); switch (cmd->cmd) { case 0x00: { //relative motion pc.printf("Move to relative coordinates x: %d, y:%d, z:%d\n\r", cmd->l[0], cmd->l[1], cmd->l[2]); Vector finalPos = {cmd->l[0], cmd->l[1], cmd->l[2]}; linearMotion.interpolate(finalPos,1); break; } case 0x01: { //move to specified global coordinates Vector relative = {cmd->l[0] - x.getPosition(), cmd->l[1] - y.getPosition(), cmd->l[2] - z.getPosition()}; pc.printf("Move to global coordinates x:%d, y:%d, z:%d, Tilt:%f, Pan:%f\n\r",cmd->l[0], cmd->l[1], cmd->l[2], z.getPosition(), tilt, pan); linearMotion.interpolate(relative, 10); break; } case 0x02: { //pretend paint an image Vector baseVector = {cmd->l[0], cmd->l[1], cmd->l[2]}; Vector heightVector = {cmd->l[3], cmd->l[4], cmd->l[5]}; pc.printf("Pretend to paint an image with corners at (x:%d, y:%d, z:%d), (x:%d, y:%d, z:%d) and (x:%d, y:%d, z:%d)\n\r", x.getPosition(), y.getPosition(), z.getPosition(), baseVector.x, baseVector.y, baseVector.z, heightVector.x, heightVector.y, heightVector.z); linearMotion.interpolateSquare(baseVector, heightVector, 10, false); break; } case 0x03: { //paint an image Vector baseVector = {cmd->l[0], cmd->l[1], cmd->l[2]}; Vector heightVector = {cmd->l[3], cmd->l[4], cmd->l[5]}; pc.printf("Paint the image with corners at (x:%d, y:%d, z:%d), (x:%d, y:%d, z:%d) and (x:%d, y:%d, z:%d)\n\r", x.getPosition(), y.getPosition(), z.getPosition(),baseVector.x,baseVector.y,baseVector.z,heightVector.x,heightVector.y,heightVector.z); linearMotion.interpolateSquare(baseVector,heightVector,200,true); break; } case 0x04: { //change the pan pan = cmd->f[0]; servoPan = pan; pc.printf("Change the pan to %f\n\r",pan); break; } case 0x05: { //change the tilt tilt = cmd->f[0]; servoTilt = tilt; pc.printf("Change the tilt to %f\n\r",tilt); break; } case 0x07: { //turn on the solenoid long t = cmd->l[0]; if (t) solenoid = 1; else solenoid = 0; break; } case 0x09: { // We accidentally got to a pause state paused = false; break; } default: { pc.printf("You should probably do something with case %x\n\r", cmd->cmd); break; } } stopped = false; Vector globalPos = {x.getPosition(), y.getPosition(), z.getPosition()}; savePosition(globalPos, pan, tilt); cmd->cmd = 8; cmd->l[0] = globalPos.x; cmd->l[1] = globalPos.y; cmd->l[2] = globalPos.z; cmd->f[3] = pan; cmd->f[4] = tilt; wifi.sendCmd(cmd); } } }