quick and dirty POV for m3pi + better timings
Dependencies: PinDetect mbed m3pi
main.cpp@0:5c3790819de2, 2012-07-05 (annotated)
- Committer:
- ryantm
- Date:
- Thu Jul 05 18:57:50 2012 +0000
- Revision:
- 0:5c3790819de2
Who changed what in which revision?
User | Revision | Line number | New 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 | } |