Loop Infinite
/
1bitcraze
Where I try playing a sample via PwmOutput
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Fri Jul 15 2022 12:04:08 by 1.7.2