Changes between Version 6 and Version 7 of ArduinoThinkGearProcessing


Ignore:
Timestamp:
10/24/12 01:50:07 (7 years ago)
Author:
sc
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ArduinoThinkGearProcessing

    v6 v7  
    1515 
    1616The command above will connect to any headsets it can find within 10 seconds. Complete RF documentation attached to this wiki page. 
    17  
    18  
    19 * Mind_Wave.pde 
    20 {{{ 
    21 //////////////////////////////////////////////////////////////////////// 
    22 // Arduino Bluetooth Interface with Mindwave 
    23 //  
    24 // This is example code provided by NeuroSky, Inc. and is provided 
    25 // license free. 
    26 //////////////////////////////////////////////////////////////////////// 
    27  
    28 #define LED 13 
    29 #define BAUDRATE 115200 
    30 #define DEBUGOUTPUT 0 
    31 #define BLUESMIRFON 2 
    32  
    33 #define GREENLED1  3 
    34 #define GREENLED2  4 
    35 #define GREENLED3  5 
    36 #define YELLOWLED1 6 
    37 #define YELLOWLED2 7 
    38 #define YELLOWLED3 8 
    39 #define YELLOWLED4 9 
    40 #define REDLED1    10 
    41 #define REDLED2    11 
    42 #define REDLED3    12 
    43  
    44 // checksum variables 
    45 byte generatedChecksum = 0; 
    46 byte checksum = 0;  
    47 int payloadLength = 0; 
    48 byte payloadData[64] = { 
    49   0}; 
    50 byte poorQuality = 0; 
    51 byte attention = 0; 
    52 byte meditation = 0; 
    53  
    54 // system variables 
    55 long lastReceivedPacket = 0; 
    56 boolean bigPacket = false; 
    57  
    58 ////////////////////////// 
    59 // Microprocessor Setup // 
    60 ////////////////////////// 
    61 void setup() { 
    62  
    63   pinMode(GREENLED1, OUTPUT); 
    64   pinMode(GREENLED2, OUTPUT); 
    65   pinMode(GREENLED3, OUTPUT); 
    66   pinMode(YELLOWLED1, OUTPUT); 
    67   pinMode(YELLOWLED2, OUTPUT); 
    68   pinMode(YELLOWLED3, OUTPUT); 
    69   pinMode(YELLOWLED4, OUTPUT); 
    70   pinMode(REDLED1, OUTPUT); 
    71   pinMode(REDLED2, OUTPUT); 
    72   pinMode(REDLED3, OUTPUT); 
    73  
    74   pinMode(LED, OUTPUT); 
    75   pinMode(BLUESMIRFON, OUTPUT); 
    76   digitalWrite(BLUESMIRFON, HIGH); 
    77   Serial.begin(BAUDRATE);           // USB 
    78  
    79   delay(3000) ; 
    80   Serial.print(194,BYTE) ; 
    81  
    82  
    83  
    84 } 
    85  
    86 //////////////////////////////// 
    87 // Read data from Serial UART // 
    88 //////////////////////////////// 
    89 byte ReadOneByte() { 
    90   int ByteRead; 
    91  
    92   while(!Serial.available()); 
    93   ByteRead = Serial.read(); 
    94  
    95 #if DEBUGOUTPUT   
    96   Serial.print((char)ByteRead);   // echo the same byte out the USB serial (for debug purposes) 
    97 #endif 
    98  
    99   return ByteRead; 
    100 } 
    101  
    102 ///////////// 
    103 //MAIN LOOP// 
    104 ///////////// 
    105 void loop() { 
    106  
    107  
    108   // Look for sync bytes 
    109   if(ReadOneByte() == 170) { 
    110     if(ReadOneByte() == 170) { 
    111  
    112       payloadLength = ReadOneByte(); 
    113       if(payloadLength > 169)                      //Payload length can not be greater than 169 
    114           return; 
    115  
    116       generatedChecksum = 0;         
    117       for(int i = 0; i < payloadLength; i++) {   
    118         payloadData[i] = ReadOneByte();            //Read payload into memory 
    119         generatedChecksum += payloadData[i]; 
    120       }    
    121  
    122       checksum = ReadOneByte();                      //Read checksum byte from stream       
    123       generatedChecksum = 255 - generatedChecksum;   //Take one's compliment of generated checksum 
    124  
    125         if(checksum == generatedChecksum) {     
    126  
    127         poorQuality = 200; 
    128         attention = 0; 
    129         meditation = 0; 
    130  
    131         for(int i = 0; i < payloadLength; i++) {    // Parse the payload 
    132           switch (payloadData[i]) { 
    133           case 2: 
    134             i++;             
    135             poorQuality = payloadData[i]; 
    136             bigPacket = true;             
    137             break; 
    138           case 4: 
    139             i++; 
    140             attention = payloadData[i];                         
    141             break; 
    142           case 5: 
    143             i++; 
    144             meditation = payloadData[i]; 
    145             break; 
    146           case 0x80: 
    147             i = i + 3; 
    148             break; 
    149           case 0x83: 
    150             i = i + 25;       
    151             break; 
    152           default: 
    153             break; 
    154           } // switch 
    155         } // for loop 
    156  
    157 #if !DEBUGOUTPUT 
    158  
    159         // *** Add your code here *** 
    160  
    161         if(bigPacket) { 
    162           if(poorQuality == 0) 
    163             digitalWrite(LED, HIGH); 
    164           else 
    165             digitalWrite(LED, LOW); 
    166           Serial.print("PoorQuality: "); 
    167           Serial.print(poorQuality, DEC); 
    168           Serial.print(" Attention: "); 
    169           Serial.print(attention, DEC); 
    170           if(attention > 40) 
    171             digitalWrite(GREENLED1, HIGH); 
    172           else 
    173             digitalWrite(GREENLED1, LOW); 
    174  
    175           Serial.print(" Time since last packet: "); 
    176           Serial.print(millis() - lastReceivedPacket, DEC); 
    177           lastReceivedPacket = millis(); 
    178           Serial.print("\n"); 
    179  
    180           switch(attention / 10) { 
    181           case 0: 
    182             digitalWrite(GREENLED1, HIGH); 
    183             digitalWrite(GREENLED2, LOW); 
    184             digitalWrite(GREENLED3, LOW); 
    185             digitalWrite(YELLOWLED1, LOW); 
    186             digitalWrite(YELLOWLED2, LOW); 
    187             digitalWrite(YELLOWLED3, LOW); 
    188             digitalWrite(YELLOWLED4, LOW); 
    189             digitalWrite(REDLED1, LOW); 
    190             digitalWrite(REDLED2, LOW); 
    191             digitalWrite(REDLED3, LOW);            
    192             break; 
    193           case 1: 
    194             digitalWrite(GREENLED1, HIGH); 
    195             digitalWrite(GREENLED2, HIGH); 
    196             digitalWrite(GREENLED3, LOW); 
    197             digitalWrite(YELLOWLED1, LOW); 
    198             digitalWrite(YELLOWLED2, LOW); 
    199             digitalWrite(YELLOWLED3, LOW); 
    200             digitalWrite(YELLOWLED4, LOW); 
    201             digitalWrite(REDLED1, LOW); 
    202             digitalWrite(REDLED2, LOW); 
    203             digitalWrite(REDLED3, LOW); 
    204             break; 
    205           case 2: 
    206             digitalWrite(GREENLED1, HIGH); 
    207             digitalWrite(GREENLED2, HIGH); 
    208             digitalWrite(GREENLED3, HIGH); 
    209             digitalWrite(YELLOWLED1, LOW); 
    210             digitalWrite(YELLOWLED2, LOW); 
    211             digitalWrite(YELLOWLED3, LOW); 
    212             digitalWrite(YELLOWLED4, LOW); 
    213             digitalWrite(REDLED1, LOW); 
    214             digitalWrite(REDLED2, LOW); 
    215             digitalWrite(REDLED3, LOW); 
    216             break; 
    217           case 3:               
    218             digitalWrite(GREENLED1, HIGH); 
    219             digitalWrite(GREENLED2, HIGH); 
    220             digitalWrite(GREENLED3, HIGH);               
    221             digitalWrite(YELLOWLED1, HIGH); 
    222             digitalWrite(YELLOWLED2, LOW); 
    223             digitalWrite(YELLOWLED3, LOW); 
    224             digitalWrite(YELLOWLED4, LOW); 
    225             digitalWrite(REDLED1, LOW); 
    226             digitalWrite(REDLED2, LOW); 
    227             digitalWrite(REDLED3, LOW);              
    228             break; 
    229           case 4: 
    230             digitalWrite(GREENLED1, HIGH); 
    231             digitalWrite(GREENLED2, HIGH); 
    232             digitalWrite(GREENLED3, HIGH);               
    233             digitalWrite(YELLOWLED1, HIGH); 
    234             digitalWrite(YELLOWLED2, HIGH); 
    235             digitalWrite(YELLOWLED3, LOW); 
    236             digitalWrite(YELLOWLED4, LOW); 
    237             digitalWrite(REDLED1, LOW); 
    238             digitalWrite(REDLED2, LOW); 
    239             digitalWrite(REDLED3, LOW);               
    240             break; 
    241           case 5: 
    242             digitalWrite(GREENLED1, HIGH); 
    243             digitalWrite(GREENLED2, HIGH); 
    244             digitalWrite(GREENLED3, HIGH);               
    245             digitalWrite(YELLOWLED1, HIGH); 
    246             digitalWrite(YELLOWLED2, HIGH); 
    247             digitalWrite(YELLOWLED3, HIGH); 
    248             digitalWrite(YELLOWLED4, LOW); 
    249             digitalWrite(REDLED1, LOW); 
    250             digitalWrite(REDLED2, LOW); 
    251             digitalWrite(REDLED3, LOW);                
    252             break; 
    253           case 6:               
    254             digitalWrite(GREENLED1, HIGH); 
    255             digitalWrite(GREENLED2, HIGH); 
    256             digitalWrite(GREENLED3, HIGH);               
    257             digitalWrite(YELLOWLED1, HIGH); 
    258             digitalWrite(YELLOWLED2, HIGH); 
    259             digitalWrite(YELLOWLED3, HIGH); 
    260             digitalWrite(YELLOWLED4, HIGH); 
    261             digitalWrite(REDLED1, LOW); 
    262             digitalWrite(REDLED2, LOW); 
    263             digitalWrite(REDLED3, LOW);               
    264             break; 
    265           case 7: 
    266             digitalWrite(GREENLED1, HIGH); 
    267             digitalWrite(GREENLED2, HIGH); 
    268             digitalWrite(GREENLED3, HIGH);               
    269             digitalWrite(YELLOWLED1, HIGH); 
    270             digitalWrite(YELLOWLED2, HIGH); 
    271             digitalWrite(YELLOWLED3, HIGH); 
    272             digitalWrite(YELLOWLED4, HIGH); 
    273             digitalWrite(REDLED1, HIGH); 
    274             digitalWrite(REDLED2, LOW); 
    275             digitalWrite(REDLED3, LOW);               
    276             break;     
    277           case 8: 
    278             digitalWrite(GREENLED1, HIGH); 
    279             digitalWrite(GREENLED2, HIGH); 
    280             digitalWrite(GREENLED3, HIGH);               
    281             digitalWrite(YELLOWLED1, HIGH); 
    282             digitalWrite(YELLOWLED2, HIGH); 
    283             digitalWrite(YELLOWLED3, HIGH); 
    284             digitalWrite(YELLOWLED4, HIGH); 
    285             digitalWrite(REDLED1, HIGH); 
    286             digitalWrite(REDLED2, HIGH); 
    287             digitalWrite(REDLED3, LOW); 
    288             break; 
    289           case 9: 
    290             digitalWrite(GREENLED1, HIGH); 
    291             digitalWrite(GREENLED2, HIGH); 
    292             digitalWrite(GREENLED3, HIGH);               
    293             digitalWrite(YELLOWLED1, HIGH); 
    294             digitalWrite(YELLOWLED2, HIGH); 
    295             digitalWrite(YELLOWLED3, HIGH); 
    296             digitalWrite(YELLOWLED4, HIGH); 
    297             digitalWrite(REDLED1, HIGH); 
    298             digitalWrite(REDLED2, HIGH);  
    299             digitalWrite(REDLED3, HIGH); 
    300             break; 
    301           case 10: 
    302             digitalWrite(GREENLED1, HIGH); 
    303             digitalWrite(GREENLED2, HIGH); 
    304             digitalWrite(GREENLED3, HIGH);               
    305             digitalWrite(YELLOWLED1, HIGH); 
    306             digitalWrite(YELLOWLED2, HIGH); 
    307             digitalWrite(YELLOWLED3, HIGH); 
    308             digitalWrite(YELLOWLED4, HIGH); 
    309             digitalWrite(REDLED1, HIGH); 
    310             digitalWrite(REDLED2, HIGH);  
    311             digitalWrite(REDLED3, HIGH); 
    312             break;            
    313           }                      
    314         } 
    315 #endif         
    316         bigPacket = false;         
    317       } 
    318       else { 
    319         // Checksum Error 
    320       }  // end if else for checksum 
    321     } // end if read 0xAA byte 
    322   } // end if read 0xAA byte 
    323 } 
    324 }}}