玩命加载中 . . .

Processing笔记06—Processing控制Arduino点灯


通过前面几篇学习笔记,我们已经对Processing有了一定的了解,可以绘制一些简单图形,以及响应鼠标键盘的输入。

笔者最初学习Processing的目的就是为了了解如何与Arduino进行交互,即通过Processing来控制Arduino,以及将Arduino的数据进行更加直观的可视化展示,一般这些是通过串口通讯来实现的。本篇我们来学习如何通过Processing下发命令,控制Arduino板载LED灯亮灭。

1. Arduino部分

这里使用Arduino Uno R3开发板,你也可以使用Arduino其他的开发板,一般都有板载LED灯。程序如下所示:

int ledPin = 13;
char val;

void setup()
{
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0) //串口接收到数据
  {
    val = Serial.read(); //获取串口接收到的数据
    if (val == 'H')
    {
      digitalWrite(ledPin, HIGH);
    } else if (val == 'L')
    {
      digitalWrite(ledPin, LOW);
    }
  }
}

程序部分非常简单,初始化串口,然后在loop()循环中不断的监听串口,当串口收到数据后,读取并根据自己定义的识别命令来判断开关LED灯。

选择对应开发板型号和端口号进行程序下载,这个端口号非常重要,后面的Processing中要设定相同的端口号才能通讯正常,这里的是COM18。

Arduino程序下载

2. Processing部分

在Processing端,我们画了一个矩形,然后通过鼠标位置与矩形坐标及长宽的关系来判断当前鼠标是否位于矩形之上,然后对应通过串口发送不同的命令。程序如下所示:

import processing.serial.*;

Serial port;

void setup() {
  size(220, 160);
  background(244);
  noStroke();
  textSize(20);

  //printArray(Serial.list());//打印串口列表
  //String portName = Serial.list()[0];//修改数组下标得到串口列表中连接Arduino的

  String portName = "COM18";

  port = new Serial(this, portName, 9600);

  fill(0, 0, 255);
  rect(60, 50, 100, 60);
  text("Key", 90, 140);
}

void draw()
{
  if (mouseOverRect())
  {
    port.write('H');
  } else {
    port.write('L');
  }
}

//鼠标是否位于矩形之上
boolean mouseOverRect() {
  return ((mouseX>=60)&&(mouseX<=160)&&(mouseY>=50)&&(mouseY<=110));
}

其中在第一行,通过import导入Processing的串口库。要想与Arduino通过串口进行通讯,就需要设置相同的波特率以及端口号。

通常我们可以通过Serial.list()来获取当前电脑所有的串口设备端口号列表:

printArray(Serial.list());//打印串口列表
String portName = Serial.list()[0];//修改数组下标得到串口列表中连接Arduino的

一般情况下Serial.list()接收的第一个端口号就是与你Arduino连接的,但当有多个端口号时,要根据实际情况,修改数组下标得到串口端口号列表中连接Arduino的那一个。

端口号获取

当然,最简单的还是直接定义就好了:

String portName = "COM18";

3. 实验现象

当鼠标移动到矩形上时,Arduino板载LED灯点亮,当鼠标移到矩形之外后,LED灯熄灭。

实验现象


关注公众号「TonyCode」,更多精彩内容分享。

扫码关注


文章作者: Tony
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Tony !