Arduino 与 Processing 通讯一:从 Processing 中接收 Arduino 的数据

也许,你已经用 Arduino 来闪烁 LED,也许你甚至用 Processing 处理了一些漂亮的照片,那么,他们的下一步是什么?

在这里,您可能会想,“我想知道有没有办法让 Arduino 和 Processing 进行交流?” 那么,猜猜这里有什么!是的,本教程将向您展示如何连接 Arduino 与 Processing。

在本教程中,我们将学习:

  • 如何从 Arduino 通过串口发送数据到 Processing
  • 如何从 Processing 中接收 Arduino 的数据
  • 如何从 Processing 向 Arduino 发送数据
  • 如何从 Arduino 接收 Processing 中的数据
  • 如何在 Arduino 和 Processing 之间编写串行 “握手” 来控制数据流
  • 如何使用模拟传感器来控制桨的 “乒乓球” 游戏

在开始之前,请确认你已经熟悉下面的一些内容,以便充分利用本教程:

  • 什么是 Arduino?
  • 如何使用面包板
  • 使用电线
  • 什么是串口通讯?
  • 基本熟悉 Processing,但不是绝对必要的。

步骤1:From Arduino...

让我们先从 Arduino 开始。我们将向您展示如何设置 Arduino 程序的基本步骤,以便能通过串口发送信息。

  • 第一件事,如果你还没有下载并安装适用于您的操作系统的 Arduino 软件,请下载它。
  • 您还需要一个 Arduino 兼容的微控制器,并将其连接到计算机(一个 A-B USB 数据线,微型 USB 或 FTDI 板)的适当方式。

好了。您应该在已经安装了 Arduino 软件、拥有某种 Arduino 板和一根数据线。现在开始编码!别担心,这很简单。

打开 Arduino 软件。然后在白色区域输入以下的内容:

void setup()
{
  //initialize serial communications at a 9600 baud rate
  Serial.begin(9600);
}

这被称为我们的安装方法。 我们在这里设置了我们的程序。在这里,我们正在使用它来开始从 Arduino 到我们的计算机的串行通信,波特率为9600。现在,您现在所需要知道的是波特率(基本上),这是我们发送数据的速率到计算机,如果我们以不同的速率发送和接收数据,一切都会变成 gobbledy-gook,一方不能理解另一个。这不好。

在我们的 setup() 方法之后,我们需要一个名为 loop() 的方法,只要我们的程序运行,它将重复运行。对于我们的第一个例子,我们将通过串行端口一遍又一遍地发送字符串 “Hello,world!”。在您的 Arduino 程序中键入以下代码:

void loop()
{
//send 'Hello, world!' over the serial port
Serial.println("Hello, world!");
//wait 100 milliseconds so we don't drive ourselves crazy
delay(100);
}

这就是我们第一个例子中,以上是 Arduino 所需要的代码。 我们正在从 Arduino 设置串行通信,并告诉它每 100 毫秒发送一次数据。

现在,所要做的就是插入您的 Arduino 板,选择您的主板类型(在 Tools -> Board 里)和串行端口(在 Tools - > Serial Port 下),然后点击 “Upload” 按钮将代码加载到 Arduino 的。

现在,我们准备好看看我们是否可以神奇地(或通过代码)检测我们从 Processing 发送的 “Hello,world!” 字符串。

步骤2:...to Processing

我们现在的任务是,找到一种方式来监听我们的 Arduino 程序发送的数据。幸运的是,Processing 提供了一个专为这种事情设计的串行库!如果您的 Processing 版本没有这个库,请从 processing.org 网站上,依据你的操作系统下载最新版本。一旦安装了 Processing,打开它。

看起来很像 Arduino,嗯? 这其中的原因是,Arduino 软件的一部分是基于 Processing,这就是开源项目的优点。一旦我们有一个打开的程序,我们的第一步是导入串行库。转到 Sketch -> Import Library -> Serial。

现在,你在程序的开头应该看到一行,诸如 import processing.serial.* 的代码。魔法!在我们的 import 语句下,我们需要声明一些全局变量。所有这些意味着,这些变量可以在我们的程序中的任何地方使用。在 import 语句下方添加这两行:

Serial myPort;  // Create object from Serial class
String val;     // Data received from the serial port

为了监听任何串行通信,我们必须得到一个 Serial 对象(我们称之为 myPort,但您可以随意选择)。这样可以让我们在计算机上的串口上,监听任何传入的数据。我们还需要一个变量,来接收实际的数据。在这种情况下,由于我们要从 Arduino 发送一个 String(字符序列 Hello,World!),我们希望在 Processing中接收一个 String。就像 Arduino 有 setup()loop(),Processing 有 setup()draw()(而不是loop)。

对于 Processing 中的 setup() 方法,我们将找到我们的 Arduino 连接的串行端口,并设置我们的 Serial 对象来监听该端口。

void setup()
{
  // I know that the first port in the serial list on my mac
  // is Serial.list()[0].
  // On Windows machines, this generally opens COM1.
  // Open whatever port is the one you're using.
  String portName = Serial.list()[0]; //change the 0 to a 1 or 2 etc. to match your port
  myPort = new Serial(this, portName, 9600);
}

记住我们是如何在 Arduino 中设置 Serial.begin(9600) ? 那么,如果我不想让讨论的那个 gobbledy-gook,我们最好把 9600 作为 Processing 中的 Serial 对象的最后一个参数。这样 Arduino 和 Processing 以相同的速度进行通信。Happy Times!

在我们的 draw() 循环中,我们将在我们的串行端口上监听,我们将得到一些东西,把它放在我们的 val 变量中,并将它打印到控制台(Processing 程序底部的黑色区域)。

void draw()
{
  if ( myPort.available() > 0)
  {  // If data is available,
    val = myPort.readStringUntil('\n');         // read it and store it in val
  }
  println(val); //print it out in the console
}

当当! 如果您点击 “Run” 按钮(您的 Arduino 已插入上一页的代码),您应该会看到一个小窗口弹出窗口,一秒钟后,您将看到 “Hello,World!” 出现在 Processing 控制台。一遍又一遍。如下:

null
null

Hello, world!
Hello, world!

步骤3:结论

优秀! 我们现在征服了如何将数据从 Arduino 发送数据到 Processing。我们的下一步就是找出相反的方式 - 从 Processing 到 Arduino 发送数据。

原文链接:https://learn.sparkfun.com/tutorials/connecting-arduino-to-processing

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.