Lobster controller program
Dependencies: FatFileSystem HBridge MSCFileSystem WavPlayer mbed
Fork of RSALB_hbridge_helloworld by
ActionCue/ActionCue.cpp@2:f8199cc69b20, 2012-09-21 (annotated)
- Committer:
- p07gbar
- Date:
- Fri Sep 21 14:24:10 2012 +0000
- Revision:
- 2:f8199cc69b20
Working
Who changed what in which revision?
User | Revision | Line number | New 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 |