Where I try playing a sample via PwmOutput

Dependencies:   LCD_ST7735 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "sound.h"
00003 #include "LCD_ST7735.h"
00004 #include "font_IBM.h"
00005 //#include "Sequencer.h"
00006 
00007 //int main() {
00008 //    Sequencer seq;
00009 //    while (true) {
00010 //        wait(10.0f);
00011         //    seq.play();
00012 //    }
00013     
00014 Ticker flipper;
00015 LCD_ST7735 disp(P0_19, P0_20, P0_7, P0_21, P0_22, P1_15, P0_2, LCD_ST7735::RGB);
00016 // led1(P0_9), led2(P0_8), pwm(P0_18)
00017 PwmOut pwm(P0_18);
00018 DigitalOut led1(P0_9);
00019 DigitalOut led2(P0_8);
00020 InterruptIn left(P0_14);
00021 InterruptIn right(P0_11);
00022 InterruptIn up(P0_13);
00023 InterruptIn down(P0_12);
00024 
00025 double srate = 1.0f/2000.0f;
00026 double pwmrate = 1.0f/80000.0f;
00027 unsigned short int idx = 0;
00028 
00029 void printDouble(int y, double value) {
00030     char buffer[10];
00031     int len = sprintf(buffer, "%.1f", value);
00032     disp.drawString(font_ibm, 0, y, buffer);
00033 }
00034 void pnext() {
00035     pwm = (pcm_samples[idx++] / 255.0f);
00036     if (idx == pcm_length) {
00037       idx = 0;
00038       led2 = !led2;
00039     }
00040 }
00041 
00042 void setpwm() {
00043     led1 = !led1;
00044     printDouble(10, 1.0f/pwmrate);
00045     pwm.period(pwmrate);
00046 }
00047 void setsrate() {
00048     flipper.detach();
00049     led2 = !led2;
00050     printDouble(0, 1.0f/srate);
00051     flipper.attach(&pnext, srate); // setup flipper to call flip after 2 seconds
00052 }
00053 void incf() {
00054     srate *= 1.1f;
00055     setsrate();    
00056 }
00057 void decf() {
00058     srate /= 1.1f;
00059     setsrate();    
00060 }
00061 void incpwm() {
00062     pwmrate *= 1.1f;
00063     setpwm();
00064 }
00065 void decpwm() {
00066     pwmrate /= 1.1f;
00067     setpwm();
00068 }
00069 int main() {
00070     led2 = 1;
00071     pwm.period(pwmrate);
00072     left.mode(PullUp);
00073     right.mode(PullUp);
00074     up.mode(PullUp);
00075     down.mode(PullUp);
00076 
00077     right.rise(&incpwm);
00078     left.rise(&decpwm);
00079     up.rise(&incf);
00080     down.rise(&decf);
00081 
00082     disp.setOrientation(LCD_ST7735::Rotate270, false);    
00083     disp.clearScreen();
00084     printDouble(0 , 1.0f/srate);
00085     printDouble(10, 1.0f/pwmrate);
00086 
00087     flipper.attach(&pnext, srate); // setup flipper to call flip after 2 seconds
00088     led1 = 1;
00089     
00090     while(1) {
00091         // Watchdog. Have I crashed?
00092         wait(10.0f);
00093         led1 = !led1;
00094     }
00095 }