危機處理-藍芽傳送字元(HC-05)
今天來補個用藍芽傳字元給M0的程式碼
使用的藍芽模組是HC-05(主從合一),之後有空再補上HC-05的設定
查了查資料發現藍牙傳輸的方式不會對傳輸內容做任何的手腳(應該說調變?)等效於一條RS-232傳輸線
所以關於藍牙與板子的溝通就是通過UART協定去寫
而NUC140關於UART的腳位如下
(擷取自樹德科技大學資訊工程系 吳鴻志副教授之PPT)
我測試用的程式碼如下:
#include <stdio.h>
#include "NUC1xx.h"
#include "Driver\DrvSYS.h"
#include "Driver\DrvGPIO.h"
#include "Driver\DrvSPI.h"
#include "LCD_Driver.h"
#include "ScanKey.h"
#include "Seven_Segment.h"
#include "LCD_Driver_Extend.h"
#include "Driver/DrvUART.h"
#define DATASIZE 1
uint8_t mode;
extern unsigned char Ascii[];
unsigned char TEXT1[16]="Keypad = ";
unsigned char LCD_Point[64];
unsigned char DisplayBuf[8*128];
int main(void)
{
UNLOCKREG();
DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1);
SysTimerDelay(5000);
/* HCLK clock source. 0: external 12MHz; 4:internal 22MHz RC oscillator */
DrvSYS_SelectHCLKSource(0);
LOCKREG();
Initial_pannel(); //call initial pannel function
clr_all_pannal();
OpenKeyPad();
DrvGPIO_Open(E_GPD, 14, E_IO_OUTPUT);
DrvGPIO_ClrBit(E_GPD,14);
uint8_t read_buf[16];
char TEXT[16];
STR_UART_T sParam;
int x=0, y=0;
int key;
char a;
UNLOCKREG();
DrvSYS_Open(48000000);
LOCKREG();
//藍牙初始化
DrvGPIO_InitFunction(E_FUNC_UART0); // Set UART pins
/* UART Setting */
sParam.u32BaudRate = 9600;
sParam.u8cDataBits = DRVUART_DATABITS_8;
sParam.u8cStopBits = DRVUART_STOPBITS_1;
sParam.u8cParity = DRVUART_PARITY_NONE;
sParam.u8cRxTriggerLevel= DRVUART_FIFO_1BYTES;
/* Set UART Configuration */
if(DrvUART_Open(UART_PORT0,&sParam) != E_SUCCESS);
//球的起始位置
draw_circle(DisplayBuf, 64+x, 32+y, 3);
while(1){
// read 1 bytes(由DATASIZE決定) from bluetooth(讀完之後才會往下走)
DrvUART_Read(UART_PORT0,read_buf,DATASIZE);
//sprintf(TEXT,"%s",read_buf); // display on LCD
//print_lcd(1, TEXT);
a=read_buf[0];
if(a==0x46){ //F ascii == 0x46
y--;
draw_circle(DisplayBuf, 64+x, 32+y, 3);
}
if(a==0x42){ //B ascii ==0x42
y++;
draw_circle(DisplayBuf, 64+x, 32+y, 3);
}
if(a==0x4c){ //L ascii ==0x4c
x--;
draw_circle(DisplayBuf, 64+x, 32+y, 3);
}
if(a==0x52){ //R ascii ==0x52
x++;
draw_circle(DisplayBuf, 64+x, 32+y, 3);
}
}
}
運作起來就是以手機當controller透過藍芽去操控螢幕上的球
play商店上搜尋“bluetooth terminal”就可以找到有前後左右的controller還可以設定每個方向的字元
這裡我設定
Forwad = F
Backward = B
Left = L
Right = R
draw_circle() 是我寫的一個方便畫球的函式
我中間還有保留將收到的字元顯示螢幕的程式碼方便用來檢查controller的設定
最後程式碼當中是使用UART0 所以代表是使用GPB0&GPB1
連接的方式就是把HC-05的Tx接到GPB0(Rx)即可(板子的傳送端沒用到所以可以懶得接)
留言
張貼留言