Simon Ford
/
DrumMachine
A drum machine sequenced by text file
main.cpp@0:454cad38222c, 2010-08-29 (annotated)
- Committer:
- simon
- Date:
- Sun Aug 29 11:00:36 2010 +0000
- Revision:
- 0:454cad38222c
Who changed what in which revision?
User | Revision | Line number | New 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 | } |