quick and dirty POV for m3pi + better timings

Dependencies:   PinDetect mbed m3pi

main.cpp

Committer:
ryantm
Date:
2012-07-05
Revision:
0:5c3790819de2

File content as of revision 0:5c3790819de2:

#include "mbed.h"
#include "m3pi.h"
#include "PinDetect.h"

m3pi m3pi(p23,p9,p10);
PinDetect  pin( p21 );
bool advance = false;
Timer timer;
int leds = 0;

inline int ledHelper(bool on1,bool on2,bool on3,bool on4,bool on5,bool on6,bool on7,bool on8)
{
    return (on8 << 7) | (on7 << 6) | (on6 << 5) | (on5 << 4) | (on4 << 3) | (on3 << 2) | (on2 << 1) | (on1);
}

int setLeds(int newLeds)
{
    int i;
    for (i = 0; i < 8; i++)
    {
        if (newLeds & (1 << i))
            leds |= 1 << i;
        else
            leds &= ~(1 << i);
        m3pi.leds(leds);
        wait(0.0005);
    }
}


 void keyReleased( void ) {
    advance = true;
 }

// Ben's code
// through trial and error, found out that a full rotation takes ~240 ms
int main() {
    float pixel_width = 0.002;
    float space_width = pixel_width*2;
    int rotation_time_ms = 234;
   
    pin.mode( PullUp );
    pin.attach_deasserted( &keyReleased );
    pin.setSampleFrequency(); // Defaults to 20ms.
    
    m3pi.cls();
    m3pi.locate(0,1);
    m3pi.printf("%fV       ",m3pi.battery());
    
    wait(1.0);
    timer.start();
    while(1)
    {
        while(!advance);
        advance = false;
        
        m3pi.left_motor(-1.0);
        m3pi.right_motor(1.0);        
        while(1)
        {
            timer.reset();
            //H
            setLeds(ledHelper(1,1,1,1,1,1,1,1));
            wait(pixel_width);
            setLeds(ledHelper(0,0,0,1,1,0,0,0));
            wait(pixel_width*3);
            setLeds(ledHelper(1,1,1,1,1,1,1,1));
            wait(pixel_width);
            
            setLeds(ledHelper(0,0,0,0,0,0,0,0));
            wait(space_width);
            
            //E
            setLeds(ledHelper(1,1,1,1,1,1,1,1));
            wait(pixel_width);
            setLeds(ledHelper(1,1,0,1,1,0,1,1));
            wait(pixel_width*4);
            
            setLeds(ledHelper(0,0,0,0,0,0,0,0));
            wait(space_width);
            
            //L
            setLeds(ledHelper(1,1,1,1,1,1,1,1));
            wait(pixel_width);
            setLeds(ledHelper(1,1,0,0,0,0,0,0));
            wait(pixel_width*4);
            
            setLeds(ledHelper(0,0,0,0,0,0,0,0));
            wait(space_width);
            
            //L
            setLeds(ledHelper(1,1,1,1,1,1,1,1));
            wait(pixel_width);
            setLeds(ledHelper(1,1,0,0,0,0,0,0));
            wait(pixel_width*4);
            
            setLeds(ledHelper(0,0,0,0,0,0,0,0));
            wait(space_width);
            
            //O
            setLeds(ledHelper(1,1,1,1,1,1,1,1));
            wait(pixel_width);
            setLeds(ledHelper(1,1,0,0,0,0,1,1));
            wait(pixel_width*3);
            setLeds(ledHelper(1,1,1,1,1,1,1,1));
            wait(pixel_width);
            
            setLeds(ledHelper(0,0,0,0,0,0,0,0));
            
            int time = timer.read_ms();
            wait((rotation_time_ms - time) / 1000.);     
        }
        m3pi.stop();
    }
}