Lobster controller program

Dependencies:   FatFileSystem HBridge MSCFileSystem WavPlayer mbed

Fork of RSALB_hbridge_helloworld by Giles Barton-Owen

Committer:
p07gbar
Date:
Fri Sep 21 14:24:10 2012 +0000
Revision:
2:f8199cc69b20
Working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
p07gbar 2:f8199cc69b20 1 #include "ActionCue.h"
p07gbar 2:f8199cc69b20 2 #include "mbed.h"
p07gbar 2:f8199cc69b20 3
p07gbar 2:f8199cc69b20 4 #define ACTIONCUE_ORDERLIMIT 100
p07gbar 2:f8199cc69b20 5
p07gbar 2:f8199cc69b20 6 ActionCue::ActionCue()
p07gbar 2:f8199cc69b20 7 {
p07gbar 2:f8199cc69b20 8 start = 0;
p07gbar 2:f8199cc69b20 9 finish = 0;
p07gbar 2:f8199cc69b20 10 numStored = 0;
p07gbar 2:f8199cc69b20 11 for(int i = 0; i < ACTIONCUE_SIZE; i++)
p07gbar 2:f8199cc69b20 12 {
p07gbar 2:f8199cc69b20 13 cue[i] = Action();
p07gbar 2:f8199cc69b20 14 }
p07gbar 2:f8199cc69b20 15 }
p07gbar 2:f8199cc69b20 16
p07gbar 2:f8199cc69b20 17 void ActionCue::addAction(Action action_to_add)
p07gbar 2:f8199cc69b20 18 {
p07gbar 2:f8199cc69b20 19 cue[finish] = action_to_add;
p07gbar 2:f8199cc69b20 20 finish++;
p07gbar 2:f8199cc69b20 21 numStored++;
p07gbar 2:f8199cc69b20 22 if(finish >= start && numStored > ACTIONCUE_SIZE)
p07gbar 2:f8199cc69b20 23 {
p07gbar 2:f8199cc69b20 24 start++;
p07gbar 2:f8199cc69b20 25 }
p07gbar 2:f8199cc69b20 26 finish = wrap(finish);
p07gbar 2:f8199cc69b20 27 start = wrap(start);
p07gbar 2:f8199cc69b20 28 }
p07gbar 2:f8199cc69b20 29
p07gbar 2:f8199cc69b20 30 int ActionCue::numActionsStored()
p07gbar 2:f8199cc69b20 31 {
p07gbar 2:f8199cc69b20 32 return numStored;
p07gbar 2:f8199cc69b20 33 }
p07gbar 2:f8199cc69b20 34
p07gbar 2:f8199cc69b20 35 Action ActionCue::nextAction()
p07gbar 2:f8199cc69b20 36 {
p07gbar 2:f8199cc69b20 37 return cue[start];
p07gbar 2:f8199cc69b20 38 }
p07gbar 2:f8199cc69b20 39
p07gbar 2:f8199cc69b20 40 void ActionCue::usedFirst()
p07gbar 2:f8199cc69b20 41 {
p07gbar 2:f8199cc69b20 42 start++;
p07gbar 2:f8199cc69b20 43 numStored--;
p07gbar 2:f8199cc69b20 44 finish = wrap(finish);
p07gbar 2:f8199cc69b20 45 start = wrap(start);
p07gbar 2:f8199cc69b20 46 }
p07gbar 2:f8199cc69b20 47
p07gbar 2:f8199cc69b20 48 Action ActionCue::actionAt(float time)
p07gbar 2:f8199cc69b20 49 {
p07gbar 2:f8199cc69b20 50 for(int i = 0; i < ACTIONCUE_SIZE; i++)
p07gbar 2:f8199cc69b20 51 {
p07gbar 2:f8199cc69b20 52 if(cue[i].actionTime == time) return cue[i];
p07gbar 2:f8199cc69b20 53 }
p07gbar 2:f8199cc69b20 54 return Action();
p07gbar 2:f8199cc69b20 55 }
p07gbar 2:f8199cc69b20 56
p07gbar 2:f8199cc69b20 57 void ActionCue::orderCue()
p07gbar 2:f8199cc69b20 58 {
p07gbar 2:f8199cc69b20 59 int swapcount = 1;
p07gbar 2:f8199cc69b20 60 int runcount = 0;
p07gbar 2:f8199cc69b20 61 Action temp;
p07gbar 2:f8199cc69b20 62 while((swapcount > 0) && runcount < ACTIONCUE_ORDERLIMIT)
p07gbar 2:f8199cc69b20 63 {
p07gbar 2:f8199cc69b20 64 swapcount = 0;
p07gbar 2:f8199cc69b20 65 for(int i = 0; i < (numStored - 1); i++)
p07gbar 2:f8199cc69b20 66 {
p07gbar 2:f8199cc69b20 67 if(cue[wrap(i+1+start)].actionTime <= cue[wrap(i+start)].actionTime)
p07gbar 2:f8199cc69b20 68 {
p07gbar 2:f8199cc69b20 69 temp = cue[wrap(i+start)];
p07gbar 2:f8199cc69b20 70 cue[wrap(i+start)] = cue[wrap(i+1+start)];
p07gbar 2:f8199cc69b20 71 cue[wrap(i+1+start)] = temp;
p07gbar 2:f8199cc69b20 72 swapcount++;
p07gbar 2:f8199cc69b20 73 }
p07gbar 2:f8199cc69b20 74 }
p07gbar 2:f8199cc69b20 75 runcount++;
p07gbar 2:f8199cc69b20 76 }
p07gbar 2:f8199cc69b20 77 //printf("Ran: %i\n\r",runcount);
p07gbar 2:f8199cc69b20 78 }
p07gbar 2:f8199cc69b20 79
p07gbar 2:f8199cc69b20 80 int ActionCue::wrap(int in)
p07gbar 2:f8199cc69b20 81 {
p07gbar 2:f8199cc69b20 82 while(in >= ACTIONCUE_SIZE)
p07gbar 2:f8199cc69b20 83 {
p07gbar 2:f8199cc69b20 84 in -= ACTIONCUE_SIZE;
p07gbar 2:f8199cc69b20 85 }
p07gbar 2:f8199cc69b20 86 return in;
p07gbar 2:f8199cc69b20 87 }
p07gbar 2:f8199cc69b20 88
p07gbar 2:f8199cc69b20 89
p07gbar 2:f8199cc69b20 90
p07gbar 2:f8199cc69b20 91
p07gbar 2:f8199cc69b20 92
p07gbar 2:f8199cc69b20 93
p07gbar 2:f8199cc69b20 94