首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用思维的力量移动玩具车-软件部分(2)

用思维的力量移动玩具车-软件部分(2)

就这么简单。您的 arduino 已完成设置。
现在我们看看代码:
在这里,我们设置了将向遥控器发送命令的引脚:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#define FORWARD 2
#define BACKWARD 4
#define LEFT 8
#define RIGHT 12
#define LED 13

String inputString = ""; // a string to hold incoming data
boolean stringComplete = false, goodString = false; // whether the string is complete
int forward=HIGH, backward=HIGH, left=HIGH, right=HIGH;

void setup() {<br>
// initialize serial:
Serial.begin(115200);
// reserve 10 bytes for the inputString:
inputString.reserve(10);
pinMode(FORWARD, OUTPUT);
pinMode(BACKWARD, OUTPUT);
pinMode(LEFT, OUTPUT);
pinMode(RIGHT, OUTPUT);
pinMode(LED, OUTPUT);

digitalWrite(FORWARD, HIGH);
digitalWrite(BACKWARD, HIGH);
digitalWrite(LEFT, HIGH);
digitalWrite(RIGHT, HIGH);

}




在主要循环中,我们将会检查顺序输入并相应地设置引脚:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
void loop() {
if (stringComplete) {
//     Serial.println(inputString);

   goodString = false;

   if(inputString == "F\n"){
     digitalWrite(LED, HIGH);
     forward = LOW;
     backward = HIGH;
     goodString = true;
   }
   else if(inputString == "B\n"){
     forward = HIGH;
     backward = LOW;
     goodString = true;
   }
   else if(inputString == "L\n"){
     left = LOW;
     right = HIGH;
     goodString = true;
   }
   else if(inputString == "R\n"){
     left = HIGH;
     right = LOW;
     goodString = true;
   }
   else if(inputString == "S\n"){
     digitalWrite(LED, LOW);
     left = HIGH;
     right = HIGH;
     forward = HIGH;
     backward = HIGH;
     goodString = true;
   }
   else{
     goodString = false;
   }

   if(goodString){
     digitalWrite(FORWARD, forward);
     digitalWrite(BACKWARD, backward);
     digitalWrite(LEFT, left);
     digitalWrite(RIGHT, right);
   Serial.print('!');
   }

   // clear the string:
   inputString = "";
   stringComplete = false;
}
}




第 4 步. 使用 Python 程序重定向来自        Muse 的数据最后一步是从 Muse 读取数据,同时向 Arduino 发送正确的命令和将在您的 Web 应用程序上显示的正确数据。
  • 在运行 Python 应用程序之前,您需要使用所提供的软件连接 Muse。此软件将通过蓝牙接收数据并将它重定向到一个 OSC 端口。
    • 转到 SDK 文件夹。
    • 运行以下命令:               
      1
      $ ./muse-io --dsp --osc osc.udp://localhost:5000




    • 更改 Python 脚本 (moveRCToyCar.py),以便使用 Bluemix 提供的自定义 URL(更改变量 webAppURL)和              Arduino 连接到的端口 (arduinoPort)。如果不知道                Arduino 连接到哪个端口,那么可以打开 Arduino IDE,单击 Tools 菜单,寻找 Serial                  Port 上已勾选的选项。
  • 在完成代码更改后,就可以运行它了!            
    1
    $ python moveRCToyCar.py -t 0.12




    备注:可以使用              -t 标记来设置您移动玩具车所需达到的 “松弛” 水平。也可以省略它,它的默认设置为            0.35。(您也可以在代码中更改此设置。)
    如果一切运行正常,您会看到以下类似信息:
    1
    2
    3
    4
    5
    6
    7
    8
    Setting threshold to 0.12
    Connecting to arduino on /dev/ttyACM0 at 115200 baud
    Connected!
    Message to Arduino: <STOP> 0
    Message to Arduino: <STOP> 0
    Message to Arduino: <STOP> 0
    Message to Arduino: <STOP> 0
    Message to Arduino: <STOP> 0




  • 在想要停止时,可以按下 Enter 键,然后再断开 Muse 或 Arduino。您会看到以下信息:            
    1
    2
    3
    4
    5
    6
    7
    Closing everything...
    Waiting for threads to close...
    Message to Arduino: <STOP> 0
    Arduino thread closed!
    Local server thread closed!
    Waiting for OSC server to close...
    OSC server closed!




    备注:如果断开            Muse 或 Arduino 之前忘记按下 Enter 键,您可能需要强制结束 Python 进程。如果使用的是类似 Unix 的系统(比如            OSX 或 Ubuntu),那么可以运行以下命令,它将关闭此刻运行的任何 Python            应用程序:
    1
    $ sudo killall python




第 5 步. 使用 R 分析存储在        Cloudant 和 dashDB 上的数据备注:对于这部分操作,需要一个  和 Bluemix 上的 。
  • 同步来自 Cloudant 的数据。
    • 输入您的 Cloudant 帐户和数据库的信息。
    • 为要创建的表选择一个名称。
    • 选择 Start Sync
  • 要运行 R 脚本,可以转到 dashDB 菜单中的 Analyze/Develop R            Scripts,可以在这里选择创建和导入脚本。以下 R 脚本(可在存储库中找到)将从一个名为 SAMPLES            的表抓取数据,使用一个字段绘制一个线图。
    1
    2
    3
    4
    5
    6
    7
    8
    library(bluR)
    mycon <- bluConnect("BLUDB", "", "")
    bluAnalyticsInit(mycon)

    datamuse <- as.data.frame(blu.data.frame('"BLU11196"."SAMPLES"')[ ,
    c("C0","C1","C2","C3","F","S0","S1","S2","S3","TIMESTAMP","_ID","_REV")])

    plot(datamuse[1:nrow(datamuse),1],type="l")




    对于此场景,BLU11196            是数据库的用户,SAMPLES 是表的名称。
    我们可以看看使用 R 描绘的 Muse 数据的图:
结束语在本教程中,您学习了如何从 Muse 头环提取脑电波信号。还学习了如何使用一个 Python 程序解释此数据,该程序拥有决定玩具车是否前进的逻辑。本教程还展示了如何在  上的 Node.js 中创建一个 Web        应用程序,以便实时显示脑电波活动,以及如何设置让玩具车移动的阈值。您可能会说这不是真正的感应运动演示,因为您实际上不是通过思考来移动玩具车的。相反,玩具车是根据您的放松程度来移动的,因为我们检测的是您的阿尔法脑电波。尽管有些争议,但有一点是毋庸置疑的        — 是您的脑电波让玩具车移动的!
返回列表