久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3065|回復: 2
打印 上一主題 下一主題
收起左側

自己動手做一輛單片機藍牙小車

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:456580 發(fā)表于 2020-5-9 11:54 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
1.前期準備

準備好杜邦線、HC-06藍牙模塊、單片機(我用的是粵嵌的51單片機,自己做一個最小系統(tǒng)也行)、小車底盤、電源、L298N、螺柱(固定零件用的)。如果想做的話請自己買這些零件,做出來的效果圖片如下(我加了尋跡模塊)。


2.開工
  • 用到的主要引腳定義如下。

///8個LED燈
sbit led1 = P1^0;
sbit led2 = P1^1;
sbit led3 = P1^2;
sbit led4 = P1^3;
sbit led5 = P1^4;
sbit led6 = P1^5;
sbit led7 = P1^6;
sbit led8 = P1^7;
sbit bell = P0^7;
//電機引腳
sbit La = P0^0;
sbit Lb = P0^1;
sbit Ra = P0^2;
sbit Rb = P0^3;

2.用到的主要知識就是中斷了。我本來想做一個尋跡和藍牙控制一體的小車(但是尋跡并沒有做好,所以這里就只給大家寫藍牙模塊怎么實現(xiàn)了),想了想當尋跡模式立即轉(zhuǎn)到藍牙控制模式時(或者藍牙模式立即轉(zhuǎn)換成尋跡模式)好像也只有中斷可以,所以就加了個中斷來掃描看有沒有收到轉(zhuǎn)換信號。我的代碼如下。

include <reg52.h>

sbit led1 = P1^0;
sbit led2 = P1^1;
sbit led3 = P1^2;
sbit led4 = P1^3;
sbit led5 = P1^4;
sbit led6 = P1^5;
sbit led7 = P1^6;
sbit led8 = P1^7;
sbit bell = P0^7;
sbit K1 = P3^3;
sbit K2 = P3^4;
sbit K3 = P3^6;
sbit K4 = P3^7;
sbit La = P0^0;
sbit Lb = P0^1;
sbit Ra = P0^2;
sbit Rb = P0^3;
sbit right = P0^4;
sbit left = P0^5;
sbit down_right = P0^6;
sbit down_left = P2^7;

unsigned char a = 0;
unsigned char num = 0;
unsigned char temp = 0;

bit auto_run = 0;
bit lanya_run = 1;

void uart_init();
void delay(unsigned int time);
void go_up();
void go_down();
void turn_left();
void turn_right();
void bell_on();
void bell_off();
void led_all_on();
void led_all_off();
void go_around_shun();
void go_around_li();
void stop();
void change_name();
void init_T0();

void main() {
uart_init();
init_T0();
change_name();
while(1) {
  if(lanya_run == 1) {
   while(1) {
    if(lanya_run != 1) {
     break;
    }
    if (num != 0) {
     ES = 0;
     num = 0;
     SBUF = a;
     while (!TI);
     TI = 0;
     ES = 1;
    }
    switch (a)
    {
     case '0': go_up(); bell_on();  break;
     case '1': go_down(); bell_on(); break;
     case '2': turn_left(); bell_on();  break;
     case '3': turn_right(); bell_on(); break;
     case '5': go_around_shun(); bell_on(); break;
     case '6': led_all_on(); break;
     case '7': led_all_off(); break;
     case '8': go_around_li(); bell_on(); break;
     default: stop(); bell_off(); break;
    }
   }
  }
  if(auto_run == 1) {
   while(1) {
    if(auto_run != 1) {
     break;
    }
    if (num != 0) {
     ES = 0;
     num = 0;
     SBUF = a;
     while (!TI);
     TI = 0;
     ES = 1;
    }
    go_up();
    if (!left && right) {
     go_around_shun();
     bell_on();
     delay(50);
     bell_off();
     delay(1000);
    }
    if (!right && left) {
     go_around_li();
     bell_on();
     delay(50);
     bell_off();
     delay(1000);
    }
    if(!right && !left) {
     go_down();
     bell_on();
     delay(50);
     bell_off();
     delay(1000);
    }
    if(left && right) {
     go_up();
     delay(100);
    }
   }
  }
}
}

void uart_fun() interrupt 4 {
RI = 0;
a = SBUF;
num++;
}

void T0Int() interrupt 1 {
TH0 = 0xD8;
TL0 = 0xF0;

temp++;

if(temp == 10) {
  temp = 0;
  if(a == '9' && lanya_run == 1) {
   lanya_run = 0;
   auto_run = 1;
  }
  if(a == '9' && lanya_run == 0) {
   lanya_run = 1;
   auto_run = 0;
  }
}
}

void uart_init() {
TMOD = 0x20;  //設置定時器設置
TH1 = 0xFD;   //設置初始波特率9600
TL1 = 0xFD;      //
TR1 = 1;   //開啟定時器1
SM0 = 0;   //設置串行工作方式
SM1 = 1;   //
REN = 1;   //允許傳興接受位
EA = 1;    //開啟總中斷
ES = 1;    //開啟串口中斷口
}

void delay(unsigned int time) {
int i = 121;
while(time--)
  while(i--);
}

void stop()
{
La = 0;
Lb = 0;
Ra = 0;
Rb = 0;
}

void go_around_shun() {
La = 1;
Lb = 0;
Ra = 0;
Rb = 1;
}

void go_around_li() {
La = 0;
Lb = 1;
Ra = 1;
Rb = 0;
}

void go_down() {
La = 0;
Lb = 1;
Ra = 0;
Rb = 1;
}

void go_up() {
La = 1;
Lb = 0;
Ra = 1;  
Rb = 0;
}

void turn_right() {
La = 1;
Lb = 0;
Ra = 1;
Rb = 0;
delay(5);
Ra = 0;
delay(5);
}

void turn_left() {
Ra = 1;
Rb = 0;
La = 1;
Lb = 0;
delay(5);
La = 0;
delay(5);
}

void change_name() {
char name[] = "AT+NAME=StarSea\r\n";
char i;
for(i = 0; i < sizeof(name); i++) {
  SBUF = name[ i];
  while(!TI);
  TI = 0;
}
delay(500);
}

[ i]void bell_on() {
bell = 0;
}

void bell_off() {
bell = 1;
}

void led_all_on() {
P0 = 0x00;
}

[ i]void led_all_off() {
P0 = 0x11;
}

void init_T0() {
TMOD = 0x21;
TH0 = 0xD8;
TL0 = 0xF0;
EA = 1;
ET0 = 1;
TR0 = 1;
}

  • 把程序燒入單片機,再把收到的小車底盤零件拼起來,其他配件用杜邦線和對應引腳連接起來。
  • 下載藍牙串口這個程序。以編輯前進按鈕為例:我的代碼中,收到字符0就前進收到字符4就停下。所以這里按下就發(fā)送0,松開就發(fā)送4。我的所有按鈕如圖(自動駕駛就是尋跡,但是沒有做好)。
  • 通過藍牙串口連接HC-05(默認的藍牙名字)即可開始用自制的藍牙小車了。

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:58937 發(fā)表于 2020-5-10 10:08 | 只看該作者
正在學習謝謝分享
回復

使用道具 舉報

板凳
ID:58937 發(fā)表于 2020-5-10 10:10 | 只看該作者
哪裡下載
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品福利网站 | 久久香蕉网 | 日本三级电影在线观看视频 | 欧美日一区二区 | 毛片在线免费播放 | 成人三级网址 | 久草视频2 | 欧美一级片免费看 | 国产免费让你躁在线视频 | 成人免费观看视频 | 国产黄色大片 | 国产成人在线一区 | 久久久久久久久久爱 | 亚洲精品一二区 | 成人影院在线视频 | 91麻豆精品国产91久久久资源速度 | 精品少妇一区二区三区日产乱码 | 国产高清视频一区 | 男女网站在线观看 | 亚洲一区二区网站 | 国产粉嫩尤物极品99综合精品 | 国产色网站 | 九九综合九九 | 亚洲一区二区久久久 | 午夜爽爽男女免费观看hd | 色一情一乱一伦一区二区三区 | 国产成人免费在线 | 波波电影院一区二区三区 | 91社区视频 | 欧洲一区二区三区 | 亚洲福利一区 | 国产精品久久国产精品99 gif | 成人一区二区在线 | 国产综合一区二区 | 亚洲一区视频在线播放 | 91视频91 | 中文字幕在线免费视频 | 操久久 | 日韩精品中文字幕在线 | 亚洲成人av | 日韩精品久久 |