Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SDFileSystem max32630fthr USBDevice
main.cpp
- Committer:
- Lugs
- Date:
- 2019-07-16
- Revision:
- 2:93da96b41127
- Parent:
- 1:78ca0566c062
- Child:
- 3:3a4d2d10e298
File content as of revision 2:93da96b41127:
#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++]); //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\nMINI PIANO ver 1 \r\nMAKE SURE YOUR PUTTY IS SET TO NOT WAIT FOR [ENTER] \r\nMIDDLE A (A4) (440Hz) IS Y, [WHITE] KEYS VALID FROM 1 to L. \r\nPRESS SHIFT FOR SHARP\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 = 440, attached = 0;
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);
if(attached)
{
SampleTime.attach(&placeNewSample,ticker_period);
}
bLED = LED_OFF;
char c;
c = daplink.getc();
gLED = LED_ON;
switch(c)
{
case '1':
PlayingFreq = 98;
break;
case '!':
PlayingFreq = 404;
break;
case '2':
PlayingFreq = 110;
break;
case '@':
PlayingFreq = 117;
break;
case '3':
PlayingFreq = 123;
break;
case '4':
PlayingFreq = 131;
break;
case '$':
PlayingFreq = 139;
break;
case '5':
PlayingFreq = 147;
break;
case '%':
PlayingFreq = 156;
break;
case '6':
PlayingFreq = 165;
break;
case '7':
PlayingFreq = 175;
break;
case '&':
PlayingFreq = 185;
break;
case '8':
PlayingFreq = 196;
break;
case '*':
PlayingFreq = 208;
break;
case '9':
PlayingFreq = 220;
break;
case '(':
PlayingFreq = 233;
break;
case '0':
PlayingFreq = 247;
break;
case 'q':
PlayingFreq = 262;
break;
case 'Q':
PlayingFreq = 277;
break;
case 'w':
PlayingFreq = 294;
break;
case 'W':
PlayingFreq = 311;
break;
case 'e':
PlayingFreq = 330;
break;
case 'r':
PlayingFreq = 349;
break;
case 'R':
PlayingFreq = 370;
break;
case 't':
PlayingFreq = 392;
break;
case 'T':
PlayingFreq = 415;
break;
case 'y':
PlayingFreq = 440;
break;
case 'Y':
PlayingFreq = 466;
break;
case 'u':
PlayingFreq = 494;
break;
case 'i':
PlayingFreq = 523;
break;
case 'I':
PlayingFreq = 554;
break;
case 'o':
PlayingFreq = 587;
break;
case 'O':
PlayingFreq = 622;
break;
case 'p':
PlayingFreq = 659;
break;
case 'a':
PlayingFreq = 698;
break;
case 'A':
PlayingFreq = 740;
break;
case 's':
PlayingFreq = 784;
break;
case 'S':
PlayingFreq = 831;
break;
case 'd':
PlayingFreq = 880;
break;
case 'D':
PlayingFreq = 932;
break;
case 'f':
PlayingFreq = 988;
break;
case 'g':
PlayingFreq = 1047;
break;
case 'G':
PlayingFreq = 1109;
break;
case 'h':
PlayingFreq = 1175;
break;
case 'H':
PlayingFreq = 1245;
break;
case 'j':
PlayingFreq = 1319;
break;
case 'k':
PlayingFreq = 1397;
break;
case 'K':
PlayingFreq = 1480;
break;
case 'l':
PlayingFreq = 1568;
break;
case 'L':
PlayingFreq = 1661;
break;
case '\r':
attached = !attached;
break;
}
gLED = LED_OFF;
rLED = !rLED;
if(attached)
{
SampleTime.detach();
}
printf("\033[A\033[A\033[A\033[A");
}
};