如何将HC-05与AVR ATmega8连接起来控制LED

描述

在本教程中,让我们学习如何将HC-05蓝牙模块与AVR ATmega8微控制器连接。我们将通过蓝牙模块在Android移动和Atmega8之间建立通信,蓝牙模块通过UART串行通信协议进行。在这个项目中,我们将使用智能手机的蓝牙控制LED。

 

所需材料:

AVR Atmega8

HC-05 蓝牙模块

发光二极管

USBASP 编程器

10 针 FRC 电缆

跳线

面包板

使用的软件:

我们将使用CodeVisionAVR软件编写代码,并使用SinaProg软件使用USBASP程序员将代码上传到Atmega8。

蓝牙模块 HC-06:

蓝牙可以在以下两种模式下运行:

命令模式

操作模式

在命令模式下,我们将能够配置蓝牙属性,例如蓝牙信号的名称,密码,操作波特率等。操作模式是我们能够在PIC微控制器和蓝牙模块之间发送和接收数据的模式。因此,在本教程中,我们将只玩弄操作模式。命令模式将保留默认设置。设备名称将是HC-05(我正在使用HC-06),密码将是0000或1234,最重要的是,所有蓝牙模块的默认波特率为9600。

蓝牙模块

模块采用 5V 电源供电,信号引脚工作在 3.3V,因此模块本身存在一个 3.3V 稳压器。因此,我们不必担心。在六个引脚中,只有四个将在操作模式下使用。引脚连接表如下所示

 

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 数控 数控
6 英文(使能) 数控 数控

 

使用 CodeVision 为 Atmega 8 创建项目:

安装这些软件后,请按照以下步骤创建项目并编写代码:

第 1 步。打开 CodeVision 单击“文件 -> 新建”-> 项目。将出现确认对话框。点击是

蓝牙模块

第 2 步。代码向导将打开。单击第一个选项,即 AT90,然后单击确定。

蓝牙模块

第 3 步。选择您的微控制器芯片,在这里我们将采用如图所示的Atmega8。

蓝牙模块

第 4 步。单击端口。在我们的项目中,我们将使用端口 C4 和 C5 进行 LED 接口。因此,通过单击将位 4 和位 5 作为输出。如下图所示:

蓝牙模块

第5步。我们将使用 USART 用于 Rx 和 Tx。因此,单击USART选项,然后单击接收器选项,然后保持原样。

蓝牙模块

第 6 步。单击程序 - >生成,保存并退出。现在,我们一半以上的工作已经完成

蓝牙模块

步骤 7.在桌面上创建一个新文件夹,以便我们的文件保留在文件夹中,否则我们将分散在整个桌面窗口中。根据需要命名您的文件夹,我建议使用相同的名称来保存程序文件。

我们将有一个接一个的对话框来保存文件。

蓝牙模块

对保存第一个对话框后将出现的其他两个对话框执行相同的操作。

现在,您的工作区如下所示。

蓝牙模块

我们的大部分工作都是在向导的帮助下完成的。现在, 我们只需要编写几行代码来连接蓝牙模块并控制 LED.

电路图:

下面给出了蓝牙HC-05与AVR接口的电路图。

蓝牙模块

将FRC电缆的一端连接到USBASP编程器,另一端将连接到微控制器的SPI引脚,如下所述:

蓝牙模块

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函数中声明了一个变量,用于存储来自蓝牙模块的传入字符。

#include

// Declare your global variables here

// Standard Input/Output functions

#include

void main(void)

{

char var;                 // Declare your local variables here

其余代码很简单,很容易理解。现在,进入代码的最后一行,您将在其中找到一个while循环。我们的主代码将在此循环中。在这里,我们不断检查来自蓝牙模块的传入字符并相应地打开或关闭 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’ 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;

}     

}

我们的代码完成了。现在,我们必须构建我们的项目。单击“构建项目”图标,如下所示。

蓝牙模块

生成项目后,将在调试> Exe 文件夹中生成一个十六进制文件,该文件可以在您之前为保存项目而创建的文件夹中找到。我们将使用此十六进制文件通过Sinaprog软件上传到atmega8中。

使用 Sinaprog 将代码上传到 Atmega 8:

我们将使用Sinaprog上传上面生成的十六进制文件,因此打开它并从设备下拉菜单中选择 Atmega8。从调试> Exe 文件夹中选择十六进制文件,如下所示。

蓝牙模块

现在,单击程序。

蓝牙模块

 

蓝牙模块

您的微控制器已编程。现在,我们需要一个Android应用程序来连接我们的模块。我们将使用“蓝牙终端应用程序”来控制LED灯。

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

我们将使用智能手机中的“蓝牙终端应用程序”与另一端的HC-05通话以控制LED灯。

您可以通过将电路插入PC来使用相同的usbap为电路供电,也可以将外部5V(不超过5!!!!!)施加到Atmega8 Vcc引脚。

安装后.打开应用程序并将其与蓝牙模块连接(HC-05,默认密码为1234)。

蓝牙模块

现在,发送“a”,看到 LED 会发光。发送“b”,指示灯将熄灭。

蓝牙模块

因此,现在通过发送字符“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; 


     }      


 


     } 


}

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分