華文網

arduino搖杆模組“小遊戲”,代碼簡單分析

之前小編發表的文章,介紹了如何使用Arduino和processing做一個使用搖杆模組控制processing程式中一個小圓在畫布中上下左右移動的“小遊戲”,當然各位可以發揮自己的想像力,做出更好玩的“小遊戲”。

動動手,人人都是技術宅,arduino搖杆模組“小遊戲”

其實好好理解了這個小實驗的代碼,能幫助我們更好的使用Arduino和processing來做一些感測器資料的視覺化研究,Arduino可以把所有感測器模組產生的資料通過串口發送給電腦,processing很容易讀取串口資料進行視覺化繪製,就像上周我做那個“超聲波雷達”一樣的。下面我就來給各位解釋一下實驗用到的相關代碼。

首先是上傳到arduino開發板的代碼:

int xValue = 0; // 初始化X軸的值

int yValue = 0; // 初始化Y軸的值

int bValue = 0; // 初始化開關的值

void setup()

{

Serial.begin(9600); // 設置串口串列傳輸速率

pinMode(2, INPUT); // 配置引腳2作為輸入

}

void loop()

{

// 讀模擬埠A0和A1的值賦值給XY軸數據

xValue = analogRead(A1);

yValue = analogRead(A0);

// 在針腳2讀取的邏輯狀態的值

bValue = digitalRead(2);

// 向串口發送資料,以逗號分隔

Serial.print(xValue,DEC);

Serial.print(",");

Serial.print(yValue,DEC);

Serial.print(",");

Serial.print(!bValue,DEC);

Serial.print(",");

// 以分行符號結束沒組數據

Serial.print("");

// 下一次測量之前稍微延遲

delay(2);

}

代碼中發送串口資料還是要好好糾結一下的,發送的時候要處理好格式,方便之後在processing程式中處理。因為一次要發送三個資料,arduino uno r3主機板每次只能發送一條資料。

我這裡用的是發送逗號來分開三個資料,再用分行符號來結束一組數據。

然後是processing程式碼,Processing是一種具有革命前瞻性的新興電腦語言,它的概念是在電子藝術的環境下介紹程式語言,並將電子藝術的概念介紹給程式設計師。它是 Java 語言的延伸,並支援許多現有的 Java 語言架構,不過在語法 (syntax) 上簡易許多,並具有許多貼心及人性化的設計。

import processing.serial.*; // 導入processing串口通信庫

Serial myPort; // 創建一個串口變數

int x; // X軸全域變數

int y; // Y軸全域變數

int b; // 搖杆按下變數

PFont f; // 顯示字體

String portName; //串口號

void setup()

{

size(512, 512); // 畫布尺寸

portName = "COM6"; // Arduino連接的串口號

// 註冊通信串口

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

f = createFont("Arial", 16, true); // 定義字體字型大小

textFont(f, 16); // 文字顯示占16個圖元,16px

}

// 迴圈畫圖

void draw()

{

fill(0); // 設置小圓填充顏色為黑色

clear(); // 清楚螢幕

fill(255); // 設置畫布填充顏色為白色

if (b == 1) // 如果搖杆按鈕被按下

{

//小圓直徑為50,大一點

ellipse(512-(x/2), 512-(y/2), 50, 50);

} else

{

// 按鈕沒有被按下的話設置為小圓

ellipse(512-(x/2), 512-(y/2), 25, 25);

}

// 顯示資料

text("AnalogX="+(1023-x)+" AnalogY="+(1023-y),10,20);

}

// 接收串口的資料

void serialEvent(Serial port)

{

// 讀取一行的資料

String input = port.readStringUntil(10);

println(input);//測試用,把資料打出來看看

if (input != null)

{

// 根據,分割這一行的資料

int[] vals = int(splitTokens(input, ","));

// 為xyb變數賦值

x = vals[0];

y = vals[1];

b = vals[2];

}

}

上面程式中,難點就是分析串口傳回的資料,繪製圖形很簡單,小編使用了splitTokens對傳回的資料進行切割,分成了XYB三個資料作為繪製圖形的參數。

以上程式很簡單,當然也有很多可以改進的地方,在這裡小編就是簡單的分享一些,還望各路高手指教,本著開源精神,共同進步。

實物連接很簡單

運行結果,很不錯