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

    文章

    780

    浏览量

    33128
  • 串行
    +关注

    关注

    0

    文章

    237

    浏览量

    33831
  • Arduino
    +关注

    关注

    188

    文章

    6468

    浏览量

    186926
收藏 人收藏

    评论

    相关推荐

    计算机存储系统的工作原理和功能

    计算机存储系统作为计算机系统中至关重要的组成部分,其原理和功能对于理解计算机的运行机制具有关键意义。以下将详细阐述计算机存储系统的原理和
    的头像 发表于 09-26 16:42 830次阅读

    计算机进行程序控制工作的基本原理是怎样

    计算机程序控制计算机科学中的一个核心概念,它涉及到计算机如何根据预设的指令序列执行任务。 1. 计算机硬件基础 在深入程序
    的头像 发表于 09-04 16:57 459次阅读

    微处理如何控制计算机系统

    微处理,作为计算机系统的核心部件,承担着控制整个计算机系统运行的重要任务。它不仅是计算机的运算中心,还是
    的头像 发表于 08-22 14:21 475次阅读

    计算机系统的组成和功能

    计算机系统是一个复杂而庞大的概念,它涵盖了计算机硬件、软件以及它们之间相互作用的所有元素。为了全面而深入地探讨计算机系统,本文将从定义、组成、功能、发展历程以及未来趋势等方面进行详细阐
    的头像 发表于 07-24 17:41 909次阅读

    计算机控制器的结构和功能

    随着信息技术的迅猛发展,计算机已经深入我们生活的方方面面。而计算机控制器,作为计算机系统的核心部件之一,承担着协调各部件工作、指挥整个计算机按程序运行的重要任务。本文将详细介绍
    的头像 发表于 06-17 15:47 1588次阅读

    工业控制计算机的发展趋势有哪些

    控制计算机的硬件性能也在不断提升。主要表现在以下几个方面: 1.1 处理性能的提升 处理是工业控制
    的头像 发表于 06-16 11:41 1025次阅读

    工业控制计算机的体系结构是什么

    。 硬件结构 工业控制计算机的硬件结构主要包括以下几个部分: 1.1 中央处理单元(CPU) CPU是工业控制计算机的核心部件,负责执行程序指令和处理数据。工业
    的头像 发表于 06-16 11:38 972次阅读

    工业控制计算机的特点 工业控制计算机的应用领域

    工业控制计算机是一种专门为工业自动化和控制系统设计的计算机。它具有高度的可靠性、稳定性和实时性,能够满足工业生产过程中对控制精度和响应速度的
    的头像 发表于 06-16 11:30 1432次阅读

    工业控制计算机的特点和要求

    工业控制计算机是一种专门设计用于工业环境的计算机系统,它们在自动化、监控和控制工业生产过程中发挥着关键作用。由于工业环境的特殊性,工业控制
    的头像 发表于 06-11 10:48 1145次阅读

    工业控制计算机与普通个人计算机相比有何区别?

    景等方面存在显著差异。本文将详细探讨这两种计算机的区别。 设计差异 2.1 硬件设计 工业控制计算机通常采用模块化设计,以满足不同工业应用的需求。它们具有更高的扩展性和灵活性,可以根据需要添加
    的头像 发表于 06-11 10:45 953次阅读

    工业计算机功能和特点

    在数字化和自动化的浪潮中,工业计算机以其独特的功能和强大的计算能力,逐渐在工业领域中崭露头角。本文将对工业计算机进行详细介绍,包括其定义、功能
    的头像 发表于 06-06 17:01 720次阅读

    工业计算机与普通计算机的区别

    在信息化和自动化日益发展的今天,计算机已经成为了我们日常生活和工作中不可或缺的工具。然而,在计算机领域中,工业计算机和普通计算机虽然都具备基本的计算
    的头像 发表于 06-06 16:45 1356次阅读

    【量子计算机重构未来 | 阅读体验】+ 初识量子计算机

    大语言模型训练会是一个怎样的情景。。。。。。 希望量子计算机尽快走出实验室,能够早日进入寻常百姓家,更希望我国的量子计算机取得突破,蓬勃发展,也能遥遥领先! 今天先研读至此,后续所读所感将继续分享。 附
    发表于 03-05 17:37

    微机原理和计算机组成原理的区别

    来看微机原理和计算机组成原理的区别。微机原理是指微型计算机的工作原理,主要包括计算机的基本组成和运行原理,如中央处理(CPU)、存储、输
    的头像 发表于 01-14 14:56 3339次阅读

    工业计算机与商用计算机的区别

    与商用计算机的区别。 一、功能和设计 工业计算机通常用于工业控制和自动化系统中,其主要功能是提供数据采集、实时
    的头像 发表于 12-27 10:50 616次阅读