通過前面幾篇學習筆記,我們已經對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。
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」,後臺回覆“snake”,獲取貪吃蛇完整程序。
回覆「1024」獲取1000G學習資料。
個人博客