quick and dirty POV for m3pi + better timings

Dependencies:   PinDetect mbed m3pi

Committer:
ryantm
Date:
Thu Jul 05 18:57:50 2012 +0000
Revision:
0:5c3790819de2

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryantm 0:5c3790819de2 1 #include "mbed.h"
ryantm 0:5c3790819de2 2 #include "m3pi.h"
ryantm 0:5c3790819de2 3 #include "PinDetect.h"
ryantm 0:5c3790819de2 4
ryantm 0:5c3790819de2 5 m3pi m3pi(p23,p9,p10);
ryantm 0:5c3790819de2 6 PinDetect pin( p21 );
ryantm 0:5c3790819de2 7 bool advance = false;
ryantm 0:5c3790819de2 8 Timer timer;
ryantm 0:5c3790819de2 9 int leds = 0;
ryantm 0:5c3790819de2 10
ryantm 0:5c3790819de2 11 inline int ledHelper(bool on1,bool on2,bool on3,bool on4,bool on5,bool on6,bool on7,bool on8)
ryantm 0:5c3790819de2 12 {
ryantm 0:5c3790819de2 13 return (on8 << 7) | (on7 << 6) | (on6 << 5) | (on5 << 4) | (on4 << 3) | (on3 << 2) | (on2 << 1) | (on1);
ryantm 0:5c3790819de2 14 }
ryantm 0:5c3790819de2 15
ryantm 0:5c3790819de2 16 int setLeds(int newLeds)
ryantm 0:5c3790819de2 17 {
ryantm 0:5c3790819de2 18 int i;
ryantm 0:5c3790819de2 19 for (i = 0; i < 8; i++)
ryantm 0:5c3790819de2 20 {
ryantm 0:5c3790819de2 21 if (newLeds & (1 << i))
ryantm 0:5c3790819de2 22 leds |= 1 << i;
ryantm 0:5c3790819de2 23 else
ryantm 0:5c3790819de2 24 leds &= ~(1 << i);
ryantm 0:5c3790819de2 25 m3pi.leds(leds);
ryantm 0:5c3790819de2 26 wait(0.0005);
ryantm 0:5c3790819de2 27 }
ryantm 0:5c3790819de2 28 }
ryantm 0:5c3790819de2 29
ryantm 0:5c3790819de2 30
ryantm 0:5c3790819de2 31 void keyReleased( void ) {
ryantm 0:5c3790819de2 32 advance = true;
ryantm 0:5c3790819de2 33 }
ryantm 0:5c3790819de2 34
ryantm 0:5c3790819de2 35 // Ben's code
ryantm 0:5c3790819de2 36 // through trial and error, found out that a full rotation takes ~240 ms
ryantm 0:5c3790819de2 37 int main() {
ryantm 0:5c3790819de2 38 float pixel_width = 0.002;
ryantm 0:5c3790819de2 39 float space_width = pixel_width*2;
ryantm 0:5c3790819de2 40 int rotation_time_ms = 234;
ryantm 0:5c3790819de2 41
ryantm 0:5c3790819de2 42 pin.mode( PullUp );
ryantm 0:5c3790819de2 43 pin.attach_deasserted( &keyReleased );
ryantm 0:5c3790819de2 44 pin.setSampleFrequency(); // Defaults to 20ms.
ryantm 0:5c3790819de2 45
ryantm 0:5c3790819de2 46 m3pi.cls();
ryantm 0:5c3790819de2 47 m3pi.locate(0,1);
ryantm 0:5c3790819de2 48 m3pi.printf("%fV ",m3pi.battery());
ryantm 0:5c3790819de2 49
ryantm 0:5c3790819de2 50 wait(1.0);
ryantm 0:5c3790819de2 51 timer.start();
ryantm 0:5c3790819de2 52 while(1)
ryantm 0:5c3790819de2 53 {
ryantm 0:5c3790819de2 54 while(!advance);
ryantm 0:5c3790819de2 55 advance = false;
ryantm 0:5c3790819de2 56
ryantm 0:5c3790819de2 57 m3pi.left_motor(-1.0);
ryantm 0:5c3790819de2 58 m3pi.right_motor(1.0);
ryantm 0:5c3790819de2 59 while(1)
ryantm 0:5c3790819de2 60 {
ryantm 0:5c3790819de2 61 timer.reset();
ryantm 0:5c3790819de2 62 //H
ryantm 0:5c3790819de2 63 setLeds(ledHelper(1,1,1,1,1,1,1,1));
ryantm 0:5c3790819de2 64 wait(pixel_width);
ryantm 0:5c3790819de2 65 setLeds(ledHelper(0,0,0,1,1,0,0,0));
ryantm 0:5c3790819de2 66 wait(pixel_width*3);
ryantm 0:5c3790819de2 67 setLeds(ledHelper(1,1,1,1,1,1,1,1));
ryantm 0:5c3790819de2 68 wait(pixel_width);
ryantm 0:5c3790819de2 69
ryantm 0:5c3790819de2 70 setLeds(ledHelper(0,0,0,0,0,0,0,0));
ryantm 0:5c3790819de2 71 wait(space_width);
ryantm 0:5c3790819de2 72
ryantm 0:5c3790819de2 73 //E
ryantm 0:5c3790819de2 74 setLeds(ledHelper(1,1,1,1,1,1,1,1));
ryantm 0:5c3790819de2 75 wait(pixel_width);
ryantm 0:5c3790819de2 76 setLeds(ledHelper(1,1,0,1,1,0,1,1));
ryantm 0:5c3790819de2 77 wait(pixel_width*4);
ryantm 0:5c3790819de2 78
ryantm 0:5c3790819de2 79 setLeds(ledHelper(0,0,0,0,0,0,0,0));
ryantm 0:5c3790819de2 80 wait(space_width);
ryantm 0:5c3790819de2 81
ryantm 0:5c3790819de2 82 //L
ryantm 0:5c3790819de2 83 setLeds(ledHelper(1,1,1,1,1,1,1,1));
ryantm 0:5c3790819de2 84 wait(pixel_width);
ryantm 0:5c3790819de2 85 setLeds(ledHelper(1,1,0,0,0,0,0,0));
ryantm 0:5c3790819de2 86 wait(pixel_width*4);
ryantm 0:5c3790819de2 87
ryantm 0:5c3790819de2 88 setLeds(ledHelper(0,0,0,0,0,0,0,0));
ryantm 0:5c3790819de2 89 wait(space_width);
ryantm 0:5c3790819de2 90
ryantm 0:5c3790819de2 91 //L
ryantm 0:5c3790819de2 92 setLeds(ledHelper(1,1,1,1,1,1,1,1));
ryantm 0:5c3790819de2 93 wait(pixel_width);
ryantm 0:5c3790819de2 94 setLeds(ledHelper(1,1,0,0,0,0,0,0));
ryantm 0:5c3790819de2 95 wait(pixel_width*4);
ryantm 0:5c3790819de2 96
ryantm 0:5c3790819de2 97 setLeds(ledHelper(0,0,0,0,0,0,0,0));
ryantm 0:5c3790819de2 98 wait(space_width);
ryantm 0:5c3790819de2 99
ryantm 0:5c3790819de2 100 //O
ryantm 0:5c3790819de2 101 setLeds(ledHelper(1,1,1,1,1,1,1,1));
ryantm 0:5c3790819de2 102 wait(pixel_width);
ryantm 0:5c3790819de2 103 setLeds(ledHelper(1,1,0,0,0,0,1,1));
ryantm 0:5c3790819de2 104 wait(pixel_width*3);
ryantm 0:5c3790819de2 105 setLeds(ledHelper(1,1,1,1,1,1,1,1));
ryantm 0:5c3790819de2 106 wait(pixel_width);
ryantm 0:5c3790819de2 107
ryantm 0:5c3790819de2 108 setLeds(ledHelper(0,0,0,0,0,0,0,0));
ryantm 0:5c3790819de2 109
ryantm 0:5c3790819de2 110 int time = timer.read_ms();
ryantm 0:5c3790819de2 111 wait((rotation_time_ms - time) / 1000.);
ryantm 0:5c3790819de2 112 }
ryantm 0:5c3790819de2 113 m3pi.stop();
ryantm 0:5c3790819de2 114 }
ryantm 0:5c3790819de2 115 }