Changes between Version 2 and Version 3 of ArduinoThinkGearProcessing


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

--

Legend:

Unmodified
Added
Removed
Modified
  • ArduinoThinkGearProcessing

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