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三個資料作為繪製圖形的參數。
以上程式很簡單,當然也有很多可以改進的地方,在這裡小編就是簡單的分享一些,還望各路高手指教,本著開源精神,共同進步。
實物連接很簡單
運行結果,很不錯