Kai Lauterbach
/
MBedToBrainMachine
mbed to brain machine firmware. See http://klautesblog.blogspot.com for further information.
main.h@1:90922bda2b17, 2011-04-13 (annotated)
- 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?
User | Revision | Line number | New 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 | /*************************************************************************************************/ |