## **調光器**
> 本例向你展示如何從電腦發送數據到Arduino或Genuino板來控制LED的亮度。數據以字節為單位發送,每個值的范圍在這里應為0到255。程序會讀取這些字節,并且使用它們來設置LED亮度。`
你可以用電腦上任何可以讀寫串口的軟件。若使用Processing和Max/MSP 5.x版本來監看,下面也提供了代碼。
### **所需硬件**
Arduino板或Genuino板?
LED?
220Ω電阻
### **所需軟件**
* Processing或者Max/MSP 5.x版本
* 連接線
將220Ω限流電阻連接到9號引腳,并且在之間串聯一個LED。LED的長腳(陽極)連電阻,短腳(陰極)連接到GND。
### **電路**

### **原理圖**

### **代碼**
~~~
/*
調光器
展示從電腦發送數據到板子,并通過發送的數據控制LED的亮度。數據以字節為單位發送,每個byte范圍這里是0到255。
電路搭建:
9號引腳接LED,并且連接到GND。
與Processing, Max/MSP, 或者其他串口程序。
代碼是公開的。
*/
const int ledPin = 9; // LED連接的引腳
void setup() {
// 初始化串口連接:
Serial.begin(9600);
// 初始化ledPin為輸出模式:
pinMode(ledPin, OUTPUT);
}
void loop() {
byte brightness;
// 檢查是否電腦傳來了數據:
if (Serial.available()) {
// 讀取最近的一個byte (應該是一個0-255的值):
brightness = Serial.read();
// 將brightness設置給LED:
analogWrite(ledPin, brightness);
}
}
~~~
以下為電腦上的代碼,可二選一。其實用Arduino串口監視器也可。
#### **Processing代碼**
Processing代碼將會從電腦發送byte來控制LED。
~~~
//調光器-將通過串口發送字節
//代碼是公開的.
import processing.serial.*;
Serial port;
void setup() {
size(256, 150);
println("Available serial ports:");
// 若使用Processing 2.1或更早版本,使用Serial.printArray()
println(Serial.list());
//目前使用列表的第一個串口 (數字 0)。請改變這個值來選擇Arduino板的串口。最后一個參數(這里是:9600)是串口通信的速率(波特率)。它應與Arduino代碼中Serial.begin()中傳入的數值一樣。
port = new Serial(this, Serial.list()[0], 9600);
// 如果你知道Arduino板串口的名字,那么你可以直接像這樣指定
//port = new Serial(this, "COM1", 9600);
}
void draw() {
// 繪制黑白漸變
for (int i = 0; i < 256; i++) {
stroke(i);
line(i, 0, i, 150);
}
// 將鼠標的x位置作為byte輸出
port.write(mouseX);
}
~~~
#### **Max/MSP v5 用的patch**
請復制下面這些代碼,并且粘貼到新建patch的串口。Max/MSP將會如以下圖片一樣顯示。?

~~~
----------begin_max5_patcher----------
1008.3ocuXszaiaCD9r8uhA5rqAeHIa0aAMaAVf1S6hdoYQAsDiL6JQZHQ2M
YWr+2KeX4vjnjXKKkKhhiGQ9MeyCNz+X9rnMp63sQvuB+MLa1OlOalSjUvrC
ymEUytKuh05TKJWUWyk5nE9eSyuS6jesvHu4F4MxOuUzB6X57sPKWVzBLXiP
xZtGj6q2vafaaT0.BzJfjj.p8ZPukazsQvpfcpFs8mXR3plh8BoBxURIOWyK
rxspZ0YI.eTCEh5Vqp+wGtFXZMKe6CZc3yWZwTdCmYW.BBkdiby8v0r+ST.W
sD9SdUkn8FYspPbqvnBNFtZWiUyLmleJWo0vuKzeuj2vpJLaWA7YiE7wREui
FpDFDp1KcbAFcP5sJoVxp4NB5Jq40ougIDxJt1wo3GDZHiNocKhiIExx+owv
AdOEAksDs.RRrOoww1Arc.9RvN2J9tamwjkcqknvAE0l+8WnjHqreNet8whK
z6mukIK4d+Xknv3jstvJs8EirMMhxsZIusET25jXbX8xczIl5xPVxhPcTGFu
xNDu9rXtUCg37g9Q8Yc+EuofIYmg8QdkPCrOnXsaHwYs3rWx9PGsO+pqueG2
uNQBqWFh1X7qQG+3.VHcHrfO1nyR2TlqpTM9MDsLKNCQVz6KO.+Sfc5j1Ykj
jzkn2jwNDRP7LVb3d9LtoWBAOnvB92Le6yRmZ4UF7YpQhiFi7A5Ka8zXhKdA
4r9TRGG7V4COiSbAJKdXrWNhhF0hNUh7uBa4Mba0l7JUK+omjDMwkSn95Izr
TOwkdp7W.oPRmNRQsiKeu4j3CkfVgt.NYPEYqMGvvJ48vIlPiyzrIuZskWIS
xGJPcmPiWOfLodybH3wjPbMYwlbFIMNHPHFOtLBNaLSa9sGk1TxMzCX5KTa6
WIH2ocxSdngM0QPqFRxyPHFsprrhGc9Gy9xoBjz0NWdR2yW9DUa2F85jG2v9
FgTO4Q8qiC7fzzQNpmNpsY3BrYPVJBMJQ1uVmoItRhw9NrVGO3NMNzYZ+zS7
3WTvTOnUydG5kHMKLqAOjTe7fN2bGSxOZDkMrBrGQ9J1gONBEy0k4gVo8qHc
cxmfxVihWz6a3yqY9NazzUYkua9UnynadOtogW.JfsVGRVNEbWF8I+eHtcwJ
+wLXqZeSdWLo+FQF6731Tva0BISKTx.cLwmgJsUTTvkg1YsnXmxDge.CDR7x
D6YmX6fMznaF7kdczmJXwm.XSOOrdoHhNA7GMiZYLZZR.+4lconMaJP6JOZ8
ftCs1YWHZI3o.sIXezX5ihMSuXzZtk3ai1mXRSczoCS32hAydeyXNEu5SHyS
xqZqbd3ZLdera1iPqYxOm++v7SUSz
-----------end_max5_patcher-----------
~~~
### **相關資料**
[serial](https://www.arduino.cc/en/Reference/Serial)()?
[serial.read()](https://www.arduino.cc/en/Serial/Read)?
[analogRead()](https://www.arduino.cc/en/Reference/AnalogRead)?
[analogWrite()](https://www.arduino.cc/en/Reference/AnalogWrite)?
- 說明
- 系統示例文件目錄結構及說明
- 01.Basics
- AnalogReadSerial
- BareMinimum
- Blink
- DigitalReadSerial
- Fade
- ReadAnalogVoltage
- 02.Digital
- BlinkWithoutDelay
- Button
- Debounce
- DigitalInputPullup
- StateChangeDetection
- toneKeyboard
- toneMelody
- toneMultiple
- tonePitchFollower
- 03.Analog
- AnalogInOutSerial
- AnalogInput
- AnalogWriteMega
- Calibration
- Fading
- Smoothing
- 04.Communication
- ASCIITable
- Dimmer
- Graph
- Midi
- MultiSerial
- PhysicalPixel
- ReadASCIIString
- SerialCallResponse
- SerialCallResponseASCII
- SerialEvent
- SerialPassthrough
- VirtualColorMixer
- 05.Control
- Arrays
- ForLoopIteration
- IfStatementConditional
- switchCase
- switchCase2
- WhileStatementConditional
- 06.Sensors
- ADXL3xx
- Knock
- Memsic2125
- Ping
- 07.Display
- barGraph
- RowColumnScanning
- 08.Strings
- CharacterAnalysis
- StringAdditionOperator
- StringAppendOperator
- StringCaseChanges
- StringCharacters
- StringComparisonOperators
- StringConstructors
- StringIndexOf
- StringLength
- StringLengthTrim
- StringReplace
- StringStartsWithEndsWith
- StringSubstring
- StringToInt
- 09.USB
- Keyboard
- KeyboardLogout
- KeyboardMessage
- KeyboardReprogram
- KeyboardSerial
- KeyboardAndMouseControl
- Mouse
- ButtonMouseControl
- JoystickMouseControl
- 10.StarterKit_BasicKit (與特定硬件相關,暫無)
- p02_SpaceshipInterface
- p03_LoveOMeter
- p04_ColorMixingLamp
- p05_ServoMoodIndicator
- p06_LightTheremin
- p07_Keyboard
- p08_DigitalHourglass
- p09_MotorizedPinwheel
- p10_Zoetrope
- p11_CrystalBall
- p12_KnockLock
- p13_TouchSensorLamp
- p14_TweakTheArduinoLogo
- p15_HackingButtons
- 11.ArduinoISP(暫無)
- ArduinoISP