For MAX32630FTHR Demo Board: Plays piano notes mapped to keyboard keys interfaced through serial port (puTTY or powershell).
Dependencies: SDFileSystem max32630fthr USBDevice
main.cpp
- Committer:
- Lugs
- Date:
- 2019-07-16
- Revision:
- 1:78ca0566c062
- Parent:
- 0:ad5ce0aff429
- Child:
- 2:93da96b41127
File content as of revision 1:78ca0566c062:
#include "mbed.h" #include "max32630fthr.h" #include "USBSerial.h" #include "stdio.h" #include "SDFileSystem.h" //still needs BITS PER SAMPLE PARSING. //do this like so: PWM.write(WavValue/2^BPS) #define BUFFER_SIZE 128 #define HALF_BUFFER 64 DigitalOut rLED(LED1); DigitalOut gLED(LED2); DigitalOut bLED(LED3); DigitalIn Button(P2_3); MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3); PwmOut PWM(P5_6); AnalogIn POT(AIN_0); volatile int bufferPOS = 0; volatile unsigned int g=0; Serial daplink(P2_1,P2_0); USBSerial microUSB; SDFileSystem sd(P0_5, P0_6, P0_4, P0_7, "sd"); float audioDataBuffer[BUFFER_SIZE]; struct WavFile { long int size; int channels; int sampleRate; int bitsPerSample; }; float potval,reading; void placeNewSample(void) { PWM.write(audioDataBuffer[bufferPOS++]*!Button); //multiply by POT value for volume. bufferPOS = (bufferPOS+1) & 0x07F; } int main() { WavFile Track; Ticker SampleTime; daplink.printf("\f---DAPLINK SERIAL PORT---\r\n\r\nPLAY TONE VER 26 \r\n (CHANGEABLE TONE) MAX FREQUENCY: 1680. \r\n AFTER 1680Hz INPUTS CANNOT BE PROCESSED.\r\n\r\n"); microUSB.printf("micro USB serial port\r\n"); rLED = LED_ON; wait_ms(500); rLED = LED_OFF; gLED = LED_ON; wait_ms(500); bLED = LED_ON; gLED = LED_OFF; printf("Generating sine...\r\n"); int i; for(i=0; i<128;i++) { audioDataBuffer[i] =((1.0 + sin((double(i)/16.0*6.28318530717959)))/2.0); //formula copied from mbed example } printf("Playing tone...\r\n"); int PlayingFreq = 500; while(1) { Track.sampleRate = PlayingFreq * 16; //TONE FREQ = SAMPLE RATE / SAMPLES PER CYCLE PWM.period_us(1); //1MHz float ticker_period = (float) 1/(Track.sampleRate); printf("\r\nTicker Period: %f\tTicker Freq: %f\r\nTarget Freq: %i\r\n\r\n",ticker_period, 1/ticker_period, PlayingFreq); SampleTime.attach(&placeNewSample,ticker_period); bLED = LED_OFF; char c; char number[10]; for(i=0;i<10 && c != '\r' && c != '\n'; i++) { c = daplink.getc(); number[i] = c; } gLED = LED_ON; PlayingFreq = strtol(number,NULL,0); gLED = LED_OFF; rLED = !rLED; SampleTime.detach(); } };