A test program for the RS animatronic lab board motor drivers.
Dependencies: HBridge mbed FatFileSystem MSCFileSystem WavPlayer
main.cpp@2:f8199cc69b20, 2012-09-21 (annotated)
- Committer:
- p07gbar
- Date:
- Fri Sep 21 14:24:10 2012 +0000
- Revision:
- 2:f8199cc69b20
- Parent:
- 0:0c8935f6db19
Working
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
p07gbar | 2:f8199cc69b20 | 1 | #include "mbed.h" |
p07gbar | 2:f8199cc69b20 | 2 | #include "HBridge.h" |
p07gbar | 2:f8199cc69b20 | 3 | #include "ActionCue.h" |
p07gbar | 2:f8199cc69b20 | 4 | #include "WavPlayer.h" |
p07gbar | 2:f8199cc69b20 | 5 | #include "MSCFileSystem.h" |
p07gbar | 2:f8199cc69b20 | 6 | |
p07gbar | 2:f8199cc69b20 | 7 | #define TICK_TIME 0.05 |
p07gbar | 2:f8199cc69b20 | 8 | |
p07gbar | 2:f8199cc69b20 | 9 | MSCFileSystem msc("msc"); // Mount flash drive under the name "msc" |
p07gbar | 2:f8199cc69b20 | 10 | LocalFileSystem local("local"); |
p07gbar | 2:f8199cc69b20 | 11 | WavPlayer player; |
p07gbar | 2:f8199cc69b20 | 12 | |
p07gbar | 2:f8199cc69b20 | 13 | HBridge hbridge(p18,p15,p22); |
p07gbar | 2:f8199cc69b20 | 14 | DigitalIn button(p16); |
p07gbar | 2:f8199cc69b20 | 15 | AnalogIn pot1(p19); |
p07gbar | 2:f8199cc69b20 | 16 | |
p07gbar | 2:f8199cc69b20 | 17 | HBridge hbridge2(p28,p27,p21); |
p07gbar | 2:f8199cc69b20 | 18 | DigitalIn button2(p17); |
p07gbar | 2:f8199cc69b20 | 19 | AnalogIn pot2(p20); |
p07gbar | 2:f8199cc69b20 | 20 | |
p07gbar | 2:f8199cc69b20 | 21 | DigitalOut led1(LED1); |
p07gbar | 2:f8199cc69b20 | 22 | DigitalOut led2(LED2); |
p07gbar | 2:f8199cc69b20 | 23 | |
p07gbar | 2:f8199cc69b20 | 24 | ActionCue cue; |
p07gbar | 2:f8199cc69b20 | 25 | |
p07gbar | 2:f8199cc69b20 | 26 | Ticker ticks; |
p07gbar | 2:f8199cc69b20 | 27 | |
p07gbar | 2:f8199cc69b20 | 28 | float c_time; |
p07gbar | 2:f8199cc69b20 | 29 | |
p07gbar | 2:f8199cc69b20 | 30 | int audioNumber = 0; |
p07gbar | 2:f8199cc69b20 | 31 | float audioTime = 0; |
p07gbar | 2:f8199cc69b20 | 32 | |
p07gbar | 2:f8199cc69b20 | 33 | extern "C" void HardFault_Handler() |
p07gbar | 2:f8199cc69b20 | 34 | { |
p07gbar | 2:f8199cc69b20 | 35 | error("Hard Fault!\n"); |
p07gbar | 2:f8199cc69b20 | 36 | } |
p07gbar | 2:f8199cc69b20 | 37 | |
p07gbar | 2:f8199cc69b20 | 38 | |
p07gbar | 2:f8199cc69b20 | 39 | enum actionTypes |
p07gbar | 2:f8199cc69b20 | 40 | { |
p07gbar | 2:f8199cc69b20 | 41 | Null = -1, |
p07gbar | 2:f8199cc69b20 | 42 | Debug = 0, |
p07gbar | 2:f8199cc69b20 | 43 | c_led1, |
p07gbar | 2:f8199cc69b20 | 44 | c_led2, |
p07gbar | 2:f8199cc69b20 | 45 | motor1, |
p07gbar | 2:f8199cc69b20 | 46 | motor2, |
p07gbar | 2:f8199cc69b20 | 47 | play |
p07gbar | 2:f8199cc69b20 | 48 | }; |
p07gbar | 2:f8199cc69b20 | 49 | |
p07gbar | 2:f8199cc69b20 | 50 | void onTick() |
p07gbar | 2:f8199cc69b20 | 51 | { |
p07gbar | 2:f8199cc69b20 | 52 | while(cue.numActionsStored() > 0) |
p07gbar | 2:f8199cc69b20 | 53 | { |
p07gbar | 2:f8199cc69b20 | 54 | Action act = cue.nextAction(); |
p07gbar | 2:f8199cc69b20 | 55 | if(act.actionTime <= c_time) |
p07gbar | 2:f8199cc69b20 | 56 | { |
p07gbar | 2:f8199cc69b20 | 57 | cue.usedFirst(); |
p07gbar | 2:f8199cc69b20 | 58 | //printf("Action. Time: %f Type: %i\n\r",act.actionTime, act.actionType); |
p07gbar | 2:f8199cc69b20 | 59 | switch(act.actionType) |
p07gbar | 2:f8199cc69b20 | 60 | { |
p07gbar | 2:f8199cc69b20 | 61 | case Debug: |
p07gbar | 2:f8199cc69b20 | 62 | printf("Action. Time: %f Type: %i\n\r",act.actionTime, act.actionType); |
p07gbar | 2:f8199cc69b20 | 63 | break; |
p07gbar | 2:f8199cc69b20 | 64 | case c_led1: |
p07gbar | 2:f8199cc69b20 | 65 | led1 = bool(act.actionInt); |
p07gbar | 2:f8199cc69b20 | 66 | break; |
p07gbar | 2:f8199cc69b20 | 67 | case c_led2: |
p07gbar | 2:f8199cc69b20 | 68 | led2 = bool(act.actionInt); |
p07gbar | 2:f8199cc69b20 | 69 | break; |
p07gbar | 2:f8199cc69b20 | 70 | case motor1: |
p07gbar | 2:f8199cc69b20 | 71 | hbridge.speed(act.actionFloat); |
p07gbar | 2:f8199cc69b20 | 72 | hbridge.power(true); |
p07gbar | 2:f8199cc69b20 | 73 | break; |
p07gbar | 2:f8199cc69b20 | 74 | case motor2: |
p07gbar | 2:f8199cc69b20 | 75 | hbridge2.speed(act.actionFloat); |
p07gbar | 2:f8199cc69b20 | 76 | hbridge2.power(true); |
p07gbar | 2:f8199cc69b20 | 77 | break; |
p07gbar | 2:f8199cc69b20 | 78 | case play: |
p07gbar | 2:f8199cc69b20 | 79 | audioNumber = act.actionInt; |
p07gbar | 2:f8199cc69b20 | 80 | audioTime = act.actionFloat; |
p07gbar | 2:f8199cc69b20 | 81 | break; |
p07gbar | 2:f8199cc69b20 | 82 | default: |
p07gbar | 2:f8199cc69b20 | 83 | break; |
p07gbar | 2:f8199cc69b20 | 84 | } |
p07gbar | 2:f8199cc69b20 | 85 | } |
p07gbar | 2:f8199cc69b20 | 86 | else |
p07gbar | 2:f8199cc69b20 | 87 | { |
p07gbar | 2:f8199cc69b20 | 88 | break; |
p07gbar | 2:f8199cc69b20 | 89 | } |
p07gbar | 2:f8199cc69b20 | 90 | } |
p07gbar | 2:f8199cc69b20 | 91 | c_time += float(TICK_TIME); |
p07gbar | 2:f8199cc69b20 | 92 | } |
p07gbar | 2:f8199cc69b20 | 93 | |
p07gbar | 2:f8199cc69b20 | 94 | actionTypes parseType(char in[4]) |
p07gbar | 2:f8199cc69b20 | 95 | { |
p07gbar | 2:f8199cc69b20 | 96 | if(strcmp(in, "NULL") == 0) return Null; |
p07gbar | 2:f8199cc69b20 | 97 | else if(strcmp(in, "DEBG") == 0) return Debug; |
p07gbar | 2:f8199cc69b20 | 98 | else if(strcmp(in, "LED1") == 0) return c_led1; |
p07gbar | 2:f8199cc69b20 | 99 | else if(strcmp(in, "LED2") == 0) return c_led2; |
p07gbar | 2:f8199cc69b20 | 100 | else if(strcmp(in, "MTR1") == 0) return motor1; |
p07gbar | 2:f8199cc69b20 | 101 | else if(strcmp(in, "MTR2") == 0) return motor2; |
p07gbar | 2:f8199cc69b20 | 102 | else if(strcmp(in, "PLAY") == 0) return play; |
p07gbar | 2:f8199cc69b20 | 103 | else return Null; |
p07gbar | 2:f8199cc69b20 | 104 | } |
p07gbar | 2:f8199cc69b20 | 105 | |
p07gbar | 2:f8199cc69b20 | 106 | int main() { |
p07gbar | 2:f8199cc69b20 | 107 | button.mode(PullDown); |
p07gbar | 2:f8199cc69b20 | 108 | ticks.attach(&onTick,TICK_TIME); |
p07gbar | 2:f8199cc69b20 | 109 | c_time = 0; |
p07gbar | 2:f8199cc69b20 | 110 | int returned = 4; |
p07gbar | 2:f8199cc69b20 | 111 | printf("Opening the file \n\r"); |
p07gbar | 2:f8199cc69b20 | 112 | FILE* sequence = fopen("/local/seq.txt","r"); |
p07gbar | 2:f8199cc69b20 | 113 | |
p07gbar | 2:f8199cc69b20 | 114 | if(sequence != NULL) |
p07gbar | 2:f8199cc69b20 | 115 | { |
p07gbar | 2:f8199cc69b20 | 116 | printf("File opened\n\r"); |
p07gbar | 2:f8199cc69b20 | 117 | while(returned >= 2) |
p07gbar | 2:f8199cc69b20 | 118 | { |
p07gbar | 2:f8199cc69b20 | 119 | float temptime = 0; |
p07gbar | 2:f8199cc69b20 | 120 | char code[5]; |
p07gbar | 2:f8199cc69b20 | 121 | int tempint = 0; |
p07gbar | 2:f8199cc69b20 | 122 | float tempfloat = 0; |
p07gbar | 2:f8199cc69b20 | 123 | returned = fscanf(sequence, "%f %4s %d %f", &temptime, &code, &tempint, &tempfloat); |
p07gbar | 2:f8199cc69b20 | 124 | |
p07gbar | 2:f8199cc69b20 | 125 | if(returned >= 2) |
p07gbar | 2:f8199cc69b20 | 126 | { |
p07gbar | 2:f8199cc69b20 | 127 | actionTypes temptype = parseType(code); |
p07gbar | 2:f8199cc69b20 | 128 | Action act(temptime, temptype, tempint, tempfloat); |
p07gbar | 2:f8199cc69b20 | 129 | cue.addAction(act); |
p07gbar | 2:f8199cc69b20 | 130 | printf("Read Action. Time: %f Type: %i\n\r",act.actionTime, act.actionType); |
p07gbar | 2:f8199cc69b20 | 131 | |
p07gbar | 2:f8199cc69b20 | 132 | } |
p07gbar | 2:f8199cc69b20 | 133 | } |
p07gbar | 2:f8199cc69b20 | 134 | } |
p07gbar | 2:f8199cc69b20 | 135 | |
p07gbar | 2:f8199cc69b20 | 136 | cue.orderCue(); |
p07gbar | 2:f8199cc69b20 | 137 | |
p07gbar | 2:f8199cc69b20 | 138 | while(1) |
p07gbar | 2:f8199cc69b20 | 139 | { |
p07gbar | 2:f8199cc69b20 | 140 | if(audioNumber != 0) |
p07gbar | 2:f8199cc69b20 | 141 | { |
p07gbar | 2:f8199cc69b20 | 142 | char filename[16]; |
p07gbar | 2:f8199cc69b20 | 143 | sprintf(filename, "/msc/%2.2i.wav",audioNumber); |
p07gbar | 2:f8199cc69b20 | 144 | printf("Playin': %s\n\r",filename); |
p07gbar | 2:f8199cc69b20 | 145 | FILE* file = fopen(filename, "r"); |
p07gbar | 2:f8199cc69b20 | 146 | player.open(&file); |
p07gbar | 2:f8199cc69b20 | 147 | if(audioTime == 0) player.play(); |
p07gbar | 2:f8199cc69b20 | 148 | else player.play(audioTime); |
p07gbar | 2:f8199cc69b20 | 149 | fclose(file); |
p07gbar | 2:f8199cc69b20 | 150 | audioNumber = 0; |
p07gbar | 2:f8199cc69b20 | 151 | } |
p07gbar | 2:f8199cc69b20 | 152 | } |
p07gbar | 2:f8199cc69b20 | 153 | |
p07gbar | 2:f8199cc69b20 | 154 | |
p07gbar | 2:f8199cc69b20 | 155 | } |