Where I try playing a sample via PwmOutput

Dependencies:   LCD_ST7735 mbed

Reading some old ZX Spectrum forums, I wanted to check wether playing a sample was possible. So far, no, but there's more things to try.

Committer:
loop
Date:
Sun Mar 08 21:51:59 2015 +0000
Revision:
0:167d81d4f79f
Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loop 0:167d81d4f79f 1 #include "mbed.h"
loop 0:167d81d4f79f 2 #include "sound.h"
loop 0:167d81d4f79f 3 #include "LCD_ST7735.h"
loop 0:167d81d4f79f 4 #include "font_IBM.h"
loop 0:167d81d4f79f 5 //#include "Sequencer.h"
loop 0:167d81d4f79f 6
loop 0:167d81d4f79f 7 //int main() {
loop 0:167d81d4f79f 8 // Sequencer seq;
loop 0:167d81d4f79f 9 // while (true) {
loop 0:167d81d4f79f 10 // wait(10.0f);
loop 0:167d81d4f79f 11 // seq.play();
loop 0:167d81d4f79f 12 // }
loop 0:167d81d4f79f 13
loop 0:167d81d4f79f 14 Ticker flipper;
loop 0:167d81d4f79f 15 LCD_ST7735 disp(P0_19, P0_20, P0_7, P0_21, P0_22, P1_15, P0_2, LCD_ST7735::RGB);
loop 0:167d81d4f79f 16 // led1(P0_9), led2(P0_8), pwm(P0_18)
loop 0:167d81d4f79f 17 PwmOut pwm(P0_18);
loop 0:167d81d4f79f 18 DigitalOut led1(P0_9);
loop 0:167d81d4f79f 19 DigitalOut led2(P0_8);
loop 0:167d81d4f79f 20 InterruptIn left(P0_14);
loop 0:167d81d4f79f 21 InterruptIn right(P0_11);
loop 0:167d81d4f79f 22 InterruptIn up(P0_13);
loop 0:167d81d4f79f 23 InterruptIn down(P0_12);
loop 0:167d81d4f79f 24
loop 0:167d81d4f79f 25 double srate = 1.0f/2000.0f;
loop 0:167d81d4f79f 26 double pwmrate = 1.0f/80000.0f;
loop 0:167d81d4f79f 27 unsigned short int idx = 0;
loop 0:167d81d4f79f 28
loop 0:167d81d4f79f 29 void printDouble(int y, double value) {
loop 0:167d81d4f79f 30 char buffer[10];
loop 0:167d81d4f79f 31 int len = sprintf(buffer, "%.1f", value);
loop 0:167d81d4f79f 32 disp.drawString(font_ibm, 0, y, buffer);
loop 0:167d81d4f79f 33 }
loop 0:167d81d4f79f 34 void pnext() {
loop 0:167d81d4f79f 35 pwm = (pcm_samples[idx++] / 255.0f);
loop 0:167d81d4f79f 36 if (idx == pcm_length) {
loop 0:167d81d4f79f 37 idx = 0;
loop 0:167d81d4f79f 38 led2 = !led2;
loop 0:167d81d4f79f 39 }
loop 0:167d81d4f79f 40 }
loop 0:167d81d4f79f 41
loop 0:167d81d4f79f 42 void setpwm() {
loop 0:167d81d4f79f 43 led1 = !led1;
loop 0:167d81d4f79f 44 printDouble(10, 1.0f/pwmrate);
loop 0:167d81d4f79f 45 pwm.period(pwmrate);
loop 0:167d81d4f79f 46 }
loop 0:167d81d4f79f 47 void setsrate() {
loop 0:167d81d4f79f 48 flipper.detach();
loop 0:167d81d4f79f 49 led2 = !led2;
loop 0:167d81d4f79f 50 printDouble(0, 1.0f/srate);
loop 0:167d81d4f79f 51 flipper.attach(&pnext, srate); // setup flipper to call flip after 2 seconds
loop 0:167d81d4f79f 52 }
loop 0:167d81d4f79f 53 void incf() {
loop 0:167d81d4f79f 54 srate *= 1.1f;
loop 0:167d81d4f79f 55 setsrate();
loop 0:167d81d4f79f 56 }
loop 0:167d81d4f79f 57 void decf() {
loop 0:167d81d4f79f 58 srate /= 1.1f;
loop 0:167d81d4f79f 59 setsrate();
loop 0:167d81d4f79f 60 }
loop 0:167d81d4f79f 61 void incpwm() {
loop 0:167d81d4f79f 62 pwmrate *= 1.1f;
loop 0:167d81d4f79f 63 setpwm();
loop 0:167d81d4f79f 64 }
loop 0:167d81d4f79f 65 void decpwm() {
loop 0:167d81d4f79f 66 pwmrate /= 1.1f;
loop 0:167d81d4f79f 67 setpwm();
loop 0:167d81d4f79f 68 }
loop 0:167d81d4f79f 69 int main() {
loop 0:167d81d4f79f 70 led2 = 1;
loop 0:167d81d4f79f 71 pwm.period(pwmrate);
loop 0:167d81d4f79f 72 left.mode(PullUp);
loop 0:167d81d4f79f 73 right.mode(PullUp);
loop 0:167d81d4f79f 74 up.mode(PullUp);
loop 0:167d81d4f79f 75 down.mode(PullUp);
loop 0:167d81d4f79f 76
loop 0:167d81d4f79f 77 right.rise(&incpwm);
loop 0:167d81d4f79f 78 left.rise(&decpwm);
loop 0:167d81d4f79f 79 up.rise(&incf);
loop 0:167d81d4f79f 80 down.rise(&decf);
loop 0:167d81d4f79f 81
loop 0:167d81d4f79f 82 disp.setOrientation(LCD_ST7735::Rotate270, false);
loop 0:167d81d4f79f 83 disp.clearScreen();
loop 0:167d81d4f79f 84 printDouble(0 , 1.0f/srate);
loop 0:167d81d4f79f 85 printDouble(10, 1.0f/pwmrate);
loop 0:167d81d4f79f 86
loop 0:167d81d4f79f 87 flipper.attach(&pnext, srate); // setup flipper to call flip after 2 seconds
loop 0:167d81d4f79f 88 led1 = 1;
loop 0:167d81d4f79f 89
loop 0:167d81d4f79f 90 while(1) {
loop 0:167d81d4f79f 91 // Watchdog. Have I crashed?
loop 0:167d81d4f79f 92 wait(10.0f);
loop 0:167d81d4f79f 93 led1 = !led1;
loop 0:167d81d4f79f 94 }
loop 0:167d81d4f79f 95 }