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: mbed
Diff: main.cpp
- Revision:
- 2:07cef563acdf
- Parent:
- 1:766a293c9b07
- Child:
- 3:b7df72682b81
--- a/main.cpp Thu Feb 06 12:59:16 2020 +0000 +++ b/main.cpp Mon Mar 30 15:03:36 2020 +0000 @@ -1,4 +1,4 @@ -/* +/* ELEC2645 Embedded Systems Project School of Electronic & Electrical Engineering University of Leeds @@ -7,21 +7,172 @@ Name: Luke Cartwright Username: el18loc Student ID Number: 201225242 -Date: 06/02/2019 +Start Date: 06/02/2020 +Last Edited: 12/03/2020 */ -// includes +// Includes #include "mbed.h" #include "Gamepad.h" #include "N5110.h" - -// objects +// Objects Gamepad pad; N5110 lcd; +Timer t; + +Serial pc(USBTX, USBRX); + +//Functions +void startup(); +void squareWave(); +void wavetable(); +void sinspeak(); + +//Arrays for startup +const int notes[8] = {330,0,330,294,330,247,294,392}; +const int duration[8] = {4,8,4,8,8,4,8,4}; +const char CART[4] = {'C','A','R','T'}; +const char SYNTH[5] = {'S','Y','N','T','H'}; + +//Global Variables +volatile int o[4096]; int main() { + printf("RUNNING CODE \n"); + startup(); + wavetable(); + pad.leds_on(); + sinspeak(); + pad.leds_off(); + printf("Waiting for button press \n"); + while (1) { + int a = pad.A_pressed(); + if (pad.A_pressed()==true) { + printf("A Pressed \n"); + sinspeak(); + } + //wait_ms(10); + printf("A= %d \n", a); + } +// squareWave(); +} + + +void startup() +{ + pad.init(); //initiate Gamepad + pad.leds_on(); //turn LEDS on to show starting up + pad.play_melody(8,notes,duration,108,0); //play startup tune + printf("Initialising Pad\n"); + lcd.init(); //intitates screen + lcd.clear(); + lcd.setContrast(0.4f); //contrast setting + lcd.inverseMode(); //puts screen in -ve + //positions for CART SYNTH + const int x = 10; + const int y = 2; + const int a = 40; + const int b = 4; + //Prints CART SYNTH to display + lcd.printString(CART,x,y); + lcd.printString(SYNTH,a,b); + lcd.refresh(); + wait_ms(1800); //timer to allow theme to play out + lcd.clear(); + lcd.refresh(); //sets clear screen + pad.leds_off(); //turns of leds to show ready } + + + +void wavetable() +{ + int samples= 4096; + float sinfl[samples]; + int sinf[samples]; + + pad.leds_on(); //shows computating + printf("Generating Wavetable \n"); + wait_ms(500); //shows reaches stage + + float ifl=0.0; //creates fl type incramenter + + for (int i=0; i<4096; i++) { + sinfl[i] = 6553500.0f*sin(2.0f*PI*(ifl/4096.0f)); + sinf[i] = sinfl[i]/100.0f; + o[i]= sinf[i]+32767; //generates wave table + //printf("o[i]= %d",o[i], "\n"); // Used for Debug + ifl=i+1.0f; + } + pad.leds_off(); +} +void sinspeak () +{ + float f=440.0; + float f1=440.0; + float f2=1.0; + float i=0; + //int i1=0; + float i2=0; + int v=0; + int inc=0; + pad.reset_buttons(); + f1 = pad.read_pot1(); + //f2 = pad.read_pot2(); + f1 = 440.0f+440.0f*f; + f2 = 5.0f*f2; + printf("f1= %f \n",f1); // Used for Debug + printf("f2= %f \n",f2); + + while (inc<3000) { + int inti = i; + v = o[inti]; + printf("OUTPUT: %d \n", v); + //pad.write_u16(v); + wait_us(190); //200us but 150 for delay (uncalculated) + + i2 = i2 + ((4096*f2)/5000); //i2+((samples*f)*Ts) + if (i2>=4096) { + i2=i2-4096; + } + int inti2 = i2; + int x = (o[inti2]/6554)-5; //(amp/6554)-offset =sin10f + float xfloat = x; + printf("x= %d \n", x); // Used for Debug + f = f1 + xfloat; + + i = i + ((4096.0f*f)/5000.0f); //i+((samples*f)*Ts) + if (i>=4096.0f) { + i=i-4096.0f; + } + + inc++; + } +} + +void squareWave() +{ + // defines local variables + float v = 0.0; + float f = 440.0; + float p1 = 0; + // continual loop for square production + while (1) { + pad.write_dac(v); //wite out value (1/0) + //Statements for switch of out + if (v == 0.0f) { + v=0.1; + } else { + v=0.0; + } + p1 = pad.read_pot1(); //read pot 1 value + f = 440 + 440*p1; //convert to freq (A4->A5) + float T=1/f; //calc Period of wave + wait(T); //timer for switch value (T) + } + +}