A drum machine sequenced by text file

Dependencies:   mbed

Committer:
simon
Date:
Sun Aug 29 11:00:36 2010 +0000
Revision:
0:454cad38222c

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:454cad38222c 1 // drum machine sequenced by text file, sford
simon 0:454cad38222c 2 // e.g. line contains -o--, where o is a hit
simon 0:454cad38222c 3
simon 0:454cad38222c 4 #include "mbed.h"
simon 0:454cad38222c 5
simon 0:454cad38222c 6 class Drum {
simon 0:454cad38222c 7 public:
simon 0:454cad38222c 8 Drum(PinName p) : x(p) {}
simon 0:454cad38222c 9
simon 0:454cad38222c 10 void off() { x = 0; }
simon 0:454cad38222c 11 void hit() {
simon 0:454cad38222c 12 x = 1;
simon 0:454cad38222c 13 t.attach(this, &Drum::off, 0.01);
simon 0:454cad38222c 14 }
simon 0:454cad38222c 15
simon 0:454cad38222c 16 DigitalOut x;
simon 0:454cad38222c 17 Timeout t;
simon 0:454cad38222c 18 };
simon 0:454cad38222c 19
simon 0:454cad38222c 20 Drum drums[4] = {p21, p22, p23, p24};
simon 0:454cad38222c 21 AnalogIn speed(p20);
simon 0:454cad38222c 22 BusOut leds(LED1, LED2, LED3, LED4);
simon 0:454cad38222c 23
simon 0:454cad38222c 24 LocalFileSystem local("local");
simon 0:454cad38222c 25
simon 0:454cad38222c 26 int main() {
simon 0:454cad38222c 27 int count = 0;
simon 0:454cad38222c 28 while(1) {
simon 0:454cad38222c 29 FILE *fp = fopen("/local/drums.txt", "r");
simon 0:454cad38222c 30 if(!fp) {
simon 0:454cad38222c 31 error("Couldn't open file\n");
simon 0:454cad38222c 32 }
simon 0:454cad38222c 33 char tracks[4];
simon 0:454cad38222c 34 while(!feof(fp)) {
simon 0:454cad38222c 35 fscanf(fp, "%c%c%c%c\n", &tracks[0], &tracks[1], &tracks[2], &tracks[3]);
simon 0:454cad38222c 36 for(int i=0; i<4; i++) {
simon 0:454cad38222c 37 if(tracks[i] == 'o') {
simon 0:454cad38222c 38 drums[i].hit();
simon 0:454cad38222c 39 }
simon 0:454cad38222c 40 }
simon 0:454cad38222c 41 leds = 1 << (count % 4);
simon 0:454cad38222c 42 count++;
simon 0:454cad38222c 43 wait(0.05 + speed);
simon 0:454cad38222c 44 }
simon 0:454cad38222c 45 count = 0;
simon 0:454cad38222c 46 fclose(fp);
simon 0:454cad38222c 47 }
simon 0:454cad38222c 48 }