【Arduino官方教程第一辑】示例程序 4-6 串口控制LED

翻译 2016年05月16日 13:45:50

串口控制LED

本例向你展示如何在Arduino或Genuino板从电脑接收消息。在接收到字母H时,就把LED打开。在接收到字母L时就关闭LED。

数据可以从Arduino IDE的串口监视器发送,也可以从Processing(下面有代码)或Flash(通过serial-net代理),PD或者Max/MSP等其他软件发送。

完成本例所需的硬件设备

Arduino板Genuino板
LED (可选)
220Ω电阻(可选)
连接线

完成本例所需的软件

Processing或Max/MSP 5.x版本

很多Arduino和Genuino 板都在13引脚有板载LED;如果你的板子没有内置LED,请将外部LED连接到13引脚。阳极(长脚)通过220Ω电阻连接到13引脚。阴极(短脚)连接到GND。

电路连接

图片来自官网

原理图

图片来自官网

例程代码

/*
  串口控制LED

用Arduino从电脑上接收数据。Arduino在接收到字母H时打开LED,在接收到L时关闭LED。
数据可以从Arduino IDE的串口监视器发送,也可以从Processing(下面有代码)或Flash(通过serial-net代理),PD或者Max/MSP等其他软件发送。

 电路搭建:
 * LED从13引脚连接到GND

 * 代码是公开的
 */

const int ledPin = 13; // LED引脚
int incomingByte;      // 串口数据存储

void setup() {
  // 初始化串口连接:
  Serial.begin(9600);
  // 以OUTPUT模式初始化LED:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // 检查是否有数据:
  if (Serial.available() > 0) {
    //读取数据流中最后一个字符:
    incomingByte = Serial.read();
    // 如果时字母H(ASCII码72), 打开LED:
    if (incomingByte == 'H') {
      digitalWrite(ledPin, HIGH);
    }
    // 如果时字母L(ASCII码76), 关闭LED:
    if (incomingByte == 'L') {
      digitalWrite(ledPin, LOW);
    }
  }
}

Processing代码

将下面代码复制到Processing。当你的鼠标经过中间方块时,13引脚的LED应该会打开。Processing Applet的界面是这样的:

图片来自官网

 // 串口控制LED

 // 展示如何向Arduino板发送数据
 // 如果鼠标在方形区域,就把LED打开,如果不在就关闭
 // 代码是公开的。



 import processing.serial.*;

 float boxX;
 float boxY;
 int boxSize = 20;
 boolean mouseOverBox = false;

 Serial port;

 void setup() {
 size(200, 200);
 boxX = width/2.0;
 boxY = height/2.0;
 rectMode(RADIUS);

 // 列举所有可用串口。
  //(若用了2.1或之前版本,请用Serial.printArray())
 Serial.printArray()
 println(Serial.list());

 // 打开第一个串口(假设Arduino连上的是这个)
 // 确保和Arduino设置的波特率相同(这里是9600)
 port = new Serial(this, Serial.list()[0], 9600);

 }

 void draw()
 {
 background(0);

 // 检查光标是否在方块上方
 if (mouseX > boxX-boxSize && mouseX < boxX+boxSize &&
 mouseY > boxY-boxSize && mouseY < boxY+boxSize) {
 mouseOverBox = true;
 // 改变方块颜色:
 stroke(255);
 fill(153);
 // 鼠标在方块内,发送H:
 port.write('H');
 }
 else {
 // 改变方块颜色到未选中状态:
 stroke(153);
 fill(153);
 // 鼠标在方块内,发送L:
 port.write('L');
 mouseOverBox = false;
 }

 // 画方块
 rect(boxX, boxY, boxSize, boxSize);
 }

Max 补丁

Max/MSP补丁生效后如图所示。请将代码复制下来并且粘贴到新建补丁new patch) 窗口。

----------begin_max5_patcher----------
1672.3oc2ZszaaiCD9ryuBBebQVCQRYao8xhf1cQCPVfBzh8RRQ.sDsM2HSZ
HQmlzh9eu7gjsjsEk7y0oWjiHoHm4aluYHGlueUmtiDuPy5B9Cv8fNc99Uc5
XZR2Pm726zcF4knDRlYXciDylQ4xtWa6SReQZZ+iSeMiEQR.ej8BM4A9C7OO
kkAlSjQSAYTdbFfvA27o2c6sfO.Doqd6NfXgDHmRUCKkolg4hT06BfbQJGH3
5Qd2e8d.QJIQSow5tzebZ7BFW.FIHow8.2JAQpVIIYByxo9KIMkSjL9D0BRT
sbGHZJIkDoZOSMuQT.8YZ5qpgGI3locF4IpQRzq2nDF+odZMIJkRjpEF44M3
A9nWAum7LKFbSOv+PSRXYOvmIhYiYpg.8A2LOUOxPyH+TjPJA+MS9sIzTRRr
QP9rXF31IBZAHpVHkHrfaPRHLuUCzoj9GSoQRqIB52y6Z.tu8o4EX+fddfuj
+MrXiwPL5+9cXwrOVvkbxLpomazHbQO7EyX7DpzXYgkFdF6algCQpkX4XUlo
hA6oa7GWck9w0Gnmy6RXQOoQeCfWwlzsdnHLTq8n9PCHLv7Cxa6PAN3RCKjh
ISRVZ+sSl704Tqt0kocE9R8J+P+RJOZ4ysp6gN0vppBbOTEN8qp0YCq5bq47
PUwfA5e766z7NbGMuncw7VgNRSyQhbnPMGrDsGaFSvKM5NcWoIVdZn44.eOi
9DTRUT.7jDQzSTiF4UzXLc7tLGh4T9pwaFQkGUGIiOOkpBSJUwGsBd40krHQ
9XEvwq2V6eLIhV6GuzP7uzzXBmzsXPSRYwBtVLp7s5lKVv6UN2VW7xRtYDbx
7s7wRgHYDI8YVFaTBshkP49R3rYpH3RlUhTQmK5jMadJyF3cYaTNQMGSyhRE
IIUlJaOOukdhoOyhnekEKmZlqU3UkLrk7bpPrpztKBVUR1uorLddk6xIOqNt
lBOroRrNVFJGLrDxudpET4kzkstNp2lzuUHVMgk5TDZx9GWumnoQTbhXsEtF
tzCcM+z0QKXsngCUtTOEIN0SX2iHTTIIz968.Kf.uhfzUCUuAd3UKd.OKt.N
HTynxTQyjpQD9jlwEXeKQxfHCBahUge6RprSa2V4m3aYOMyaP6gah2Yf1zbD
jVwZVGFZHHxINFxpjr5CiTS9JiZn6e6nTlXQZTAFj6QCppQwzL0AxVtoi6WE
QXsANkEGWMEuwNvhmKTnat7A9RqLq6pXuEwY6xM5xRraoTiurj51J1vKLzFs
CvM7HI14Mpje6YRxHOSieTsJpvJORjxT1nERK6s7YTN7sr6rylNwf5zMiHI4
meZ4rTYt2PpVettZERbjJ6PjfqN2loPSrUcusH01CegsGEE5467rnCdqT1ES
QxtCvFq.cvGz+BaAHXKzRSfP+2Jf.KCvj5ZLJRAhwi+SWHvPyN3vXiaPn6JR
3eoA.0TkFhTvpsDMIrL20nAkCI4EoYfSHAuiPBdmJRyd.IynYYjIzMvjOTKf
3DLvnvRLDLpWeEOYXMfAZqfQ0.qsnlUdmA33t8CNJ7MZEb.u7fiZHLYzDkJp
R7CqEVLGN75U+1JXxFUY.xEEBcRCqhOEkz2bENEWnh4pbh0wY25EefbD6EmW
UA6Ip8wFLyuFXx+Wrp8m6iff1B86W7bqJO9+mx8er4E3.abCLrYdA16sBuHx
vKT6BlpIGQIhL55W7oicf3ayv3ixQCm4aQuY1HZUPQWY+cASx2WZ3f1fICuz
vj5R5ZbM1y8gXYN4dIXaYGq4NhQvS5MmcDADy+S.j8CQ78vk7Q7gtPDX3kFh
3NGaAsYBUAO.8N1U4WKycxbQdrWxJdXd10gNIO+hkUMmm.CZwknu7JbNUYUq
0sOsTsI1QudDtjw0t+xZ85wWZd80tMCiiMADNX4UzrcSeK23su87IANqmA7j
tiRzoXi2YRh67ldAk79gPmTe3YKuoY0qdEDV3X8xylCJMTN45JIakB7uY8XW
uVr3PO8wWwEoTW8lsfraX7ZqzZDDXCRqNkztHsGCYpIDDAOqxDpMVUMKcOrp
942acPvx2NPocMC1wQZ8glRn3myTykVaEUNLoEeJjVaAevA4EAZnsNgkeyO+
3rEZB7f0DTazDcQTNmdt8aACGi1QOWnMmd+.6YjMHH19OB5gKsMF877x8wsJ
hN97JSnSfLUXGUoj6ujWXd6Pk1SAC+Pkogm.tZ.1lX1qL.pe6PE11DPeMMZ2
.P0K+3peBt3NskC
-----------end_max5_patcher-----------

相关资料

serial.read()
serial.available()
if statement
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月16日 创建并翻译文档 唐家勋

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

Arduino - 串口操作函数与示例代码大全

本文总结了Arduino常用串口操作函数的说明、语法、参数、返回值。根据函数定义编写了示例代码,并通过实验解释了每个函数的具体用法。是对Arduino串口操作函数的较全面总结,可作为工具贴查找使用。...
  • iracer
  • iracer
  • 2015年12月16日 22:36
  • 27890

【Arduino官方教程第一辑】示例程序 4-10 串口事件

本例向你展示SerialEvent()函数的使用。本函数将在loop()中自动被内部调用。 在我们写的代码中如果串口有任何数据(只要不是换行符),那么就将数据加到一个缓存字符串中。在收到换行符时就返...

C#与Arduino通过串口通信来控制LED灯的状态

C#与Arduino通过串口通信来控制LED灯的状态
  • wyq1153
  • wyq1153
  • 2016年10月14日 08:15
  • 2933

Arduino 通过串口字符串控制LED开关

Arduino 通过串口字符串控制LED开关

Serial的基本使用和ArduinoIDE的串口工具——人人都能玩硬件

Serial类和ArduinoIDE的串口工具方便了我们在Arduino没有外接显示设备的情况下获取Arduino当前的状态。本文不对Serial作深入讲解,仅对这两者的使用作基本介绍,目的在于方便后...

Arduino串口的一些高级用法

1.配置串口通信数据位、校验位、停止位 通常我们使用Serial.begin(speed)来完成串口的初始化,这种方式,只能配置串口的波特率。 而使用Serial.begin(speed, c...

【Arduino官方教程第一辑】示例程序 4-5 多串口[Mega]

有时候,一个串口远不能满足你!当你尝试和多个串口设备通信,并且还想将数据发送到串口监视器,多几个RX/TX串口就是你迫切需要的了。本例向你展示Arduino Mega和Genuino Mega上3个附...

【Arduino官方教程第一辑】示例程序 2-1 LED闪烁进阶

有时候你需要同时处理多件事情。比如:在按钮按下的时候让LED闪烁。 在这种情况下delay()函数就不好用了,因为Arduino在delay的时候会完全暂停运行的程序。如果按钮按下而Arduin...

【Arduino官方教程第一辑】示例程序 2-6 音乐键盘-tone函数的运用

本例向你展示如何使用tone()函数在不同的传感器被按下时发出不同的音调。

【Arduino官方教程第一辑】示例程序 3-6 LED亮度渐隐

本例向你展示模拟信号的输出,通过脉宽调制技术(PWM)让LED渐弱。采用PWM技术能够快速的开关一个数字引脚,通电的时间和断电的时间按照一定的比例分配,通过这个来让输出模拟“模拟信号”。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Arduino官方教程第一辑】示例程序 4-6 串口控制LED
举报原因:
原因补充:

(最多只允许输入30个字)