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

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

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

如何將HC-05與AVR ATmega8連接起來控制LED

科技觀察員 ? 來源:circuitdigest ? 作者:里沙布·耆那教 ? 2022-11-14 17:03 ? 次閱讀

在本教程中,讓我們學習如何將HC-05藍牙模塊與AVR ATmega8微控制器連接。我們將通過藍牙模塊在Android移動和Atmega8之間建立通信,藍牙模塊通過UART串行通信協(xié)議進行。在這個項目中,我們將使用智能手機的藍牙控制LED。

所需材料:

AVR Atmega8

HC-05 藍牙模塊

發(fā)光二極管

USBASP 編程

10 針 FRC 電纜

跳線

面包板

使用的軟件:

我們將使用CodeVisionAVR軟件編寫代碼,并使用SinaProg軟件使用USBASP程序員將代碼上傳到Atmega8。

藍牙模塊 HC-06:

藍牙可以在以下兩種模式下運行:

命令模式

操作模式

在命令模式下,我們將能夠配置藍牙屬性,例如藍牙信號的名稱,密碼,操作波特率等。操作模式是我們能夠在PIC微控制器和藍牙模塊之間發(fā)送和接收數(shù)據(jù)的模式。因此,在本教程中,我們將只玩弄操作模式。命令模式將保留默認設置。設備名稱將是HC-05(我正在使用HC-06),密碼將是0000或1234,最重要的是,所有藍牙模塊的默認波特率為9600。

poYBAGNyBGeAcjRrAACRRzH8oH8104.jpg

模塊采用 5V 電源供電,信號引腳工作在 3.3V,因此模塊本身存在一個 3.3V 穩(wěn)壓器。因此,我們不必擔心。在六個引腳中,只有四個將在操作模式下使用。引腳連接表如下所示

S.No HC-05/HC-06 上的引腳 MCU 上的引腳名稱 PIC 中的引腳編號
1 Vcc Vdd 31圣針
2 Vcc 格德 32德·針
3 德克薩斯 RC6/Tx/CK 25千針
4 接收 RC7/Rx/DT 26千針
5 數(shù)控 數(shù)控
6 英文(使能) 數(shù)控 數(shù)控

使用 CodeVision 為 Atmega 8 創(chuàng)建項目:

安裝這些軟件后,請按照以下步驟創(chuàng)建項目并編寫代碼:

第 1 步。打開 CodeVision 單擊“文件 -> 新建”-> 項目。將出現(xiàn)確認對話框。點擊是

pYYBAGNyBGqAcWt-AACSmU93eSM139.png

第 2 步。代碼向?qū)⒋蜷_。單擊第一個選項,即 AT90,然后單擊確定。

pYYBAGNyBG2AUV1KAAC8vZSNJSE470.png

第 3 步。選擇您的微控制器芯片,在這里我們將采用如圖所示的Atmega8。

pYYBAGNyBG-ADsZWAACn3AGlTK4879.png

第 4 步。單擊端口。在我們的項目中,我們將使用端口 C4 和 C5 進行 LED 接口。因此,通過單擊將位 4 和位 5 作為輸出。如下圖所示:

poYBAGNyBHGAKOx_AACFCRIjX-w266.png

第5步。我們將使用 USART 用于 Rx 和 Tx。因此,單擊USART選項,然后單擊接收器選項,然后保持原樣。

pYYBAGNyBHOARbGAAACVH-OHr-A161.png

第 6 步。單擊程序 - >生成,保存并退出。現(xiàn)在,我們一半以上的工作已經(jīng)完成

poYBAGNyBHSAaCboAACKBkwvfRU388.png

步驟 7.在桌面上創(chuàng)建一個新文件夾,以便我們的文件保留在文件夾中,否則我們將分散在整個桌面窗口中。根據(jù)需要命名您的文件夾,我建議使用相同的名稱來保存程序文件。

我們將有一個接一個的對話框來保存文件。

pYYBAGNyBHaAEpLvAACOz4VNrzg767.png

對保存第一個對話框后將出現(xiàn)的其他兩個對話框執(zhí)行相同的操作。

現(xiàn)在,您的工作區(qū)如下所示。

poYBAGNyBHiAGLjLAADie_Din-E018.png

我們的大部分工作都是在向?qū)У膸椭峦瓿傻摹,F(xiàn)在, 我們只需要編寫幾行代碼來連接藍牙模塊并控制 LED.

電路圖:

下面給出了藍牙HC-05與AVR接口的電路圖。

poYBAGNyBHqADV1FAADirOPcUSo360.png

將FRC電纜的一端連接到USBASP編程器,另一端將連接到微控制器的SPI引腳,如下所述:

poYBAGNyBHyAEfxQAABxP4nGW2o451.png

FRC 母連接器引腳 1 -> 引腳 17,Atmega8 的 MOSI

引腳 2 連接到 atmega8 的 Vcc,即引腳 7

引腳 5 連接到 atmega8 的復位,即引腳 1

引腳 7 連接到 atmega8 的 SCK,即引腳 19

引腳 9 連接到 atmega8 的 MISO,即引腳 18

引腳 8 連接到 atmega8 的 GND,即引腳 8

按照電路圖連接試驗板上的其余組件。

代碼和說明:

文章末尾給出了帶有演示視頻的完整 AVR 代碼。

在這里,我們在void main函數(shù)中聲明了一個變量,用于存儲來自藍牙模塊的傳入字符。

#include

// Declare your global variables here

// Standard Input/Output functions

#include

void main(void)

{

char var; // Declare your local variables here

其余代碼很簡單,很容易理解。現(xiàn)在,進入代碼的最后一行,您將在其中找到一個while循環(huán)。我們的主代碼將在此循環(huán)中。在這里,我們不斷檢查來自藍牙模塊的傳入字符并相應地打開或關(guān)閉 LED.

while (1)

{

scanf("%c",&var); //this function is to used to check any character coming from our android app .

if (var == 'a') // We will send ‘a(chǎn)’ from Bluetooth Terminal to ON the LED and ‘b’ to OFF the LED

{

PORTC.5 = 1;

PORTC.4 = 0;

}

if (var == 'b')

{

PORTC.5 = 0;

PORTC.4 = 0;

}

}

我們的代碼完成了。現(xiàn)在,我們必須構(gòu)建我們的項目。單擊“構(gòu)建項目”圖標,如下所示。

poYBAGNyBICAdtqiAADjog1mleI660.png

生成項目后,將在調(diào)試> Exe 文件夾中生成一個十六進制文件,該文件可以在您之前為保存項目而創(chuàng)建的文件夾中找到。我們將使用此十六進制文件通過Sinaprog軟件上傳到atmega8中。

使用 Sinaprog 將代碼上傳到 Atmega 8:

我們將使用Sinaprog上傳上面生成的十六進制文件,因此打開它并從設備下拉菜單中選擇 Atmega8。從調(diào)試> Exe 文件夾中選擇十六進制文件,如下所示。

poYBAGNyBIKAV6CKAABgEvRne9E688.png

現(xiàn)在,單擊程序。

poYBAGNyBIOATGzdAAD6CIV689g399.jpg

pYYBAGNyBIeAPD5rAADEuhyOcGQ714.jpg

您的微控制器已編程?,F(xiàn)在,我們需要一個Android應用程序來連接我們的模塊。我們將使用“藍牙終端應用程序”來控制LED燈。

安卓應用程序,用于使用 AVR 控制 LED:

我們將使用智能手機中的“藍牙終端應用程序”與另一端的HC-05通話以控制LED燈。

您可以通過將電路插入PC來使用相同的usbap為電路供電,也可以將外部5V(不超過5!!!!!)施加到Atmega8 Vcc引腳。

安裝后.打開應用程序并將其與藍牙模塊連接(HC-05,默認密碼為1234)。

poYBAGNyBIiAZ6KCAABK3KNEsAc397.jpg

現(xiàn)在,發(fā)送“a”,看到 LED 會發(fā)光。發(fā)送“b”,指示燈將熄滅。

pYYBAGNyBIuADhEuAABxLMiZFmE914.jpg

因此,現(xiàn)在通過發(fā)送字符“a”和“b”,您可以使用智能手機無線控制 LED。如果您將語音鍵盤與藍牙應用程序一起使用,那么您甚至不需要輸入字符“a”和“b”,您只需說出它們,就可以使用語音控制 LED。

#include


#include


void main(void)


{


char var;


// Declare your local variables here


// Input/Output Ports initialization


// Port A initialization


// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In


DDRA=(0<

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T


PORTA=(0<




// Port B initialization


// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In


DDRB=(0<

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T


PORTB=(0<




// Port C initialization


// Function: Bit7=In Bit6=In Bit5=Out Bit4=Out Bit3=In Bit2=In Bit1=In Bit0=In


DDRC=(0<

// State: Bit7=T Bit6=T Bit5=0 Bit4=0 Bit3=T Bit2=T Bit1=T Bit0=T


PORTC=(0<




// Port D initialization


// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In


DDRD=(0<

// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T


PORTD=(0<




// Timer/Counter 0 initialization


// Clock source: System Clock


// Clock value: Timer 0 Stopped


// Mode: Normal top=0xFF


// OC0 output: Disconnected


TCCR0=(0<

TCNT0=0x00;


OCR0=0x00;





// Timer/Counter 1 initialization


// Clock source: System Clock


// Clock value: Timer1 Stopped


// Mode: Normal top=0xFFFF


// OC1A output: Disconnected


// OC1B output: Disconnected


// Noise Canceler: Off


// Input Capture on Falling Edge


// Timer1 Overflow Interrupt: Off


// Input Capture Interrupt: Off


// Compare A Match Interrupt: Off


// Compare B Match Interrupt: Off


TCCR1A=(0<

TCCR1B=(0<

TCNT1H=0x00;


TCNT1L=0x00;


ICR1H=0x00;


ICR1L=0x00;


OCR1AH=0x00;


OCR1AL=0x00;


OCR1BH=0x00;


OCR1BL=0x00;





// Timer/Counter 2 initialization


// Clock source: System Clock


// Clock value: Timer2 Stopped


// Mode: Normal top=0xFF


// OC2 output: Disconnected


ASSR=0<

TCNT2=0x00;


OCR2=0x00;





// Timer(s)/Counter(s) Interrupt(s) initialization


TIMSK=(0<




// External Interrupt(s) initialization


// INT0: Off


// INT1: Off


// INT2: Off


MCUCR=(0<

MCUCSR=(0<

UCSRB=(0<

UCSRC=(1<

UBRRH=0x00;


UBRRL=0x33;





// Analog Comparator initialization


// Analog Comparator: Off


// The Analog Comparator's positive input is


// connected to the AIN0 pin


// The Analog Comparator's negative input is


// connected to the AIN1 pin


ACSR=(1<

SFIOR=(0<




// SPI initialization


// SPI disabled


SPCR=(0<




// TWI initialization


// TWI disabled


TWCR=(0<




while (1)


{


scanf("%c",&var);


if (var == 'a')


{


PORTC.5 = 1;


PORTC.4 = 0;


}


if (var == 'b')


{


PORTC.5 = 0;


PORTC.4 = 0;


}





}


}

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

    關(guān)注

    48

    文章

    7455

    瀏覽量

    150858
  • ATmega8
    +關(guān)注

    關(guān)注

    4

    文章

    106

    瀏覽量

    49913
  • 藍牙模塊
    +關(guān)注

    關(guān)注

    30

    文章

    561

    瀏覽量

    55652
  • HC-05
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    16900
收藏 人收藏

    評論

    相關(guān)推薦

    如何將數(shù)組的的字符重新連接起來保存?

    TEMP[2]依次存入,直到4存入TEMP[7], 問題是:如何將數(shù)組的的字符重新連接起來保存?如何定義新的變量str?使str=\"ABCD1234\"?
    發(fā)表于 04-16 07:39

    如何將PLC通信口與無線數(shù)據(jù)終端連接起來??

    `如何將PLC通信口與無線數(shù)據(jù)終端連接起來,實現(xiàn)PLC與PLC之間,PLC與HMI觸摸屏間,PLC與PC組態(tài)軟件以及PLC與設備之間的無線數(shù)據(jù)交換!關(guān)注微信公眾號【PLC無線通訊】解決您的一切煩惱!`
    發(fā)表于 09-28 09:49

    如何把數(shù)據(jù)庫和其他程序連接起來?

    各位大神,我現(xiàn)在遇到一個問題。我想把已經(jīng)采集好的數(shù)據(jù)和數(shù)據(jù)庫的進行對比,然后檢索出相應的文字出來。我已經(jīng)把采集的數(shù)據(jù)編成代碼了,數(shù)據(jù)庫相應的文字也用代碼來進行代替。但是現(xiàn)在我不是很清楚如何將他們連接起來。兩個小程序分別運行沒有問題,但是
    發(fā)表于 04-13 11:16

    如何將IC的SCL和SDA引腳與FPGA板連接起來?

    Aoa ..我想將我的FPGA板(virtex6 ML605)與外部時鐘IC(ds1307)連接起來。請指導我如何將IC的SCL和SDA引腳與FPGA板連接。謝謝
    發(fā)表于 04-29 08:13

    怎么才能使Atmel Studio 7.0伺服電機與Atmega16 AVR控制連接起來

    怎么才能使Atmel Studio 7.0伺服電機與Atmega16 AVR控制連接起來?
    發(fā)表于 09-29 08:37

    如何將藍牙與STM32連接起來

    藍牙模塊有何功能?如何將藍牙與STM32連接起來呢?
    發(fā)表于 11-18 07:02

    如何將Eink顯示器與esp32連接起來

    一般來說,我是嵌入式系統(tǒng)和 ESP-IDF 的新手。我正在嘗試 Eink 顯示器與 esp32 連接起來,但我對如何為其編寫代碼有點迷茫。有沒有我可以參考的指南或教程?
    發(fā)表于 03-01 06:36

    如何將hwirq與中斷連接起來?

    的 MSIR7 寄存器設置中斷 0 位。那么,當那個中斷到達時,我該如何調(diào)用我的 interrupt_handler 函數(shù)呢?我想我應該使用 irq_create_mapping 和 request_irq Linux 函數(shù),但我不知道如何將 hwirq 與我的中斷鏈接起來
    發(fā)表于 03-14 08:20

    如何將EMMC SanDisk iNAND? 7250與LPC 1850連接起來?

    我們正在嘗試 EMMC SanDisk iNAND? 7250 與 LPC 1850 連接起來。EMMC 使用 MMC 5.1,但 1850 提到 4.4 作為標準。經(jīng)過研究,發(fā)現(xiàn)4.4是向下兼容
    發(fā)表于 04-27 06:33

    CS1238的AINN1和AINN2連接起來用嗎?

    CS1238的AINN1和AINN2連接起來用嗎? 需要測如此信號,打算把兩個差分對的負引腳連接起來用,這個用法行不行?
    發(fā)表于 08-24 17:51

    HC-05和MSP430連接起來控制LED的方式

     今天我們學習如何將藍牙模塊 HC-05 與德州儀器 (TI) 的 MSP430 Launchpad 連接起來。在這個接口示例中,我們將使用藍牙終端安卓應用程序從智能手機
    發(fā)表于 08-29 17:30 ?1534次閱讀
    <b class='flag-5'>將</b><b class='flag-5'>HC-05</b>和MSP430<b class='flag-5'>連接起來</b><b class='flag-5'>控制</b><b class='flag-5'>LED</b>的方式

    步進電機與Atmega16連接起來的方法

    在本教程中,我們將使用 Atmel Studio 7.0 28BYJ-48步進電機與 Atmega16 AVR控制連接起來。步進電機
    發(fā)表于 09-09 14:40 ?1276次閱讀
    <b class='flag-5'>將</b>步進電機與<b class='flag-5'>Atmega</b>16<b class='flag-5'>連接起來</b>的方法

    微型伺服電機與Atmega16連接起來的方法

    在本教程中,我們將使用 Atmel Studio 7.0微型伺服電機與 Atmega16 AVR控制連接起來。伺服電機額定工作電壓為
    發(fā)表于 09-09 15:00 ?1475次閱讀
    <b class='flag-5'>將</b>微型伺服電機與<b class='flag-5'>Atmega</b>16<b class='flag-5'>連接起來</b>的方法

    TLC32040系列與TMS320系列連接起來

    電子發(fā)燒友網(wǎng)站提供《TLC32040系列與TMS320系列連接起來.pdf》資料免費下載
    發(fā)表于 10-08 14:15 ?0次下載
    <b class='flag-5'>將</b>TLC32040系列與TMS320系列<b class='flag-5'>連接起來</b>

    I2S器件與MSP430器件連接起來

    電子發(fā)燒友網(wǎng)站提供《I2S器件與MSP430器件連接起來.pdf》資料免費下載
    發(fā)表于 10-18 09:31 ?0次下載
    <b class='flag-5'>將</b>I2S器件與MSP430器件<b class='flag-5'>連接起來</b>