mbed to brain machine firmware. See http://klautesblog.blogspot.com for further information.

Committer:
klaute
Date:
Wed Apr 13 15:44:28 2011 +0000
Revision:
1:90922bda2b17
Parent:
0:cf8c942ef95b
v0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klaute 0:cf8c942ef95b 1 /**
klaute 0:cf8c942ef95b 2 * firmware for the mbed to brain machine project
klaute 0:cf8c942ef95b 3 * see http://klautesblog.blogspot.com for further information.
klaute 0:cf8c942ef95b 4 *
klaute 0:cf8c942ef95b 5 * Licensed under GPLv3 - http://www.gnu.org/licenses/gpl.html
klaute 0:cf8c942ef95b 6 *
klaute 0:cf8c942ef95b 7 * Written by Kai Lauterbach (klaute at gmail dot com) 04/2011
klaute 0:cf8c942ef95b 8 */
klaute 0:cf8c942ef95b 9
klaute 0:cf8c942ef95b 10 #include "mbed.h"
klaute 0:cf8c942ef95b 11
klaute 0:cf8c942ef95b 12 /*************************************************************************************************/
klaute 1:90922bda2b17 13 // Defining 4 of the 5 (atm) figured out brain wave frequencies as
klaute 1:90922bda2b17 14 // the period duration of the LED PWM signals.
klaute 1:90922bda2b17 15 // The ***_HALF definitions equals to the PWM pulsewidth, which is
klaute 1:90922bda2b17 16 // the half of the brainwave frequency.
klaute 0:cf8c942ef95b 17
klaute 1:90922bda2b17 18 // Beta wave frequency (13-30Hz)
klaute 0:cf8c942ef95b 19 #define HZ_14_4 0.06940000
klaute 0:cf8c942ef95b 20 #define HZ_14_4_HALF 0.03470000
klaute 0:cf8c942ef95b 21
klaute 1:90922bda2b17 22 // Alpha wave frequency (8-13Hz)
klaute 0:cf8c942ef95b 23 #define HZ_11_1 0.09009009
klaute 0:cf8c942ef95b 24 #define HZ_11_1_HALF 0.04504504
klaute 0:cf8c942ef95b 25
klaute 1:90922bda2b17 26 // Theta wave frequency (4-8Hz)
klaute 0:cf8c942ef95b 27 #define HZ_6 0.16666666
klaute 0:cf8c942ef95b 28 #define HZ_6_HALF 0.08333333
klaute 0:cf8c942ef95b 29
klaute 1:90922bda2b17 30 // Delta waves frequency (0.5-4Hz)
klaute 0:cf8c942ef95b 31 #define HZ_2_2 0.45454545
klaute 0:cf8c942ef95b 32 #define HZ_2_2_HALF 0.22727272
klaute 0:cf8c942ef95b 33
klaute 1:90922bda2b17 34 // Brain frequencies with a offset of 400Hz
klaute 1:90922bda2b17 35 // for audio output.
klaute 0:cf8c942ef95b 36 #define HZ_414_4 0.00241312
klaute 0:cf8c942ef95b 37 #define HZ_411_1 0.00243249
klaute 0:cf8c942ef95b 38 #define HZ_406 0.00246305
klaute 0:cf8c942ef95b 39 #define HZ_402_2 0.00248632
klaute 1:90922bda2b17 40 // Base Frequency
klaute 0:cf8c942ef95b 41 #define HZ_400 0.00250000
klaute 0:cf8c942ef95b 42
klaute 1:90922bda2b17 43 // Brainwave types
klaute 0:cf8c942ef95b 44 #define ALFA 0
klaute 0:cf8c942ef95b 45 #define BETA 1
klaute 0:cf8c942ef95b 46 #define DELTA 2
klaute 0:cf8c942ef95b 47 #define THETA 3
klaute 0:cf8c942ef95b 48
klaute 0:cf8c942ef95b 49 #define BRAINWAVE_CTRL_DELAY 1 // in seconds
klaute 0:cf8c942ef95b 50
klaute 0:cf8c942ef95b 51 /*************************************************************************************************/
klaute 0:cf8c942ef95b 52
klaute 0:cf8c942ef95b 53 DigitalOut LEDStatus1 (LED1);
klaute 0:cf8c942ef95b 54 DigitalOut LEDStatus2 (LED2);
klaute 0:cf8c942ef95b 55
klaute 0:cf8c942ef95b 56 /*************************************************************************************************/
klaute 0:cf8c942ef95b 57
klaute 0:cf8c942ef95b 58 Ticker timer0;
klaute 0:cf8c942ef95b 59 Ticker timer1;
klaute 0:cf8c942ef95b 60 Ticker timer2;
klaute 0:cf8c942ef95b 61
klaute 0:cf8c942ef95b 62 /*************************************************************************************************/
klaute 0:cf8c942ef95b 63
klaute 0:cf8c942ef95b 64 PwmOut ledStatusLeft (LED3);
klaute 0:cf8c942ef95b 65 PwmOut ledStatusRight (LED4);
klaute 0:cf8c942ef95b 66 PwmOut ledLeft (p21);
klaute 0:cf8c942ef95b 67 PwmOut ledRight (p22);
klaute 0:cf8c942ef95b 68
klaute 0:cf8c942ef95b 69 /*************************************************************************************************/
klaute 0:cf8c942ef95b 70
klaute 0:cf8c942ef95b 71 DigitalOut audioRight (p23);
klaute 0:cf8c942ef95b 72 DigitalOut audioLeft (p24);
klaute 0:cf8c942ef95b 73
klaute 0:cf8c942ef95b 74 /*************************************************************************************************/
klaute 0:cf8c942ef95b 75 typedef struct Brainwave {
klaute 0:cf8c942ef95b 76 int type; // 0 = Alpha; 1 = Beta; 2 = Delta; 3 = Theta
klaute 0:cf8c942ef95b 77 float duration; // in seconds
klaute 0:cf8c942ef95b 78 bool isEnd; // true = brainwave sequence end.
klaute 0:cf8c942ef95b 79 } Brainwave_t;
klaute 0:cf8c942ef95b 80
klaute 0:cf8c942ef95b 81 Brainwave_t brainwaves[44];
klaute 0:cf8c942ef95b 82
klaute 0:cf8c942ef95b 83 int bw_pos = 0;
klaute 0:cf8c942ef95b 84 int bw_duration = 0;
klaute 0:cf8c942ef95b 85
klaute 0:cf8c942ef95b 86 /*************************************************************************************************/