2015-11-14 61 views
-1

我打開了一個Mind Flex eeg並焊接到T-pin(大腦數據傳輸引腳)並將其連接到arduino的RX引腳。我也焊接並連接了一個地面。然後,我打開了一個新的遙控車的遙控遙控器,並焊接到與前後相關的測試點以及電源和地線。將腦電圖連接到arduino控制遙控車

我對C++非常陌生,在過去的兩個月裏一直在努力工作,感覺今天真的是一個突破,它最終有意義。我認爲我有一些基本的語法問題,可以由更有經驗的C++程序員輕鬆解決。

因此截至目前,我已根據eeg提供的大腦數據移動它。

所以我想代碼做的是...

啓動然後檢查耳機的信號質量。

然後進行基於價值的關注...行動首先 :如果attValue == 0,然後將車輪來回表示沒有連接 二:如果attValue> 50,然後將遙控車前進 第三:如果attValue < 50,然後將遙控車向後

我只希望它進行基於attValue的可能1〜2秒鐘,然後重新檢查attValue並進行基於價值的行動的任何行動。

我被建議檢查出BlinkWithoutDelay的例子,看看如何重新檢查代碼,所以我試圖實現它。在另一個草圖中,我正要讓輪子來回推,前進或直線。我只是不能100%確定如何進行集成,以便通過監視器接收串行數據。下面附上了我的代碼。

大腦庫上的一些額外信息。信號值將介於0和200之間.0表示完美的信號質量,而200表示非常差的eeg信號質量,甚至完全沒有。

#include <Brain.h> 
#define FORWARD 2 
#define BACKWARD 4 
#define RIGHT 7 
#define LEFT 8 

const byte MindFlex = 0; 

unsigned long previousMillis = 0; 
const long interval = 8000; 
//This first action sent will be HIGH 
int moveCar = LOW; 
//This first action sent will be LOW 
int moveIt = HIGH; 
Brain brain(Serial); 

void setup() { 
    Serial.begin(9600); 
    pinMode(FORWARD, OUTPUT); 
    pinMode(BACKWARD, OUTPUT); 
    pinMode(RIGHT, OUTPUT); 
    pinMode(LEFT, OUTPUT); 
    pinMode(MindFlex, INPUT); 
    byte readSignalQuality(); 

//Not getting much from this first part none if it is printing in the serial monitor 
//Look at modifying the if statements to else, else if possibly 

    if (brain.update()) { 
    Serial.println("You have ran 'brain.update' so can begin receiving data."); 
    delay(80000); 
    } 

    if (brain.readSignalQuality() == 0) { 
     Serial.println("Good Connection"); 
     delay(2000); 


    if (brain.readSignalQuality() > 0) 
     Serial.println("Need to adjust headset, you have a poor connection."); 
     delay(2000); 
    } 

} 

void loop() { 
unsigned long currentMillis = millis(); 
byte attValue = brain.readAttention(); 
byte sigValue = brain.readSignalQuality(); 
String yourAtt = "Your attention level is: "; 
String yourSignal = "Your signal quality is: "; 
String Signal = yourSignal + sigValue; 
String Attention = yourAtt + attValue; 
String moveForward = "Your Attention is > 50, and GO!"; 
String moveBackward = "Your Attention is < 50, back, back, BACK IT UP!"; 
String noAttention = "Error: Unable to receive Attention signal."; 

// brain.update(); 

//This while loop will execute continuously until the connection drops 
    while (sigValue < 200) { 
     Serial.println(Signal); 
     Serial.println(Attention); 
     delay(1000); 
     //Serial.println(brain.readCSV()); 
    } 

    if (currentMillis - previousMillis >= interval) { 
     previousMillis = currentMillis; 

      if (moveCar == LOW) 
      moveCar = HIGH; 
      else 
      moveCar = LOW; 

      if (moveIt == HIGH) 
      moveIt = LOW; 
      else 
      moveIt = HIGH; 

    if (attValue == 0) 
     Serial.println(noAttention); 
     //Need to solder wires to left n right to have that happen if no connection 
     digitalWrite(RIGHT, moveCar); 
     digitalWrite(LEFT, moveIt); 

    if (attValue < 50) 
     Serial.println(moveForward); 
     digitalWrite(FORWARD, LOW); 
     digitalWrite(BACKWARD, HIGH);  

    if (attValue > 50) 
     Serial.println(moveBackward); 
     digitalWrite(BACKWARD, LOW); 
     digitalWrite(FORWARD, HIGH); 
    } 

    } 

回答

0

你的代碼在需要的位置顯然缺少一些大括號,例如:

if (attValue == 0) 
     Serial.println(noAttention); 
     //Need to solder wires to left n right to have that happen if no connection 
     digitalWrite(RIGHT, moveCar); 
     digitalWrite(LEFT, moveIt); 

(需要有一個{在第一線的末端,並在最後一行後}。)

通過離奇運氣的一些行程,你碰巧有相同數量的打開大括號作爲大括號,因此您的代碼可能會編譯,但它不會按預期工作。