1. 程式人生 > >【Arduino官方教程第一輯】示例程式 4-11 虛擬調色盤

【Arduino官方教程第一輯】示例程式 4-11 虛擬調色盤

虛擬調色盤

本例向你展示如何從Arduino傳送多個值到電腦。從三個電位器上獲取的值將被用來給Processing工程或Max/MSP工程設定背景色。

完成本例所需的硬體裝置

  • Arduino板或Genuino板
  • 3個模擬訊號感測器 (電位器,光敏電阻,壓力感測器等均可)
  • 3個10kΩ電阻
  • 跳線
  • 麵包板
  • 連線線

完成本例所需的軟體

  • Processing 或 Max/MSP 5.x

電路連線

圖片來自官網
將輸出模擬訊號的感測器分別連線到A0,A1,A2口。

電路在壓力感測器(壓敏電阻)上使用三個分壓電路。分壓電路含有兩個串聯的電阻,根據電學知識,分壓電路能夠根據兩個電阻的阻值進行分壓。

原理圖

圖片來自官網

例程程式碼

感測器值將被以ASCII十進位制的型別從Arduino傳送到電腦。這就意味著每個值都是用ASCII字元0-9表示的。比如“234”這個數字是這樣被髮送的:

  1. 傳送ASCII 的“2”(二進位制值50)
  2. 傳送ASCII 的“3”(二進位制值51)
  3. 傳送ASCII 的“4”(二進位制值52)
/*
  本例讀取三個模擬訊號感測器(用電位器最簡單)的值並且用串列埠傳送他們到電腦。下面呈現的Processing和Max/MSP程式會讀取Arduino用串列埠發來的值並且改變螢幕的顏色。

 電路搭建:
 * (譯者注:上文用的是壓敏電阻。原文寫的器材有衝突,不過其實用壓敏電阻和電位器一模一樣)
 * 電位器分別連線到A0,A1,和A2

  程式碼是公開的。
 */
const int redPin = A0; // 控制紅色的感測器 const int greenPin = A1; // 控制綠色的感測器 const int bluePin = A2; // 控制藍色的感測器 void setup() { Serial.begin(9600); } void loop() { Serial.print(analogRead(redPin)); Serial.print(","); Serial.print(analogRead(greenPin)); Serial.print(","); Serial.println(analogRead(bluePin)); }

Processing程式碼

圖片來自官網
複製下列程式碼到 Processing。當你通過某種方式改變模擬訊號感測器的值時背景色會改變:

//  程式碼公開。

import processing.serial.*;

float redValue = 0;        // 紅色值
float greenValue = 0;      // 綠色值
float blueValue = 0;       // 藍色值

Serial myPort;

void setup() {
  size(200, 200);

  // 列舉所有串列埠
  // 如果用Processing 2.1或其更早版本,將下面程式碼替換為  Serial.printArray()
  println(Serial.list());

  // 在我的mac上第一個總歸是Arduino,因此我直接打開了Serial.list()[0]。
  // 下列程式碼根據你使用的串列埠進行調整。
  myPort = new Serial(this, Serial.list()[0], 9600);
  // 告訴系統:收到換行符後才能呼叫serialEvent():
  myPort.bufferUntil('\n');
}

void draw() {
  // 更改背景顏色:
  background(redValue, greenValue, blueValue);
}

void serialEvent(Serial myPort) {
  // 獲取ASCII字串:
  String inString = myPort.readStringUntil('\n');

  if (inString != null) {
    // 去除空格:
    inString = trim(inString);
    // 解析用逗號分隔的字串,並且將其存為浮點型陣列:
    float[] colors = float(split(inString, ","));
    // 如果colors陣列的成員>=3,顏色資料就至少是完整的了:
    if (colors.length >=3) {
      // 將值對映到0-255:
      redValue = map(colors[0], 0, 1023, 0, 255);
      greenValue = map(colors[1], 0, 1023, 0, 255);
      blueValue = map(colors[2], 0, 1023, 0, 255);
    }
  }
}

Max補丁

圖片來自官網
請複製下面這一段到Max

 ----------begin_max5_patcher----------
1512.3oc4Z00aaaCE8YmeED9ktB35xOjrj1aAsXX4g8xZQeYoXfVh1gqRjdT
TsIsn+2K+PJUovVVJ1VMdCAvxThV7bO7b48dIyWtXxzkxaYkSA+J3u.Sl7kK
lLwcK6MlT2dxzB5so4zRW2lJXeRt7elNy+HM6Vs61uDDzbOYkNmo02sg4euS
4BSede8S2P0o2vEq+aEKU66PPP7b3LPHDauPvyCmAvv4v6+M7L2XXF2WfCaF
lURgVPKbCxzKUbZdySDUEbgABN.ia08R9mccGYGn66qGutNir27qWbg8iY+7
HDRx.Hjf+OPHCQgPdpQHoxhBlwB+QF4cbkthlCRk4REnfeKScs3ZwaugWBbj
.PS+.qDPAkZkgPlY5oPS4By2A5aTLFv9pounjsgpnZVF3x27pqtBrRpJnZaa
C3WxTkfUJYA.BzR.BhIy.ehquw7dSoJCsrlATLckR.nhLPNWvVwL+Vp1LHL.
SjMG.tRaG7OxT5R2c8Hx9B8.wLCxVaGI6qnpj45Ug84kL+6YIM8CqUxJyycF
7bqsBRULGvwfWyRMyovElat7NvqoejaLm4f+fkmyKuVTHy3q3ldhB.WtQY6Z
x0BSOeSpTqA+FW+Yy3SyybH3sFy8p0RVCmaMpTyX6HdDZ2JsPbfSogbBMueH
JLd6RMBdfRMzPjZvimuWIK2XgFA.ZmtfKoh0Sm88qc6OF4bDQ3P6kEtF6xej
.OkjD4H5OllyS+.3FlhY0so4xRlWqyrXErQpt+2rsnXgQNZHZgmMVzEofW7T
S4zORQtgIdDbRHrObRzSMNofUVZVcbKbhQZrSOo934TqRHIN2ncr7BF8TKR1
tHDqL.PejLRRPKMR.pKFAkbtDa+UOvsYsIFH0DYsTCjqZ66T1CmGeDILLpSm
myk0SdkOKh5LUr4GbWwRYdW7fm.BvDmzHnSdH3biGpSbxxDNJoGDAD1ChH7L
I0DaloOTBLvkO7zPs5HJnKNoGAXbol5eytUhfyiSfnjE1uAq+Fp0a+wygGwR
q3ZI8.psJpkpJnyPzwmXBj7Sh.+bNvVZxlcKAm0OYHIxcIjzEKdRChgO5UMf
LkMPNN0MfiS7Ev6TYQct.F5IWcCZ4504rGsiVswGWWSYyma01QcZgmL+f+sf
oU18Hn6o6dXkMkFF14TL9rIAWE+6wvGV.p.TPqz3HK5L+VxYxl4UmBKEjr.B
6zinuKI3C+D2Y7azIM6N7QL6t+jQyZxymK1ToAKqVsxjlGyjz2c1kTK3180h
kJEYkacWpv6lyp2VJTjWK47wHA6fyBOWxH9pUf6jUtZkLpNKW.9EeUBH3ymY
XSQlaqGrkQMGzp20adYSmIOGjIABo1xZyAWJtCX9tg6+HMuhMCPyx76ao+Us
UxmzUE79H8d2ZB1m1ztbnOa1mGeAq0awyK8a9UqBUc6pZolpzurTK232e5gp
aInVw8QIIcpaiNSJfY4Z+92Cs+Mc+mgg2cEsvGlLY6V+1kMuioxnB5VM+fsY
9vSu4WI1PMBGXye6KXvNuzmZTh7U9h5j6vvASdngPdgOFxycNL6ia1axUMmT
JIzebXcQCn3SKMf+4QCMmOZung+6xBCPLfwO8ngcEI52YJ1y7mx3CN9xKUYU
bg7Y1yXjlKW6SrZnguQdsSfOSSDItqv2jwJFjavc1vO7OigyBr2+gDYorRk1
HXZpVFfu2FxXkZtfp4RQqNkX5y2sya3YYL2iavWAOaizH+pw.Ibg8f1I9h3Z
2B79sNeOHvBOtfEalWsvyu0KMf015.AaROvZ7vv5AhnndfHLbTgjcCK1KlHv
gOk5B26OqrXjcJ005.QqCHn8fVTxnxfj93SfQiJlv8YV0VT9fVUwOOhSV3uD
eeqCUClbBPa.j3vWDoMZssNTzRNEnE6gYPXazZaMF921syaLWyAeBXvCESA8
ASi6Zyw8.RQi65J8ZsNx3ho93OhGWENtWpowepae4YhCFeLErOLENtXJrOSc
iadi39rf4hwc8xdhHz3gn3dBI7iDRlFe8huAfIZhq
-----------end_max5_patcher-----------

相關資料

更新程序

日期 日誌 譯者
2016年5月20日 建立並翻譯文件 唐家勳

譯者:唐家勳
郵箱:[email protected]
QQ:649196486
轉載請註明出處,一切只因為熱愛。
希望您能指出寶貴意見,謝謝。
我的微信公眾號歡迎關注,2016年6月開始更新

相關推薦

Arduino官方教程第一示例程式 4-11 虛擬調色盤

虛擬調色盤 本例向你展示如何從Arduino傳送多個值到電腦。從三個電位器上獲取的值將被用來給Processing工程或Max/MSP工程設定背景色。 完成本例所需的硬體裝置 Arduino板或Genuino板 3個模擬訊號感測器 (電位器,

Arduino官方教程第一示例程式 3-2 模擬訊號輸入

模擬訊號輸入 本例中,我們根據電位器(或用光敏電阻替代)的阻值變化來改變LED閃爍頻率。電阻的模擬訊號值將根據電壓變化。 完成本例所需的硬體裝置 Arduino板或Genuino板 電位器 或 10kΩ光敏電阻+10kΩ電阻 紅色220Ω LED

Arduino官方教程第一示例程式 5-1 陣列

陣列 本例中我們使用for迴圈配合一個數組變數向你展示Arduino中陣列的使用。陣列是一個有多個”部分”的變數。如果我們把普通變數看做一個盛裝值的“杯子”,那麼陣列就好像是一個“製冰器”。陣列就好像是一連串“杯子”,每個杯子都可以儲存一個值(不過這些值

Arduino官方教程第一示例程式 5-4 Switch和Case條件語句

Switch和Case條件語句 If語句允許你根據條件的真假(真(TRUE)或假(FALSE))進行兩個分支操作。當需要進行多個判斷時,你就必須使用If巢狀。不過其實還有一種更為簡潔的處理多條件判斷的方法,那就是使用switch語句,switch語句允許

Arduino官方教程第一示例程式-目錄

譯者序:即將進入大學學習,我謹以本文件的來作為我CSDN部落格的開篇。前段時間看了許多文章,便覺得作為一個程式設計師開通自己的技術部落格是十分重要的。因為這樣做不僅能夠提高自己的技術水平、將知識做鞏固和回爐,還能通過自己的奉獻讓更多人獲利。最好發揮知識

Arduino官方教程第一示例程式 6-3 Memsic2125加速度計

Memsic2125加速度計 Memsic2125是一款兩軸加速度計,它能夠測量兩個方向正負2g的加速度(g代表重力加速度)。它的引腳設計很簡單:只有兩個資料輸出引腳,一個為X軸,一個為Y軸。它的資料輸出引腳會根據加速度的大小輸出不同的脈寬(不知道脈寬是

Arduino官方教程第一示例程式 5-3 If條件判斷

If條件判斷 條件判斷結構是程式設計中的最基本結構,在Arduino和其他語言中往往用if()語句實現條件判斷。if()讓你能夠根據某個條件(Condition)的真假執行不同的程式碼。(條件只有兩種可能,要麼是真(true)要麼是假(false))if語句的

Arduino官方教程第一示例程式 3-5 模擬訊號的校準

模擬訊號的校準 本例向你展示校準感測器的一個技巧:在啟動時先讀取感測器值5秒鐘,然後尋找其最大、最小值。校準後的最大、最小值將在map函式有用。 完成本例所需的硬體裝置 Arduino板或Genuino板 LED 模擬訊號的感測器(光敏電阻就

Arduino官方教程第一示例程式 5-6 While迴圈

While迴圈 有時你可能需要進行這樣的操作:如果某個條件為true的話就一直停在那裡,直到它由true變成false才繼續執行(反過來也可以,開始為false,直到true才繼續)。你可以使用while迴圈來做到這一點。本例向你展示如何使用while迴

Arduino官方教程第零基礎部分 2-2 模擬引腳

模擬引腳 本文是對於Arduino晶片上模擬引腳的介紹。上面所說的Arduino晶片主要包括(Atmega8, Atmega168,Atmega328或Atmega1280)。 數模轉換電路 Arduino中使用的Atmega控制器都配有一個板

Arduino基礎教程LCD5110顯示屏

Nokia 5110顯示屏模組 準備材料 Arduino UNO *1 Nokia 5110 LCD *1 跳線 若干 接線 Nokia 511

三星官方教程如何為Gear VR 開發應用(一):開發環境搭建(轉)

三星GearVR已經成為第一個成熟的移動VR平臺,並擁有目前全球最大也是最穩定的移動VR使用者群體。基於GearVR的應用越來越多,本文將為開發者介紹如何用Unity為Gear VR開發一個360度圖片檢視器。 搭建開發環境(Windows OS) 在開始用Uni

Arduino基礎教程RS1307時鐘模組

RS1307時鐘模組 RS1307是一個低功耗的外接時鐘模組,它可以讓你的專案即使在斷電的情況下,也能保證在重新啟動後走時正確。 所需材料 1x Ar

Nutch基礎教程之七Nutch的2種執行模式:local及deploy

mapred nap ont nal servlet miss mos ant issue 在對nutch源碼執行ant runtime後,會創建一個runtime的文件夾。在runtime文件夾下有deploy和local 2個文件夾。 [[email 

CC2530入門教程-增強版基礎技能綜合實訓案例(基礎版)-題目需求

情況 led 興趣 題目 嵌入式開發 廣東 難點 在一起 參數 【CC2530入門教程-增強版】基礎技能綜合實訓案例(基礎版)-題目需求 廣東職業技術學院 歐浩源 一、引用 不管是簡單的單片機應用,還是復雜的嵌入式系統,在我看來它們的本質結構是差不多的,都離不開“

Lucene4.8教程之二索引

文件路徑 位置 存在 this nth 創建索引 exe 搜索 最簡 一、基礎內容 0、官方文檔說明 (1)org.apache.lucene.index provides two primary classes: IndexWriter, whic

CQ18階梯賽第一題解

sca 就是 scanf main ace con 連續 動態 return 【A-風格不統一如何寫程序】 輸入字符串,得到長度,對於每個字符:如果是大寫,則改為:‘_’+小寫;如果是‘_’則忽略‘_&rsquo

Vue,自學第一

ever return 改變 修改 底層 IT 綁定 包裝 paragraph 一、創建第一個 Vue 應用 接下來我們創建第一個 Vue 應用。 View 層 - HTML 代碼如下: <div id="app"> {{ message }} </

Docker系列教程之五如何構建Dockerfile

在上一篇文章中,我們講述了 Dockerfile 的組成以及指令的編寫過程,在本篇文章中詳細講解如何構建 Dockerfile 。 Dockerfile常用的指令 那麼在講如何構建 Dockerfile 之前,我們回顧一下上一篇的編寫過程:

Docker系列教程之七如何將自制的漏洞環境打包成映象進行共享

我在之前的文章中只是說過,利用 Dockerfile 去拉去映象,而這些映象的拉取都是從 Docker Hub 上拉取下來,而現在我有個想法,我製作好了一個漏洞環境整合的映象,我又該如何進行開源共享,提供給別人使用呢?這就是我們今天的主題了。 首先我們得準備一個 Docker Hub 的帳號, Docker