0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样添加使用Arduino串行监视器控制计算机上的LED的功能

454398 来源:网络整理 作者:网络整理 2019-11-28 08:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

在本课中,您将在第4课的基础上,添加使用Arduino串行监视器控制计算机上的LED的功能。串行监视器是计算机和Arduino之间的“纽带”-它使您可以发送和接收文本消息,方便调试以及通过键盘控制Arduino!

怎样添加使用Arduino串行监视器控制计算机上的LED的功能

例如,您将能够从计算机发送命令来打开LED 。

在本课程中,您将使用与第4课完全相同的部件和类似的面包板布局。因此,如果您尚未这样做,请立即按照第4课进行。

串行监视器

将以下草图上传到Arduino。稍后,我们将确切了解其工作原理

下载:文件

复制代码

/*

Adafruit Arduino - Lesson 5. Serial Monitor

*/

int latchPin = 5;

int clockPin = 6;

int dataPin = 4;

byte leds = 0;

void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

updateShiftRegister();

Serial.begin(9600);

while (! Serial); // Wait untilSerial is ready - Leonardo

Serial.println(“Enter LED Number 0 to 7 or ‘x’ to clear”);

}

void loop()

{

if (Serial.available())

{

char ch = Serial.read();

if (ch 》= ‘0’ && ch 《= ‘7’)

{

int led = ch - ‘0’;

bitSet(leds, led);

updateShiftRegister();

Serial.print(“Turned on LED ”);

Serial.println(led);

}

if (ch == ‘x’)

{

leds = 0;

updateShiftRegister();

Serial.println(“Cleared”);

}

}

}

void updateShiftRegister()

{

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, LSBFIRST, leds);

digitalWrite(latchPin, HIGH);

} /*

Adafruit Arduino - Lesson 5. Serial Monitor

*/

int latchPin = 5;

int clockPin = 6;

int dataPin = 4;

byte leds = 0;

void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

updateShiftRegister();

Serial.begin(9600);

while (! Serial); // Wait untilSerial is ready - Leonardo

Serial.println(“Enter LED Number 0 to 7 or ‘x’ to clear”);

}

void loop()

{

if (Serial.available())

{

char ch = Serial.read();

if (ch 》= ‘0’ && ch 《= ‘7’)

{

int led = ch - ‘0’;

bitSet(leds, led);

updateShiftRegister();

Serial.print(“Turned on LED ”);

Serial.println(led);

}

if (ch == ‘x’)

{

leds = 0;

updateShiftRegister();

Serial.println(“Cleared”);

}

}

}

void updateShiftRegister()

{

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, LSBFIRST, leds);

digitalWrite(latchPin, HIGH);

}

将此草图上传到Arduino之后,单击Arduino IDE工具栏上最右边的按钮。该按钮在下方圈出。

将打开以下窗口。

该窗口称为“串行监视器”,它是Arduino IDE软件的一部分。它的工作是使您既可以从计算机向Arduino板发送消息(通过USB),也可以从Arduino接收消息。

消息“输入LED编号0至9或‘x’清除”是由Arduino发送的,它告诉我们可以向Arduino发送哪些命令,这些命令要么发送“ x”(关闭所有LED),要么发送您想要打开的LED数量(其中0是底部的LED,1是下一个LED,顶部是LED,最多7个LED)。

尝试在串行监视器的顶部区域中键入以下命令,并与“发送”按钮对齐。键入以下每个字符后,按‘Send’:x 0 3 5

键入x无效,如果LED指示灯已全部熄灭,但是在输入每个数字时,相应的LED指示灯应点亮,并且您将从Arduino板获得确认消息,以便串行监视器如下所示。

您可以看到,在再次输入“ x”后,我即将按发送。这样做,所有的LED都将熄灭。

如您所料, Arduino代码

该草图基于第4课中使用的草图。因此,我们将在此处介绍新内容。您会发现在Arduino IDE中引用完整的草图很有用。

首先,在“设置”功能中,最后增加了三行:

下载:文件

复制代码

void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

updateShiftRegister();

Serial.begin(9600);

while (! Serial); // Wait until Serial is ready - Leonardo

Serial.println(“Enter LED Number 0 to 7 or ‘x’ to clear”);

} void setup()

{

pinMode(latchPin, OUTPUT);

pinMode(dataPin, OUTPUT);

pinMode(clockPin, OUTPUT);

updateShiftRegister();

Serial.begin(9600);

while (! Serial); // Wait until Serial is ready - Leonardo

Serial.println(“Enter LED Number 0 to 7 or ‘x’ to clear”);

}

首先,我们有命令‘Serial.begin(9600)’。这将开始串行通信,以便Arduino可以通过USB连接发送命令。值9600称为连接的“波特率”。这是数据发送的速度。您可以将其更改为更高的值,但还必须将Arduio Serial监视器更改为相同的值。我们将在后面讨论,但现在将其保留在9600。

以“ while”开头的行可确保USB连接的另一端有一些东西供Arduino在开始发送消息之前与之交谈。否则,可能会发送该消息,但不会显示。仅当您使用Arduino Leonardo时,此行实际上才是必需的,因为当您打开串行监视器时,Arduino Uno会自动重置Arduino板,而Leonardo则不会。

‘设置”发出我们在串行监视器顶部看到的消息。

“循环”功能是发生所有操作的地方:

下载:文件

复制代码

void loop()

{

if (Serial.available())

{

char ch = Serial.read();

if (ch 》= ’0‘ && ch 《= ’7‘)

{

int led = ch - ’0‘;

bitSet(leds, led);

updateShiftRegister();

Serial.print(“Turned on LED ”);

Serial.println(led);

}

if (ch == ’x‘)

{

leds = 0;

updateShiftRegister();

Serial.println(“Cleared”);

}

}

}

void loop()

{

if (Serial.available())

{

char ch = Serial.read();

if (ch 》= ’0‘ && ch 《= ’7‘)

{

int led = ch - ’0‘;

bitSet(leds, led);

updateShiftRegister();

Serial.print(“Turned on LED ”);

Serial.println(led);

}

if (ch == ’x‘)

{

leds = 0;

updateShiftRegister();

Serial.println(“Cleared”);

}

}

}

循环中发生的所有事情都包含在’if‘语句中。因此,除非对内置Arduino函数’Serial.available()‘的调用为’true‘,否则将不会发生其他任何事情。

Serial.available()如果数据已发送至Arduino和准备好要处理了吗?传入的消息保存在所谓的缓冲区中,如果该缓冲区不为空,则Serial.available()返回true。

如果已接收到消息,则将其转到下一行代码:

下载:文件

复制代码

char ch = Serial.read(); char ch = Serial.read();

这将从缓冲区中读取下一个字符,并将其从缓冲区中删除。它还将其分配给变量“ ch”。变量“ ch”的类型为“ char”,代表“字符”,顾名思义,它包含一个字符。

如果您已按照串行监视器顶部提示中的说明进行操作,则此字符可以是0到7之间的一个数字或字母’x‘。

下一行的’if‘语句通过查看’ch‘是否大于或等于来检查它是否是一个数字。等于字符“ 0”且小于或等于字符“ 7”。以这种方式比较字符看起来有些奇怪,但是完全可以接受。

每个字符都由一个唯一的数字表示,称为ASCII值。这意味着当我们使用《=和》 =比较字符时,实际上是被比较的ASCII值。

如果测试通过,则进入下一行:

下载:文件

复制代码

int led = ch – ’0‘; int led = ch – ’0‘;

现在,我们正在对字符进行算术运算!我们将从输入的任何数字中减去数字“ 0”。因此,如果键入’0‘,则’0‘–’0‘将等于0。如果键入’7‘,则’7‘–’0‘将等于数字7,因为实际上是正在使用的ASCII值

由于我们知道要打开的LED的数量,因此只需要在变量“ leds”中设置该位并更新移位寄存器即可。

下载:文件

复制代码

bitSet(leds, led);

updateShiftRegister(); bitSet(leds, led);

updateShiftRegister();

接下来的两行将确认消息写回到串行监视器。

下载:文件

复制代码

Serial.print(“Turned on LED ”);

Serial.println(led); Serial.print(“Turned on LED ”);

Serial.println(led);

第一行使用Serial.print而不是Serial.println。两者之间的区别在于,Serial.print在打印其参数中的任何内容后都不会开始新行。我们在第一行中使用它,因为我们将消息分为两部分进行打印。首先是通用位:“打开LED”,然后是LED的编号。

LED的编号保存在“ int”变量中,而不是文本字符串。 Serial.print可以采用双引号括起来的文本字符串,也可以采用’int‘或与此相关的几乎任何类型的变量。

处理情况的’if‘语句之后,一位数字已被处理,还有第二个’if‘语句,用于检查’ch‘是否为字母’x‘。

下载:文件

复制代码

if (ch == ’x‘)

{

leds = 0;

updateShiftRegister();

Serial.println(“Cleared”);

} if (ch == ’x‘)

{

leds = 0;

updateShiftRegister();

Serial.println(“Cleared”);

}

如果是,则清除所有指示灯并发送确认消息。

其他要做的事情

我们通过在每个字符后单击“发送”来发送字符来分别控制LED。但是,如果您在一行中发送所有字符命令,它将同样有效。尝试在串行监视器中输入以下内容,然后单击“发送”:

x0246

现在,让我们看看Arduino可以通讯的速度。将草图中的波特率从9600更改为115200,然后再次将其上载到板。然后,在打开串行监视器后,从下拉列表中选择115200。

您应该发现一切仍然有效。高速通信通常不是必需的,因此经常使用9600的波特率,因为许多串行外围设备(例如GPS模块)会将其作为默认波特率,因此这是一个标准。

请尝试不匹配波特率-例如,使用Serial.begin(9600)并在下拉菜单中选择57600。看到看起来像什么吗?全部乱码?错了如果您在串行监视器中收到奇怪的数据,请三遍检查波特率并确保它们匹配!

串行监视器也是调试行为异常的草图的一种好方法。有时,当草图不符合您的想法时,将Serial.println()语句放在关键位置将有助于您查看发生的情况。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 监视器
    +关注

    关注

    1

    文章

    805

    浏览量

    35275
  • 串行
    +关注

    关注

    0

    文章

    256

    浏览量

    35580
  • Arduino
    +关注

    关注

    191

    文章

    6534

    浏览量

    197657
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Renesas 3858 组单芯片 8 位 CMOS 微计算机深度解析

    计算机是基于 740 家族核心技术的 8 位微计算机,专为家用产品和办公自动化设备设计。它具备多种功能,如串行接口功能
    的头像 发表于 04-13 15:00 212次阅读

    低功耗电源管理神器——LTC2935 电压监视器详解

    低功耗电源管理神器——LTC2935 电压监视器详解 在电子设备的电源管理领域,低功耗、高精度、多功能的电压监视和复位功能是至关重要的。今天,我们就来深入探讨一下 Linear Tec
    的头像 发表于 02-27 11:45 498次阅读

    LTC2992 双宽范围功率监视器:设计与应用的全面解析

    LTC2992 双宽范围功率监视器:设计与应用的全面解析 在电子设备的设计中,精确监测电源的电流、电压和功率对于确保系统的稳定性和性能至关重要。LTC2992 双宽范围功率监视器作为一款功能
    的头像 发表于 02-26 14:35 392次阅读

    深入剖析LM96194硬件监视器功能、应用与设计要点

    深入剖析LM96194硬件监视器功能、应用与设计要点 在现代电子设备的设计中,硬件监视器扮演着至关重要的角色,它能够实时监测设备的各项参数,确保系统的稳定运行。今天,我们就来深入探讨一款功能
    的头像 发表于 02-26 09:35 379次阅读

    工业边缘计算机是什么?有什么功能

    工业边缘计算机是部署在工业现场边缘侧,具备计算、存储、网络能力,能就近处理工业数据并实现快速决策的专用设备。它通过将算力下沉至靠近数据源的位置,减少数据传输延迟,提升系统实时性和可靠性,成为工业
    的头像 发表于 02-12 14:43 948次阅读

    工控机与普通计算机的核心差异解析

    在工业自动化和智能制造领域,计算机设备作为核心控制单元,其选择直接影响整个系统的稳定性与可靠性。工控机与普通计算机虽同属计算设备,但其设计目标、性能侧重和应用场景存在根本性差异。准确理
    的头像 发表于 11-25 14:45 2077次阅读
    工控机与普通<b class='flag-5'>计算机</b>的核心差异解析

    贸泽电子开售全新Arduino UNO Q单板计算机

    贸泽电子开售全新Arduino UNO Q单板计算机Arduino UNO Q单板计算机(SBC)将高性能计算与实时
    的头像 发表于 11-08 09:50 1690次阅读

    【作品合集】赛昉科技VisionFive 2单板计算机开发板测评

    单板计算机试用体验】GPIO口点亮LED灯【VisionFive 2单板计算机试用体验】移植libgpiod【VisionFive 2单板计算机试用体验】VNC远程桌面【VisionF
    发表于 09-04 09:08

    请问NuMicro® Cortex-M® 系列芯片是否支持 I2C 监视器功能

    NuMicro® Cortex-M® 系列芯片是否支持 I2C 监视器功能
    发表于 08-21 06:04

    工业计算机的重要性

    于管理用于产品检查、数据记录和数据分析的运动控制系统,以提高制造生产率。例如,汽车行业从工业边缘计算机中受益匪浅,这些计算机用于自动化制造汽车所涉及的各种过程。工业边
    的头像 发表于 07-28 16:07 816次阅读
    工业<b class='flag-5'>计算机</b>的重要性

    自动化计算机经过加固后有什么好处?

    让我们讨论一下部署坚固的自动化计算机的一些好处。1.温度范围宽自动化计算机经过工程设计,配备了支持宽温度范围的组件,使自动化计算解决方案能够在各种不同的极端环境中运行。自动化计算机能够
    的头像 发表于 07-21 16:44 822次阅读
    自动化<b class='flag-5'>计算机</b>经过加固后有什么好处?

    Texas Instruments AMC6V704模拟监视器控制器数据手册

    Texas Instruments AMC6V704模拟监视器控制器专为光收发应用而设计。它包括四个具有可编程输出范围的12位VDAC和四个12位电流输出型数模转换 (IDAC)
    的头像 发表于 07-17 10:13 1029次阅读
    Texas Instruments AMC6V704模拟<b class='flag-5'>监视器</b>和<b class='flag-5'>控制器</b>数据手册

    自动化计算机功能与用途

    工业自动化是指利用自动化计算机控制工业环境中的流程、机器人和机械,以制造产品或其部件。工业自动化的目的是提高生产率、增加灵活性,并提升制造过程的质量。工业自动化在汽车制造中体现得最为明显,其中许多
    的头像 发表于 07-15 16:32 979次阅读
    自动化<b class='flag-5'>计算机</b>的<b class='flag-5'>功能</b>与用途

    使用SIL级电源监视器的优势

    此前强调了诊断活动对于满足基本功能安全标准的定性和定量的意义,如图1所示。出于定性考虑,无论安全完整性等级(SIL)如何,都必须实施电源监视器。而对于定量要求,主要有两个考虑因素:可靠性预测和架构
    的头像 发表于 07-11 15:40 1968次阅读

    工业计算机与商用计算机的区别有哪些

    工业计算机是一种专为工厂和工业环境设计的计算系统,具有高可靠性和稳定性,能够应对恶劣环境下的自动化、制造和机器人操作。其特点包括无风扇散热技术、无电缆连接和防尘防水设计,使其在各种工业自动化场景中
    的头像 发表于 07-10 16:36 993次阅读
    工业<b class='flag-5'>计算机</b>与商用<b class='flag-5'>计算机</b>的区别有哪些