A test program for the RS animatronic lab board motor drivers.

Dependencies:   HBridge mbed FatFileSystem MSCFileSystem WavPlayer

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

Who changed what in which revision?

UserRevisionLine numberNew 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 }