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.
main.cpp
- Committer:
- lukeocarwright
- Date:
- 2020-05-19
- Revision:
- 14:9cfe0041cc4e
- Parent:
- 13:27300c533dd1
- Child:
- 15:1c67f064278e
File content as of revision 14:9cfe0041cc4e:
/* ELEC2645 Embedded Systems Project School of Electronic & Electrical Engineering University of Leeds 2019/20 Name: Luke Cartwright Username: el18loc Student ID Number: 201225242 Start Date: 06/02/2020 Last Edited: 19/05/2020 */ /* TO DO: Generate sound add Menu functionality from front.cpp front.h warning sort Settings tab ADSR (functionaluty) MIDI LEDS INSTALL */ // Includes #include "mbed.h" #include "Gamepad.h" #include "N5110.h" #include "Menu.h" #include "startup.h" #include "Front.h" #ifdef DEBUG # include "Debug.h" #endif // Objects Gamepad pad; N5110 lcd; Menu menu; startup start; Ticker tick; //DigitalOut rca(PTC4); //Serial pc(USBTX, USBRX); //Functions //void squareWave(); //void sinspeak(); void noise_isr(); //Global Variables volatile extern int g_isr_flag; //may need extern int main() { printf("RUNNING CODE \n"); start.initialise(lcd,pad); //initialises board and displays start screen #ifdef DEBUG printf("DEBUG COMPILE RUNNING\n"); run_LUTs_debug(); #endif #ifdef SLOW_TIME //ATTACH TICKERS FOR SOUND tick.attach_us(&noise_isr, 100000); //extended for debug (1Hz) #else tick.attach_us(&noise_isr, 250); //normal mode (4kHz) #endif menu.mainmenu(lcd,pad); //UNUSED FUNCTIONS:------------------------------------------------------------- //squareWave(); //generates pulse wave modulated by sin wave //sinspeak(); } void noise_isr() { #ifdef SLOW_TIME if (g_isr_flag==0) { printf("ISR INTTERUPT = 1\n"); } #endif g_isr_flag=1; } /* void squareWave() { printf("Generating SIN PWM \n"); int i=0; //int based iterator float ifl=0; //float based itterator float f=50; //frequency of sin wave produced period.attach_us(&up_isr,g_period_us); //ticker to write 1 to rca down.attach_us(&down_isr,g_uptime_us); //ticker to write 0 to rca printf("g_period_us: %d \n", g_period_us); printf("sin Frequency: %f \n", f); while (1) { //continual loop for pulse production float dutyratio = wavtable[i]; //calcualtes duty ratio of pulse g_uptime_us= dutyratio*g_period_us; //calculates duty ratio in usecs if (g_uptime_us<1) { g_uptime_us=g_period_us/100; } //sets to be value for timebeing to eliminate 0 error //float f=440*(pad.read_pot1()+1); //removed for simplification if (g_upflag==0) { ifl = ifl + (4096*f*g_period); //once rca=1 itterate sin function if (ifl>4096) { ifl= ifl-4096; } i=ifl; g_upflag=1; //reset flag //printf("iterate i: i= %d, ifl= %f \n", i, ifl); } //printf("DR: %f \n",dutyratio); //printf("sleep \n"); sleep(); //sleeps till next isr } } void sinspeak () { float f1=440.0; float i=0; unsigned short v=0; int inc=0; pad.reset_buttons(); f1 = pad.read_pot1(); f1 = 440.0f+440.0f*f1; //printf("f1= %f \n",f1); // Used for Debug while (inc<3000) { int inti = i; v = o[inti]; printf("OUTPUT: %u \n", v); //pad.write_u16(v); wait_us(230); //fs= 4k Ts=250us i = i + ((4096.0f*f1)/4000.0f); //i+((samples*f)*Ts) if (i>=4096.0f) { i=i-4096.0f; } else { wait_us(3); // used to attempt note stabilisation to match other loop } inc++; } } */