Siphamandla Simelane
/
slider_diatonic_SP
My_Homework
Fork of slider_diatonic_v1 by
Diff: slider_diatonic_v1.cpp
- Revision:
- 5:c3564f9501ca
- Parent:
- 4:d59d946649b8
--- a/slider_diatonic_v1.cpp Sun Feb 22 07:57:45 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,132 +0,0 @@ -#include "mbed.h" -#include "SLCD.h" -#include "TSISensor.h" - - -#define CHANNELON 0 -#define CHANNELOFF 1 -#define LCDLEN 10 -#define DATATIME 100 //milli seccnds -//LCD messages - -#define TONEARRAY - -// Operating parameters -#define SIDETONE 700.0 -#define TONEMIN 200.0 -#define TONEINT 800.00 // So tone max is 1000 -#define TONEON 0.50 -#define TONEOFF 0.0 -#define SPEEDAST 0 -#define TONEAST 1 -#define NUMTONES 10 -#define LEDPERIOD 0.001 -//#define PRINTDEBUG - -Serial pc(USBTX, USBRX); - -float diatonicScale[NUMTONES] = {246.94, 261.63,293.66,329.63,349.23,392.00,440.00,493.88,523.25,587.33}; -float diatonicScaleOctave[NUMTONES] = {659.25, 698.46, 783.99, 880.00, 987.77, 1046.50, 1174.66, 1318.51, 1396.91, 1567.98 }; -SLCD slcd; //define LCD display - -TSISensor tsiScaling; // Capacitive sensor/slider - -InterruptIn mybutton(PTC3); //push botton with internal pullup -PwmOut led(LED_RED); -DigitalOut outPin(PTC9); //J1-16 -PwmOut soundOut(PTA13); -Timer dataTimer; -// Global scalars -char lcdData[LCDLEN]; - -float tonePeriod; -float toneFreq = SIDETONE; - -// Int used to switch between different octave -int relayState = CHANNELOFF; - - -void pressed() // button intterupt -{ - relayState = !relayState; -} - -void LCDMessNoDwell(char *lMess){ - slcd.Home(); - slcd.clear(); - slcd.printf(lMess); -} - -void diatonicAdjust( float scaling) { - int tempInt; - int scaleIndex; - static int oldScaleIndex = 0; -/* There appears to be a set up time for setting the PWM time period -only do a nes set up if the indext changes. -*/ - scaleIndex = (int)(NUMTONES * scaling); - if (scaleIndex != oldScaleIndex) { - if (relayState == CHANNELOFF) - toneFreq = diatonicScale[scaleIndex]; - else - toneFreq = diatonicScaleOctave[scaleIndex]; - tonePeriod = 1.0/toneFreq; - soundOut.period(tonePeriod); // adjusting period - soundOut.write(TONEON); // there is a setup time for both period and DF - oldScaleIndex = scaleIndex; - } else { - return; - } -#ifdef PRINTDEBUG - pc.printf(" %f,%d\n\r",scaling, scaleIndex ); -#endif - tempInt = (int)toneFreq; - sprintf (lcdData,"%4d",tempInt); - LCDMessNoDwell(lcdData); - return; -} - - - -void lightAdjust( float scaling) { // Control brightness of LED - float tempDutyFactor; - - tempDutyFactor = 1.0 - scaling; //LED is a sinking connection // anode is held at 5V - led.write(tempDutyFactor); //adjusting duty factor - return; -} - -int main(){ - int tempInt; - float tempValue; - tonePeriod = 1.0/toneFreq; - soundOut.period(tonePeriod); - led.period(tonePeriod); - led.write(CHANNELOFF); - outPin.write(CHANNELOFF); - // set up interrrupts to be used later for taps - mybutton.fall(&pressed); - - tempInt = (int)toneFreq; - sprintf (lcdData,"%4d",tempInt); - LCDMessNoDwell(lcdData); - // Start data timer - dataTimer.start(); - dataTimer.reset(); - - while (true) { - if (dataTimer.read_ms() > DATATIME){ // check to see if enough time has passed - // to read the touch pad - tempValue = tsiScaling.readPercentage(); - if(tempValue > 0) { - // soundOut.write(TONEON); // set duty factor to 50% - diatonicAdjust(tempValue); - lightAdjust(tempValue); - } else { - soundOut.write(TONEOFF); // set dutyfactor to 0% - LCDMessNoDwell("SOFF"); - } - dataTimer.reset(); - } - } // while forever -}// end main \ No newline at end of file