【Arduino官方教程第一辑】示例程序 4-11 虚拟调色盘

来源:互联网 发布:网络电子备课系统 编辑:程序博客网 时间:2024/05/21 10:17

虚拟调色盘

本例向你展示如何从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.3oc4Z00aaaCE8YmeED9ktB35xOjrj1aAsXX4g8xZQeYoXfVh1gqRjdTTsIsn+2K+PJUovVVJ1VMdCAvxThV7bO7b48dIyWtXxzkxaYkSA+J3u.Sl7kKlLwcK6MlT2dxzB5so4zRW2lJXeRt7elNy+HM6Vs61uDDzbOYkNmo02sg4euS4BSede8S2P0o2vEq+aEKU66PPP7b3LPHDauPvyCmAvv4v6+M7L2XXF2WfCaFlURgVPKbCxzKUbZdySDUEbgABN.ia08R9mccGYGn66qGutNir27qWbg8iY+7HDRx.Hjf+OPHCQgPdpQHoxhBlwB+QF4cbkthlCRk4REnfeKScs3ZwaugWBbj.PS+.qDPAkZkgPlY5oPS4By2A5aTLFv9pounjsgpnZVF3x27pqtBrRpJnZaaC3WxTkfUJYA.BzR.BhIy.ehquw7dSoJCsrlATLckR.nhLPNWvVwL+Vp1LHL.SjMG.tRaG7OxT5R2c8Hx9B8.wLCxVaGI6qnpj45Ug84kL+6YIM8CqUxJyycF7bqsBRULGvwfWyRMyovElat7NvqoejaLm4f+fkmyKuVTHy3q3ldhB.WtQY6Zx0BSOeSpTqA+FW+Yy3SyybH3sFy8p0RVCmaMpTyX6HdDZ2JsPbfSogbBMueHJLd6RMBdfRMzPjZvimuWIK2XgFA.ZmtfKoh0Sm88qc6OF4bDQ3P6kEtF6xej.OkjD4H5OllyS+.3FlhY0so4xRlWqyrXErQpt+2rsnXgQNZHZgmMVzEofW7TS4zORQtgIdDbRHrObRzSMNofUVZVcbKbhQZrSOo934TqRHIN2ncr7BF8TKR1tHDqL.PejLRRPKMR.pKFAkbtDa+UOvsYsIFH0DYsTCjqZ66T1CmGeDILLpSmmyk0SdkOKh5LUr4GbWwRYdW7fm.BvDmzHnSdH3biGpSbxxDNJoGDAD1ChH7LI0DaloOTBLvkO7zPs5HJnKNoGAXbol5eytUhfyiSfnjE1uAq+Fp0a+wygGwRq3ZI8.psJpkpJnyPzwmXBj7Sh.+bNvVZxlcKAm0OYHIxcIjzEKdRChgO5UMfLkMPNN0MfiS7Ev6TYQct.F5IWcCZ4504rGsiVswGWWSYyma01QcZgmL+f+sfoU18Hn6o6dXkMkFF14TL9rIAWE+6wvGV.p.TPqz3HK5L+VxYxl4UmBKEjr.B6zinuKI3C+D2Y7azIM6N7QL6t+jQyZxymK1ToAKqVsxjlGyjz2c1kTK3180hkJEYkacWpv6lyp2VJTjWK47wHA6fyBOWxH9pUf6jUtZkLpNKW.9EeUBH3ymYXSQlaqGrkQMGzp20adYSmIOGjIABo1xZyAWJtCX9tg6+HMuhMCPyx76ao+UsUxmzUE79H8d2ZB1m1ztbnOa1mGeAq0awyK8a9UqBUc6pZolpzurTK232e5gpaInVw8QIIcpaiNSJfY4Z+92Cs+Mc+mgg2cEsvGlLY6V+1kMuioxnB5VM+fsY9vSu4WI1PMBGXye6KXvNuzmZTh7U9h5j6vvASdngPdgOFxycNL6ia1axUMmTJIzebXcQCn3SKMf+4QCMmOZung+6xBCPLfwO8ngcEI52YJ1y7mx3CN9xKUYUbg7Y1yXjlKW6SrZnguQdsSfOSSDItqv2jwJFjavc1vO7OigyBr2+gDYorRk1HXZpVFfu2FxXkZtfp4RQqNkX5y2sya3YYL2iavWAOaizH+pw.Ibg8f1I9h3Z2B79sNeOHvBOtfEalWsvyu0KMf015.AaROvZ7vv5AhnndfHLbTgjcCK1KlHvgOk5B26OqrXjcJ005.QqCHn8fVTxnxfj93SfQiJlv8YV0VT9fVUwOOhSV3uDeeqCUClbBPa.j3vWDoMZssNTzRNEnE6gYPXazZaMF921syaLWyAeBXvCESA8ASi6Zyw8.RQi65J8ZsNx3ho93OhGWENtWpowepae4YhCFeLErOLENtXJrOSciadi39rf4hwc8xdhHz3gn3dBI7iDRlFe8huAfIZhq-----------end_max5_patcher-----------

相关资料

serial.begin()
serial.print()
analogRead()
ASCIl表:展示Arduino先进的串口输出函数。
调光器:轻点鼠标来改变LED的亮度。
数据图表:发送数据到电脑,并且使用Processing来绘图。
MIDI音乐: 以串口发送MIDI音符。
多串口[Mega]:使用Arduino Mega上的两个串口。
原来标题译为MIDI音乐MEGA,是错译
控制LED:从Processing或Max/MSP来开关LED.
读取ASCII字符串:解析一串用逗号分隔的整数(以字符串类型传递)来让LED渐隐。
串口双向调用:用双向调用/握手连接(handshaking)的方法发送多个变量值。
串口双向调用(使用ASCII码):用双向调用/握手连接(handshaking)的方法发送多个变量值,并且在转发之前将这些变量的值通过ASCII解码。
串口事件:展示SerialEvent()函数的使用。
虚拟调色盘:用Arduino发送多个变量的值到电脑,然后用Processing或Max/MSP读取它们


更新进程

日期 日志 译者 2016年5月20日 创建并翻译文档 唐家勋

译者:唐家勋
邮箱:mrsteventang@gmail.com
QQ:649196486
转载请注明出处,一切只因为热爱。
希望您能指出宝贵意见,谢谢。
我的微信公众号欢迎关注,2016年6月开始更新

0 0