在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣添加使用Arduino串行監(jiān)視器控制計算機上的LED的功能

454398 ? 來源:網(wǎng)絡整理 ? 作者:網(wǎng)絡整理 ? 2019-11-28 08:51 ? 次閱讀

概述

在本課中,您將在第4課的基礎上,添加使用Arduino串行監(jiān)視器控制計算機上的LED的功能。串行監(jiān)視器是計算機和Arduino之間的“紐帶”-它使您可以發(fā)送和接收文本消息,方便調(diào)試以及通過鍵盤控制Arduino!

怎樣添加使用Arduino串行監(jiān)視器控制計算機上的LED的功能

例如,您將能夠從計算機發(fā)送命令來打開LED 。

在本課程中,您將使用與第4課完全相同的部件和類似的面包板布局。因此,如果您尚未這樣做,請立即按照第4課進行。

串行監(jiān)視器

將以下草圖上傳到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工具欄上最右邊的按鈕。該按鈕在下方圈出。

將打開以下窗口。

該窗口稱為“串行監(jiān)視器”,它是Arduino IDE軟件的一部分。它的工作是使您既可以從計算機向Arduino板發(fā)送消息(通過USB),也可以從Arduino接收消息。

消息“輸入LED編號0至9或‘x’清除”是由Arduino發(fā)送的,它告訴我們可以向Arduino發(fā)送哪些命令,這些命令要么發(fā)送“ x”(關閉所有LED),要么發(fā)送您想要打開的LED數(shù)量(其中0是底部的LED,1是下一個LED,頂部是LED,最多7個LED)。

嘗試在串行監(jiān)視器的頂部區(qū)域中鍵入以下命令,并與“發(fā)送”按鈕對齊。鍵入以下每個字符后,按‘Send’:x 0 3 5

鍵入x無效,如果LED指示燈已全部熄滅,但是在輸入每個數(shù)字時,相應的LED指示燈應點亮,并且您將從Arduino板獲得確認消息,以便串行監(jiān)視器如下所示。

您可以看到,在再次輸入“ x”后,我即將按發(fā)送。這樣做,所有的LED都將熄滅。

如您所料, Arduino代碼

該草圖基于第4課中使用的草圖。因此,我們將在此處介紹新內(nèi)容。您會發(fā)現(xiàn)在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連接發(fā)送命令。值9600稱為連接的“波特率”。這是數(shù)據(jù)發(fā)送的速度。您可以將其更改為更高的值,但還必須將Arduio Serial監(jiān)視器更改為相同的值。我們將在后面討論,但現(xiàn)在將其保留在9600。

以“ while”開頭的行可確保USB連接的另一端有一些東西供Arduino在開始發(fā)送消息之前與之交談。否則,可能會發(fā)送該消息,但不會顯示。僅當您使用Arduino Leonardo時,此行實際上才是必需的,因為當您打開串行監(jiān)視器時,Arduino Uno會自動重置Arduino板,而Leonardo則不會。

‘設置”發(fā)出我們在串行監(jiān)視器頂部看到的消息。

“循環(huán)”功能是發(fā)生所有操作的地方:

下載:文件

復制代碼

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”);

}

}

}

循環(huán)中發(fā)生的所有事情都包含在’if‘語句中。因此,除非對內(nèi)置Arduino函數(shù)’Serial.available()‘的調(diào)用為’true‘,否則將不會發(fā)生其他任何事情。

Serial.available()如果數(shù)據(jù)已發(fā)送至Arduino和準備好要處理了嗎?傳入的消息保存在所謂的緩沖區(qū)中,如果該緩沖區(qū)不為空,則Serial.available()返回true。

如果已接收到消息,則將其轉(zhuǎn)到下一行代碼:

下載:文件

復制代碼

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

這將從緩沖區(qū)中讀取下一個字符,并將其從緩沖區(qū)中刪除。它還將其分配給變量“ ch”。變量“ ch”的類型為“ char”,代表“字符”,顧名思義,它包含一個字符。

如果您已按照串行監(jiān)視器頂部提示中的說明進行操作,則此字符可以是0到7之間的一個數(shù)字或字母’x‘。

下一行的’if‘語句通過查看’ch‘是否大于或等于來檢查它是否是一個數(shù)字。等于字符“ 0”且小于或等于字符“ 7”。以這種方式比較字符看起來有些奇怪,但是完全可以接受。

每個字符都由一個唯一的數(shù)字表示,稱為ASCII值。這意味著當我們使用《=和》 =比較字符時,實際上是被比較的ASCII值。

如果測試通過,則進入下一行:

下載:文件

復制代碼

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

現(xiàn)在,我們正在對字符進行算術運算!我們將從輸入的任何數(shù)字中減去數(shù)字“ 0”。因此,如果鍵入’0‘,則’0‘–’0‘將等于0。如果鍵入’7‘,則’7‘–’0‘將等于數(shù)字7,因為實際上是正在使用的ASCII值

由于我們知道要打開的LED的數(shù)量,因此只需要在變量“ leds”中設置該位并更新移位寄存器即可。

下載:文件

復制代碼

bitSet(leds, led);

updateShiftRegister(); bitSet(leds, led);

updateShiftRegister();

接下來的兩行將確認消息寫回到串行監(jiān)視器。

下載:文件

復制代碼

Serial.print(“Turned on LED ”);

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

Serial.println(led);

第一行使用Serial.print而不是Serial.println。兩者之間的區(qū)別在于,Serial.print在打印其參數(shù)中的任何內(nèi)容后都不會開始新行。我們在第一行中使用它,因為我們將消息分為兩部分進行打印。首先是通用位:“打開LED”,然后是LED的編號。

LED的編號保存在“ int”變量中,而不是文本字符串。 Serial.print可以采用雙引號括起來的文本字符串,也可以采用’int‘或與此相關的幾乎任何類型的變量。

處理情況的’if‘語句之后,一位數(shù)字已被處理,還有第二個’if‘語句,用于檢查’ch‘是否為字母’x‘。

下載:文件

復制代碼

if (ch == ’x‘)

{

leds = 0;

updateShiftRegister();

Serial.println(“Cleared”);

} if (ch == ’x‘)

{

leds = 0;

updateShiftRegister();

Serial.println(“Cleared”);

}

如果是,則清除所有指示燈并發(fā)送確認消息。

其他要做的事情

我們通過在每個字符后單擊“發(fā)送”來發(fā)送字符來分別控制LED。但是,如果您在一行中發(fā)送所有字符命令,它將同樣有效。嘗試在串行監(jiān)視器中輸入以下內(nèi)容,然后單擊“發(fā)送”:

x0246

現(xiàn)在,讓我們看看Arduino可以通訊的速度。將草圖中的波特率從9600更改為115200,然后再次將其上載到板。然后,在打開串行監(jiān)視器后,從下拉列表中選擇115200。

您應該發(fā)現(xiàn)一切仍然有效。高速通信通常不是必需的,因此經(jīng)常使用9600的波特率,因為許多串行外圍設備(例如GPS模塊)會將其作為默認波特率,因此這是一個標準。

請嘗試不匹配波特率-例如,使用Serial.begin(9600)并在下拉菜單中選擇57600。看到看起來像什么嗎?全部亂碼?錯了如果您在串行監(jiān)視器中收到奇怪的數(shù)據(jù),請三遍檢查波特率并確保它們匹配!

串行監(jiān)視器也是調(diào)試行為異常的草圖的一種好方法。有時,當草圖不符合您的想法時,將Serial.println()語句放在關鍵位置將有助于您查看發(fā)生的情況。

責任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 監(jiān)視器

    關注

    1

    文章

    785

    瀏覽量

    33905
  • 串行
    +關注

    關注

    0

    文章

    237

    瀏覽量

    34379
  • Arduino
    +關注

    關注

    189

    文章

    6494

    瀏覽量

    190294
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    工業(yè)中使用哪種計算機

    在工業(yè)環(huán)境中,工控機被廣泛使用。這些計算機的設計可承受極端溫度、灰塵和振動等惡劣條件。它們比標準消費類計算機更耐用、更可靠。工業(yè)計算機控制機器、監(jiān)控流程并實時收集數(shù)據(jù)。其堅固的結(jié)構(gòu)和
    的頭像 發(fā)表于 11-29 14:07 ?643次閱讀
    工業(yè)中使用哪種<b class='flag-5'>計算機</b>?

    計算機控制系統(tǒng)實踐報告

    計算機控制技術實踐報告
    發(fā)表于 10-17 13:45 ?0次下載

    計算機接口位于什么之間

    計算機接口是計算機硬件和軟件之間、計算機與外部設備之間以及計算機各部件之間傳輸數(shù)據(jù)、控制信息和狀態(tài)信息的硬件設備和軟件程序。它在
    的頭像 發(fā)表于 10-14 14:02 ?1131次閱讀

    計算機存儲系統(tǒng)的工作原理和功能

    計算機存儲系統(tǒng)作為計算機系統(tǒng)中至關重要的組成部分,其原理和功能對于理解計算機的運行機制具有關鍵意義。以下將詳細闡述計算機存儲系統(tǒng)的原理和
    的頭像 發(fā)表于 09-26 16:42 ?2813次閱讀

    計算機存儲系統(tǒng)的構(gòu)成

    Memory),再到輔助存儲(Auxiliary Memory),每一層都有其特定的功能和特點。以下是對計算機存儲系統(tǒng)構(gòu)成的詳細解析。
    的頭像 發(fā)表于 09-26 15:25 ?2356次閱讀

    具有 PWM 抑制功能的高側(cè)驅(qū)動、高側(cè)電磁閥監(jiān)視器應用說明

    電子發(fā)燒友網(wǎng)站提供《具有 PWM 抑制功能的高側(cè)驅(qū)動、高側(cè)電磁閥監(jiān)視器應用說明.pdf》資料免費下載
    發(fā)表于 09-12 10:31 ?0次下載
    具有 PWM 抑制<b class='flag-5'>功能</b>的高側(cè)驅(qū)動、高側(cè)電磁閥<b class='flag-5'>監(jiān)視器</b>應用說明

    計算機存儲的分類及其區(qū)別

    計算機存儲計算機系統(tǒng)中不可或缺的重要部分,用于存放程序和數(shù)據(jù)。隨著科技的進步,存儲的種類越來越多,功能和性能也日益豐富。一般來說,
    的頭像 發(fā)表于 09-05 10:40 ?3772次閱讀

    計算機進行程序控制工作的基本原理是怎樣

    計算機程序控制計算機科學中的一個核心概念,它涉及到計算機如何根據(jù)預設的指令序列執(zhí)行任務。 1. 計算機硬件基礎 在深入程序
    的頭像 發(fā)表于 09-04 16:57 ?1440次閱讀

    簡述計算機總線的分類

    計算機總線作為計算機系統(tǒng)中連接各個功能部件的公共通信干線,其結(jié)構(gòu)和分類對于理解計算機硬件系統(tǒng)的工作原理至關重要。以下是對計算機總線結(jié)構(gòu)和分類
    的頭像 發(fā)表于 08-26 16:23 ?4994次閱讀

    微處理如何控制計算機系統(tǒng)

    微處理,作為計算機系統(tǒng)的核心部件,承擔著控制整個計算機系統(tǒng)運行的重要任務。它不僅是計算機的運算中心,還是
    的頭像 發(fā)表于 08-22 14:21 ?914次閱讀

    簡述計算機的I/O控制方式

    計算機的I/O(輸入/輸出)控制方式是計算機系統(tǒng)中至關重要的部分,它決定了CPU與外設之間數(shù)據(jù)交換的方式和效率。隨著計算機技術的不斷發(fā)展,I/O控制
    的頭像 發(fā)表于 08-20 10:55 ?2193次閱讀

    集成風扇控制的LM96000硬件監(jiān)視器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《集成風扇控制的LM96000硬件監(jiān)視器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 08-14 11:11 ?0次下載
    集成風扇<b class='flag-5'>控制</b>的LM96000硬件<b class='flag-5'>監(jiān)視器</b>數(shù)據(jù)表

    邊沿觸發(fā)計算機中的應用

    邊沿觸發(fā)計算機中的應用極為廣泛,它們作為數(shù)字電路中的基本單元,對于實現(xiàn)計算機內(nèi)部的時序控制、數(shù)據(jù)存儲與傳輸、以及復雜邏輯功能等方面起著至
    的頭像 發(fā)表于 08-12 14:20 ?1216次閱讀

    計算機系統(tǒng)的組成和功能

    計算機系統(tǒng)是一個復雜而龐大的概念,它涵蓋了計算機硬件、軟件以及它們之間相互作用的所有元素。為了全面而深入地探討計算機系統(tǒng),本文將從定義、組成、功能、發(fā)展歷程以及未來趨勢等方面進行詳細闡
    的頭像 發(fā)表于 07-24 17:41 ?2250次閱讀

    計算機系統(tǒng)軟件的主要分類及其功能

    計算機系統(tǒng)軟件是計算機運行的基礎和關鍵,它們?yōu)?b class='flag-5'>計算機提供了各種基礎服務和管理功能,使得計算機能夠高效地工作。
    的頭像 發(fā)表于 07-15 18:26 ?5682次閱讀
    主站蜘蛛池模板: 美女视频久久 | 国产精品情人露脸在线观看 | 成人国产精品一级毛片视频 | 婷婷综合激六月情网 | 日本亚洲免费 | www你懂的| 欧美黑粗硬 | 久久人精品 | h版欧美一区二区三区四区 h网站亚洲 | 免费看美女毛片 | 亚洲第一毛片 | 日韩一级片在线 | 下农村女人一级毛片 | 国产乱码精品一区二区三 | 色妞女女女女女bbbb | 天天干在线免费视频 | 欧美电影一区二区 | 午夜精品久久久久久影视riav | 欧美日韩a | aa三级动态图无遮无挡 | tube44在线观看 | 午夜高清在线 | 免费的毛片网站 | 免费公开视频人人人人人人人 | 日韩特级毛片免费观看视频 | 免费看大尺度视频在线观看 | 手机在线你懂得 | 好吊色视频988gao在线观看 | 日日拍夜夜嗷嗷叫狠狠 | 99国内视频| 男人日女人视频在线观看 | 午夜在线观看免费视频 | 999av视频| 免费一区二区 | 亚洲涩综合| 久久夜色精品 | 国内色综合精品视频在线 | 一级特黄a大片免费 | 日本一区三区二区三区四区 | 天天尻| 亚洲视频1 |