18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

使用樹(shù)莓派Pico實(shí)現(xiàn)交通燈控制程序

jf_zGNBEhbi ? 來(lái)源:趣無(wú)盡 ? 2023-08-17 10:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

微控制器MCU)幾乎存在于你日常使用的所有電子產(chǎn)品中,例如交通燈。交通燈在控制器的作用下,控制器確保整個(gè)交通網(wǎng)絡(luò)保持順暢。

雖然構(gòu)建大型交通管理系統(tǒng)是一個(gè)非常高級(jí)的項(xiàng)目,但構(gòu)建由樹(shù)莓派 Pico 驅(qū)動(dòng)的微型模擬器本身就很簡(jiǎn)單。通過(guò)這個(gè)項(xiàng)目,你將看到如何控制多個(gè) LED,設(shè)置不同的時(shí) 間,以及如何在程序的其余部分繼續(xù)運(yùn)行時(shí)監(jiān)控一個(gè)按鈕輸入,使用一種稱為線程的技術(shù)。

搭建這個(gè)項(xiàng)目,你需要:
– 樹(shù)莓派 Pico
– 面包板
– 紅色、黃色、綠色的 LED
– 330Ω 電阻 3 個(gè)
– 一個(gè)有源蜂鳴器
– 一組公對(duì)公跳線
– microUSB 數(shù)據(jù)線

將 Pico 連接到樹(shù)莓派或其他運(yùn)行 Thonny MicroPython IDE 的計(jì)算機(jī)。

簡(jiǎn)易的交通燈

首先用面包板搭建一個(gè)簡(jiǎn)單的紅綠燈系統(tǒng)電路,如圖所示。拿起你的紅色LED燈,把紅色 LED 插到面包板上,讓它跨過(guò)中間的分割線。使用一個(gè) 330Ω 電阻和跳線串連到 Pico 上。其中,LED 較長(zhǎng)的腳和電阻連接,較短的腳和 Pico 的 GND 引腳通過(guò)跳線連通。

黃色和綠色的 LED 也類似處理,但使用的 Pico 引腳不同,參考圖片所示。

c42d053a-3ca2-11ee-ac96-dac502259ad0.jpg

啟動(dòng) Thonny。創(chuàng)建一個(gè)新的程序,然后開(kāi)始導(dǎo)入 machine 庫(kù),以便你可以控制你的 GPIO 引腳:

import machine

你還需要導(dǎo)入 utime 庫(kù),以便你可以在亮燈與滅燈之間添加延遲:

import utime

在你控制你 Pico 的 GPIO 口的任何程序里,在使用前都你將需要對(duì)它進(jìn)行設(shè)置:

led_red = machine.Pin(15, machine.Pin.OUT)
led_amber = machine.Pin(14, machine.Pin.OUT)
led_green = machine.Pin(13, machine.Pin.OUT)

這些線將 GP15、GP14 和 GP13 引腳設(shè)置為輸出,每個(gè)引腳都有一個(gè)述性的名稱,以便于代碼通俗易懂。

真正的紅綠燈不會(huì)一閃而過(guò)然后停下來(lái),它們會(huì)不停地開(kāi)著,即使那里不塞車(chē),但為了讓你 的程序?qū)崿F(xiàn)類似的效果,你需要建立一個(gè)無(wú)限循環(huán):

while True:

下面的每一行都需要縮進(jìn)四個(gè)空格,這樣 MicroPython 就知道它們是循環(huán)的一部分:

led_red.value(1)
utime.sleep(5)
led_amber.value(1)
utime.sleep(2)
led_red.value(0)
led_amber.value(0)
led_green.value(1)
utime.sleep(5)
led_green.value(0)
led_amber.value(1)
utime.sleep(5)
led_amber.value(0)

單擊 Run 并將程序保存到 Pico 中,文件名為 Traffic_Lights.py。觀察 LED,首先紅色的 LED 燈會(huì)亮起來(lái),告訴交通停止;接下來(lái),黃色 LED 將會(huì)亮起,警告司機(jī)信號(hào)燈即將改變;接下來(lái),兩個(gè) LED 都關(guān)閉,綠色 LED 亮起,讓車(chē)輛知道它可以通過(guò);然后綠色的 LED 熄滅,黃色的 LED 亮起來(lái),警告司機(jī)信號(hào)燈又要變了;最后,黃色 LED 熄滅,回路從開(kāi)始重新啟動(dòng),紅色 LED 亮起。

這個(gè)顯示狀態(tài)會(huì)一直循環(huán)直到你按下停止按鈕,因?yàn)樗纬闪艘粋€(gè)無(wú)限循環(huán)。它是基于現(xiàn)實(shí) 世界中英國(guó)交通控制系統(tǒng)中使用的交通燈模式。

然而,真正的紅綠燈不僅僅是道路車(chē)輛的紅綠燈,它們也在那里保護(hù)行人,讓他們有機(jī)會(huì)安全 地穿過(guò)繁忙的道路。在英國(guó),最常見(jiàn)的類型這些燈被稱為行人操作用戶友好型智能交叉口。行人要過(guò)馬路的時(shí)候手動(dòng)按下按鈕,蜂鳴器發(fā)出提示讓行人過(guò)馬路。

要實(shí)現(xiàn)這個(gè)功能,需要兩樣?xùn)|西:一個(gè)按鈕開(kāi)關(guān),這樣行人就可以要求車(chē)燈讓他們過(guò)馬路;一個(gè)蜂鳴器,讓行人知道什么時(shí)候輪到他們穿越馬路。將這些連接到你的面包板,如圖所示。

c437e478-3ca2-11ee-ac96-dac502259ad0.jpg

開(kāi)關(guān)通過(guò)面包板連接 Pico 的 GP16 和 3V3 上,蜂鳴器則連接 GP12 和 GND 上。

如果你再次運(yùn)行你的程序,你會(huì)發(fā)現(xiàn)按鈕和蜂鳴器沒(méi)有什么反應(yīng)。那是因?yàn)槟氵€沒(méi)有告訴你的 程序如何使用它們。在 Thonny 中,請(qǐng)返回編輯控制 LED 的行,并在下面添加以下兩條新行:

button = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_DOWN)
buzzer = machine.Pin(12, machine.Pin.OUT)

程序?qū)⒁_ GP16 上的按鈕設(shè)置為輸入模式,控制蜂鳴器引腳的引腳 GP12 上的設(shè)置為輸出。請(qǐng)記住,Pico 有內(nèi)置的可編程電阻的輸入,我們?yōu)楸緯?shū)中的項(xiàng)目設(shè)置為下拉模式。這 意味著引腳的電壓被拉到 0V(它的邏輯電平是0),除非它連接到 3.3V 電源(在這種情況下,它 的邏輯電平將是1,直到斷開(kāi))。

接下來(lái),你需要一種方法來(lái)讓程序不斷監(jiān)控按鈕的價(jià)值。以前,你的所有程序都通過(guò)一系列說(shuō) 明一步一步地工作,一次只做一件事。你的紅綠燈程序同樣,當(dāng)它運(yùn)行時(shí),MicroPython 會(huì)一步一步地瀏覽你的指示,打開(kāi)和關(guān)閉 LED。

對(duì)于一套基本的紅綠燈,這就足夠了。不過(guò),對(duì)于設(shè)置了行人手動(dòng)按鈕的交叉口,你的程序需要能夠記錄按鈕是否以不中斷紅綠燈的方式按下。要做到這一點(diǎn),你需要使用到一個(gè)新的庫(kù):_thread。返回到程序的開(kāi)始部分,在那里你導(dǎo)入 machine 和 utime 庫(kù),并導(dǎo)入 _thread 庫(kù):

import _thread

線程實(shí)際上是一個(gè)小的、部分獨(dú)立的程序。你可以將前面編寫(xiě)的控制燈的循環(huán)視為程序的主線程,并使用 _thread 庫(kù)創(chuàng)建一個(gè)同時(shí)運(yùn)行的額外線程。

可視化線程的簡(jiǎn)單方法是將每個(gè)線程都想象成廚房里的獨(dú)立人員,當(dāng)廚師準(zhǔn)備主菜時(shí),其 他人正在制作醬汁。目前,你的程序只有一個(gè)線程:控制紅綠燈的線程。然而,為 Pico 提供算力的 RP2040 微控制器有兩個(gè)處理核心,意思是,就像廚房中的廚師和副廚師一樣,你可以同時(shí)運(yùn)行兩個(gè)線程來(lái)完成更多的工作。

在制作另一個(gè)線程之前,你需要一種方法讓新線程將信息傳回主線程,并且你可以使用全局 變量做到這一點(diǎn)。在此之前,你一直在處理的變量稱為局部變量,并且僅在程序的一個(gè)部分工作:一個(gè)全局變量在任何地方都有效,這意味著一個(gè)線程可以更改值,另一個(gè)線程可以檢查它是否已更改。

首先,你需要?jiǎng)?chuàng)建一個(gè)全局變量。在 buzzer = 這行下面,添加以下內(nèi)容:

global button_pressed
button_pressed = False

這將把 button_pressed 設(shè)置為一個(gè)全局變量,并給它一個(gè)默認(rèn)值 False,意思是當(dāng)程序啟動(dòng)時(shí),按鈕還沒(méi)有被按下。下一步是定義線程,通過(guò)添加下面的行讓程序更具有可讀性:

def button_reader_thread():
global button_pressed
while True:
if button.value() == 1:
button_pressed = True

添加的第一行定義了線程,并給它一個(gè)名稱來(lái)述它的用途:讀取按鈕輸入的線程。就像在編寫(xiě) 循環(huán)時(shí),MicroPython 需要將線程中包含的所有內(nèi)容縮進(jìn) 4 個(gè)空格,這樣它就知道線程從哪里開(kāi)始和結(jié)束。

下一行讓 MicroPython 知道你將更改全局 button_pressed 變量的值。如果你只想檢查該值,則不需要這一行—但是沒(méi)有這一行,你就不能對(duì)變量進(jìn)行任何更改。

接下來(lái),你設(shè)置了一個(gè)新的循環(huán),這意味著接下來(lái)需要一個(gè)新的四空格縮進(jìn),總共是八個(gè)縮進(jìn),這樣 MicroPython 就知道循環(huán)是線程的一部分,下面的代碼也是循環(huán)的一部分。這個(gè)嵌套代碼在多個(gè)水平 MicroPython 縮進(jìn)是很常見(jiàn)的。

下一行是一個(gè)條件語(yǔ)句,用于檢查按鈕的值是否為 1。因?yàn)?Pico 使用一個(gè)內(nèi)部下拉電 阻,當(dāng)按鈕沒(méi)有被按下時(shí),讀取的值是 0,表示在條件下的代碼永遠(yuǎn)不會(huì)運(yùn)行。只有當(dāng)按鈕被按下時(shí),線程的最后一行才會(huì)運(yùn)行:這一行將 button_pressed 變量設(shè)置為 True,讓程序的其余部分知道按鈕已被按下。

你可能注意到,在線程中沒(méi)有任何東西可以將 button_pressed 變量重置回當(dāng)按鈕被按下后 釋放時(shí)為 False。這是有原因的,雖然你可以在交通燈周期的任何時(shí)候按下過(guò)馬路的按鈕,但它只有在交通燈變紅、你可以安全過(guò)馬路時(shí)才會(huì)生效。你的新線程需要做的就是在按鈕被按下時(shí)改變變量;當(dāng)行人安全過(guò)馬路時(shí),主線程會(huì)將其重置為 False。

定義一個(gè)線程并不會(huì)使它自動(dòng)運(yùn)行,可以在程序中的任何地方啟動(dòng)一個(gè)線程,并且需要明確地告訴 _thread 庫(kù)何時(shí)啟動(dòng)線程。與運(yùn)行普通代碼不同,運(yùn)行線程不會(huì)停止程序的其余部分,當(dāng)線程啟動(dòng)時(shí),MicroPython 將繼續(xù)運(yùn)行程序的下一行。

在你的線程下面新建一行,刪除所有 Thonny 為你自動(dòng)添加的縮進(jìn),如下所示:

_thread.start_new_thread(button_reader_thread, ())

這告訴 _thread 庫(kù)啟動(dòng)前面定義的線程。此時(shí),線程將開(kāi)始運(yùn)行,并迅速進(jìn)入循環(huán):每秒檢查按鈕數(shù)千次,看它是否被按下。與此同時(shí),主線程將繼續(xù)執(zhí)行程序的主要部分。

現(xiàn)在點(diǎn)擊 Run 按鈕。你會(huì)看到交通燈和以前一樣,沒(méi)有延遲或停頓。但是,如果你按下按鈕,什么也不會(huì)發(fā)生,因?yàn)槟氵€沒(méi)有添加代碼來(lái)實(shí)際響應(yīng)按鈕。

轉(zhuǎn)到你的主循環(huán)的開(kāi)始,在 True: 的正下方,添加以下代碼:記住要注意嵌套縮進(jìn):

if button_pressed == True:
  led_red.value(1)
  for i in range(10):
    buzzer.value(1)
    utime.sleep(0.2)
    buzzer.value(0)
    utime.sleep(0.2)
  global button_pressed
  button_pressed = False

這段代碼檢查 button_pressed 全局變量,以查看自上次循環(huán)運(yùn)行以來(lái),按鈕開(kāi)關(guān)是否在任何時(shí)候被按下。如果有,就像你之前的按鈕閱讀線程報(bào)告的那樣,它開(kāi)始運(yùn)行一段代碼,首先打開(kāi)紅色 LED 燈來(lái)阻止交通,然后蜂鳴器響十次——讓行人知道該過(guò)馬路了。

最后,最后兩行將 button_pressed 變量重置為 False,因此下次循環(huán)運(yùn)行時(shí),除非再次按下按鈕,否則不會(huì)觸發(fā)行人過(guò)馬路代碼。你將看到,在條件語(yǔ)句中不需要使用 global button_pressed 來(lái)檢查變量的狀態(tài);只有當(dāng)你想要更改變量并使該更改影響程序的其他部 分時(shí),才需要使用它。

最終程序如下:

import machine
import utime
import _thread


led_red = machine.Pin(15, machine.Pin.OUT)
led_amber = machine.Pin(14, machine.Pin.OUT)
led_green = machine.Pin(13, machine.Pin.OUT)
button = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_DOWN)
buzzer = machine.Pin(12, machine.Pin.OUT)


global button_pressed
button_pressed = False


def button_reader_thread():
  global button_pressed
  while True:
    if button.value() == 1:
      button_pressed = True


_thread.start_new_thread(button_reader_thread, ())


while True:
  if button_pressed == True:
    led_red.value(1)
    for i in range(10):
      buzzer.value(1)
      utime.sleep(0.2)
      buzzer.value(0)
      utime.sleep(0.2)


    global button_pressed
    button_pressed = False


led_red.value(1)
utime.sleep(5)
led_amber.value(1)
utime.sleep(2)
led_red.value(0)
led_amber.value(0)
led_green.value(1)
utime.sleep(5)
led_green.value(0)
led_amber.value(1)
utime.sleep(5)
led_amber.value(0)

點(diǎn)擊 Run 圖標(biāo)。首先,程序?qū)⒄_\(yùn)行,交通燈將按照通常的模式亮和關(guān)。按下按鈕開(kāi)關(guān):如果程序當(dāng)前在它的循環(huán)過(guò)程中,在到達(dá)終點(diǎn)并再次循環(huán)之前不會(huì)發(fā)生任何事情,這時(shí)紅燈會(huì)變亮,蜂鳴器會(huì)提示你可以在道路上安全通過(guò)了。

過(guò)馬路的時(shí)候按下按鈕,紅燈保持點(diǎn)亮,蜂鳴器響 10 次。之后蜂鳴器不再響了,紅燈仍然亮著,所以任何在蜂鳴器發(fā)出時(shí)開(kāi)始過(guò)馬路的人 都有時(shí)間在車(chē)輛允許通行之前到達(dá)另一邊。

恭喜你!你已經(jīng)建立了你自己的海雀交叉口!

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    8190

    瀏覽量

    160284
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    147

    文章

    18408

    瀏覽量

    380015
  • 交通燈
    +關(guān)注

    關(guān)注

    13

    文章

    325

    瀏覽量

    40651
  • 樹(shù)莓派
    +關(guān)注

    關(guān)注

    122

    文章

    2067

    瀏覽量

    109063
  • 控制程序
    +關(guān)注

    關(guān)注

    1

    文章

    52

    瀏覽量

    9443

原文標(biāo)題:樹(shù)莓派 Pico 實(shí)現(xiàn)交通燈控制程序

文章出處:【微信號(hào):趣無(wú)盡,微信公眾號(hào):趣無(wú)盡】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于labview的交通燈程序下載

    代碼代碼版本控制:-功能說(shuō)明:一個(gè)自己寫(xiě)的交通燈控制程序。寫(xiě)這個(gè)程序只是為了練習(xí)一下邏輯處理能力。其中使用了隊(duì)列和狀態(tài)機(jī)。目的是以最簡(jiǎn)潔的代碼,最少的CPU占用,完成一個(gè)邏輯處理,如果
    發(fā)表于 11-14 11:01

    基于51的交通燈控制程序

    用51完成東西走向的一組交通燈控制,用數(shù)碼管顯示時(shí)間
    發(fā)表于 01-11 07:57

    樹(shù)莓遙控視頻小車(chē)的方法

    樹(shù)莓遙控視頻小車(chē)實(shí)現(xiàn)功能硬件材料控制程序PS2手柄驅(qū)動(dòng)程序運(yùn)動(dòng)控制程序源碼鏈接擴(kuò)展功能
    發(fā)表于 02-08 06:02

    基于FPGA的交通燈控制實(shí)現(xiàn)

    傳統(tǒng)交通燈控制器多數(shù)由單片機(jī)或PLC 實(shí)現(xiàn)。本論文介紹一種用FPGA 實(shí)現(xiàn)交通燈控制器的設(shè)計(jì)方法
    發(fā)表于 06-12 11:12 ?90次下載

    交通信號(hào)燈控制程序設(shè)計(jì)與調(diào)試

    交通信號(hào)燈控制程序設(shè)計(jì)與調(diào)試 定時(shí)指令的使用順序控制的原理PLC在人們實(shí)際的生活中,應(yīng)用還是比較廣泛的,而與我們的生命安全息息相關(guān)的交通燈,也可以實(shí)
    發(fā)表于 06-14 10:27 ?0次下載

    紅外遙控電路及控制程序

    紅外遙控電路及控制程序
    發(fā)表于 03-11 09:41 ?199次下載

    交通燈控制實(shí)驗(yàn)

    交通燈控制實(shí)驗(yàn)一)實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)并行接口8255實(shí)現(xiàn)十字路口交通燈的模擬控制,進(jìn)一步掌握對(duì)并行口的
    發(fā)表于 03-25 11:03 ?8021次閱讀
    <b class='flag-5'>交通燈</b><b class='flag-5'>控制</b>實(shí)驗(yàn)

    交通燈控制程序設(shè)計(jì)實(shí)驗(yàn)

    實(shí)驗(yàn)  交通燈控制程序設(shè)計(jì)實(shí)驗(yàn) 一 、 實(shí)驗(yàn)?zāi)康?、 掌握S系列PLC的硬件組成和軟件結(jié)構(gòu)。2、 進(jìn)一步熟悉S7-200系列PLC
    發(fā)表于 05-17 10:15 ?3747次閱讀

    交通信號(hào)燈控制_匯編

    匯編編寫(xiě)的交通燈控制程序,適用于點(diǎn)片機(jī)的設(shè)計(jì)
    發(fā)表于 01-07 16:35 ?14次下載

    LED模擬交通燈

    課程設(shè)計(jì)LED模擬交通燈,通過(guò)51單片機(jī)控制實(shí)現(xiàn)交通燈的功能。
    發(fā)表于 05-13 10:17 ?18次下載

    PLC控制LED數(shù)碼顯示控制程序

    PLC控制LED數(shù)碼顯示控制程序,初次來(lái)到此地,請(qǐng)多關(guān)照。
    發(fā)表于 05-19 14:31 ?0次下載

    交通燈程序設(shè)計(jì) 交通燈protues仿真程序基于51單片機(jī)交通燈

    交通燈程序設(shè)計(jì) 交通燈protues仿真程序基于51單片機(jī)交通燈仿真
    發(fā)表于 01-14 22:32 ?363次下載

    如何使用51單片機(jī)進(jìn)行簡(jiǎn)單的交通燈控制程序資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用51單片機(jī)進(jìn)行簡(jiǎn)單的交通燈控制程序資料說(shuō)明。
    發(fā)表于 05-30 17:55 ?2次下載
    如何使用51單片機(jī)進(jìn)行簡(jiǎn)單的<b class='flag-5'>交通燈</b><b class='flag-5'>控制程序</b>資料說(shuō)明

    51單片機(jī)上實(shí)現(xiàn)交通燈程序

    這是我前幾天無(wú)聊自己寫(xiě)的交通燈程序,在51單片機(jī)上實(shí)現(xiàn)的?;镜亩〞r(shí)的交通燈轉(zhuǎn)換是實(shí)現(xiàn)了,根據(jù)時(shí)間來(lái)改變
    發(fā)表于 07-15 17:34 ?1.2w次閱讀

    單片機(jī)交通燈程序設(shè)計(jì)中斷系統(tǒng)

    隨著社會(huì)的發(fā)展,交通問(wèn)題逐漸突出,特別是城市交通問(wèn)題愈加嚴(yán)重。為了更好地管理和調(diào)控交通,提高交通流暢度和安全性,交通燈系統(tǒng)成為了城市
    的頭像 發(fā)表于 01-24 16:16 ?1788次閱讀