Kai Lauterbach
/
MBedToBrainMachine
mbed to brain machine firmware. See http://klautesblog.blogspot.com for further information.
main.cpp
- Committer:
- klaute
- Date:
- 2011-04-13
- Revision:
- 1:90922bda2b17
- Parent:
- 0:cf8c942ef95b
File content as of revision 1:90922bda2b17:
/** * firmware for the mbed to brain machine project * see http://klautesblog.blogspot.com for further information. * * Licensed under GPLv3 - http://www.gnu.org/licenses/gpl.html * * Written by Kai Lauterbach (klaute at gmail dot com) 04/2011 */ #include "main.h" void initBrainwaves() { // A example brain wave sequence. // The sequence starts from a state of being awake. // Then is goes into deep meditation. // Hangs out there awhile, and then is will be going // into awake again. brainwaves[1-1].type = 1; brainwaves[1-1].duration = 60; brainwaves[2-1].type = 0; brainwaves[2-1].duration = 10; brainwaves[3-1].type = 1; brainwaves[3-1].duration = 20; brainwaves[4-1].type = 0; brainwaves[4-1].duration = 15; brainwaves[5-1].type = 1; brainwaves[5-1].duration = 15; brainwaves[6-1].type = 0; brainwaves[6-1].duration = 20; brainwaves[7-1].type = 1; brainwaves[7-1].duration = 10; brainwaves[8-1].type = 0; brainwaves[8-1].duration = 30; brainwaves[9-1].type = 1; brainwaves[9-1].duration = 5; brainwaves[10-1].type = 0; brainwaves[10-1].duration = 60; brainwaves[11-1].type = 3; brainwaves[11-1].duration = 10; brainwaves[12-1].type = 0; brainwaves[12-1].duration = 30; brainwaves[13-1].type = 3; brainwaves[13-1].duration = 20; brainwaves[14-1].type = 0; brainwaves[14-1].duration = 30; brainwaves[15-1].type = 3; brainwaves[15-1].duration = 30; brainwaves[16-1].type = 0; brainwaves[16-1].duration = 15; brainwaves[17-1].type = 3; brainwaves[17-1].duration = 60; brainwaves[18-1].type = 0; brainwaves[18-1].duration = 15; brainwaves[19-1].type = 1; brainwaves[19-1].duration = 1; brainwaves[20-1].type = 0; brainwaves[20-1].duration = 15; brainwaves[21-1].type = 3; brainwaves[21-1].duration = 60; brainwaves[22-1].type = 2; brainwaves[22-1].duration = 1; brainwaves[23-1].type = 3; brainwaves[23-1].duration = 10; brainwaves[24-1].type = 2; brainwaves[24-1].duration = 1; brainwaves[25-1].type = 3; brainwaves[25-1].duration = 10; brainwaves[26-1].type = 2; brainwaves[26-1].duration = 1; brainwaves[27-1].type = 3; brainwaves[27-1].duration = 30; brainwaves[28-1].type = 0; brainwaves[28-1].duration = 15; brainwaves[29-1].type = 1; brainwaves[29-1].duration = 1; brainwaves[30-1].type = 0; brainwaves[30-1].duration = 15; brainwaves[31-1].type = 3; brainwaves[31-1].duration = 30; brainwaves[32-1].type = 0; brainwaves[32-1].duration = 15; brainwaves[33-1].type = 1; brainwaves[33-1].duration = 1; brainwaves[34-1].type = 0; brainwaves[34-1].duration = 20; brainwaves[35-1].type = 1; brainwaves[35-1].duration = 5; brainwaves[36-1].type = 0; brainwaves[36-1].duration = 20; brainwaves[37-1].type = 1; brainwaves[37-1].duration = 15; brainwaves[38-1].type = 0; brainwaves[38-1].duration = 15; brainwaves[39-1].type = 1; brainwaves[39-1].duration = 20; brainwaves[40-1].type = 0; brainwaves[40-1].duration = 10; brainwaves[41-1].type = 1; brainwaves[41-1].duration = 25; brainwaves[42-1].type = 0; brainwaves[42-1].duration = 5; brainwaves[43-1].type = 1; brainwaves[43-1].duration = 60; brainwaves[44-1].isEnd = true; } /*************************************************************************************************/ void Audio_L_Control() { // Toggle left audio channel audioLeft = ( audioLeft == 0 ) ? 1 : 0; } void Audio_R_Control() { // toggle right audio channel audioRight = ( audioRight == 0 ) ? 1 : 0; } void Brainwave_Control() { // check for end of brainwave sequence if ( brainwaves[bw_pos].isEnd && bw_duration <= 0) { LEDStatus2 = ( LEDStatus2 == 0 ) ? 1 : 0; ledRight = 0; ledLeft = 0; ledStatusRight = 0; ledStatusLeft = 0; timer0.detach(); timer1.detach(); return; } // check for end of duration if ( bw_duration > 0 ) { bw_duration--; return; } // toggle brainwave status LEDStatus2 = ( LEDStatus2 == 0 ) ? 1 : 0; bw_duration = brainwaves[bw_pos].duration; int type = brainwaves[bw_pos].type; float pwmPeriod = 0.0; float ledPulseWidth = 0.0; float audioFreq = 0.0; // Set the audioTimer and PWM signals to the new brain // wave frequency. switch (type) { case ALFA : audioFreq = HZ_411_1; pwmPeriod = HZ_11_1; ledPulseWidth = HZ_11_1_HALF; break; case BETA : audioFreq = HZ_414_4; pwmPeriod = HZ_14_4; ledPulseWidth = HZ_14_4_HALF; break; case DELTA : audioFreq = HZ_402_2; pwmPeriod = HZ_2_2; ledPulseWidth = HZ_2_2_HALF; break; case THETA : audioFreq = HZ_406; pwmPeriod = HZ_6; ledPulseWidth = HZ_6_HALF; break; } // reconfigure the audio timer timer0.attach(&Audio_L_Control, HZ_400); timer1.attach(&Audio_R_Control, audioFreq); // set the new period to all channels ledRight.period(pwmPeriod); // set the new pulse width to all pwm channels ledLeft.pulsewidth(ledPulseWidth); ledRight.pulsewidth(ledPulseWidth); ledStatusLeft.pulsewidth(ledPulseWidth); ledStatusRight.pulsewidth(ledPulseWidth); bw_pos++; } /*************************************************************************************************/ int main() { audioLeft = 0; audioRight = 0; initBrainwaves(); timer2.attach(&Brainwave_Control, BRAINWAVE_CTRL_DELAY); while (1) { LEDStatus1 = 1; wait(0.02); LEDStatus1 = 0; wait(0.75); } } /*************************************************************************************************/