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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 102|回復: 0
收起左側

請各位大佬幫我看一下單片機藍牙小車切換模式,幫幫孩子

[復制鏈接]
ID:1147091 發表于 2025-5-23 10:25 | 顯示全部樓層 |閱讀模式
藍牙模塊,避障模塊,紅外尋跡模塊單獨使用沒有問題,但是三個結合一起想要用藍牙切換模式的時候藍牙和紅外尋跡可以互相切換模式,但是切換到超聲波避障的時候發送數據后藍牙就自己斷聯了,也不能切換到超聲波避障模式,沒有添加紅外尋跡的時候藍牙和超聲波可以正常切換,請各位大佬指點一下,謝謝謝謝
typedef enum {
ULTRASONIC_MODE = 1,
HONGWAIXUN_MODE,
BLUETOOTH_MODE
}Mode;
extern volatile Mode current_mode;
extern volatile char received;
#include<reg52.h>
#include<intrins.h>
#include<lanya.h>
#define uchar unsigned char
volatile Mode current_mode = BLUETOOTH_MODE;
volatile char received;
// 初始化UART
void UART_Init()
{
PCON = 0x00; //關倍頻
SCON = 0x50; // 串口工作模式1,8位數據,1位停止位,允許接收
TMOD &=0x0F;
TMOD |= 0x20; // 定時器1模式2(8位自動重裝)
TH1 = 0xFD; // 9600波特率(11.0592MHz晶振)
TL1 = 0xFD;
ET1 = 0;
TR1 = 1; // 啟動定時器1
EA = 1; // 開啟總中斷
ES = 1; // 開啟串口中斷
PX1 = 1; // 設置串口中斷為高優先級
}
void delay(uint ms)//延時函數
{
uint x,y;
for(x=ms;x>0;x--)
for(y=114; y>0; y--);
}
void motor_forward()
{
IN1=0; IN2=1;//智能車左輪正轉
IN3=0; IN4=1;//智能車右輪正轉
}
void motor_back()
{
......
}
void motor_left()
{
......
}
void motor_right()
{
......
}
void motor_stop()
{
......
}
void UART_ISR() interrupt 4
{
if(RI){
received = SBUF;//從緩沖區接收數據
RI = 0;//接收中斷標志位清零
switch (received)
{
case '5': // 切換到超聲波測距避障模式
motor_stop();
current_mode = ULTRASONIC_MODE;
break;
case '7': // 切換為紅外尋跡模式
motor_stop();
current_mode = HONGWAIXUN_MODE;
break;
case '9': // 切換回藍牙模式
motor_stop();
current_mode = BLUETOOTH_MODE;
break;
default:
motor_stop();
break;
}
}
}
void lanya(char receive)
{
switch (receive)
{
case '2': // 前進
motor_forward();
break;
case '8': // 后退
motor_back();
break;
......
default:
motor_stop();
break;
}
}
sbit Trig = P2^0;
sbit Echo = P2^1;
extern int sum;
extern int mindistance;
void chaoshengbo()
{
unsigned char timeout = 0;
T2CON = 0x00; // 配置定時器2為16位自動重裝模式(非捕獲)
RCAP2H = 0x00; // 自動重裝高字節(初始值0)
RCAP2L = 0x00; // 自動重裝低字節(初始值0)
TH2 = 0x00; // 定時器2高字節初始值(測量時從0開始計數)
TL2 = 0x00; // 定時器2低字節初始值
PT2 = 0;
Trig = 1;
Delay20us();
Trig = 0;
while (!Echo) {
if (++timeout > 200) {
sum = 65535;
return;
}
}
TL2 = 0;
TH2 = 0;
TR2 = 1;
while (Echo);
TR2 = 0;
sum = ((TH2 * 256 + TL2) * 17) / 1000;
}
sbit PWM = P2^6;
unsigned char counter,angle;
unsigned int sum,distance1,distance2,distance3;
unsigned int mindistance = 20;
void Timer0_Init()
{
TMOD &= 0xF0;//設置定時器模式
TMOD |= 0x01;//設置定時器模式
TL0 = 0x33;
TH0 = 0xfe;
TF0 = 0;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void Timer0_Routine() interrupt 1
{
TL0 = 0x33; // 重裝載定時初值
TH0 = 0xfe;
counter++;
if(counter >= 40) // 假設 200 個計數值對應一個 PWM 周期
{
counter = 0;
}
if(counter < angle) // angle 的范圍應根據占空比需求設置,例如 10~20 對應 5%~10% 占空比
{
PWM = 1;
}
else
{
PWM = 0;
}
}
void control_2()
{
counter = 0;
angle = 3; // 舵機歸中°
Delay500ms();
}
void control()
{
counter = 0;
angle = 2; // 舵機轉到 45°
Delay500ms();
chaoshengbo();
distance1=sum;
counter = 0;
angle = 4; // 舵機轉到 -45°
Delay500ms();
counter = 0;
angle = 3; // 舵機轉到中間角度
Delay500ms();
chaoshengbo();
distance2=sum;
}
void chaoshengboduoji()
{
chaoshengbo();
distance3 = sum;
if(distance3<mindistance)
{
motor_stop();
Delay500ms();
control();
if(distance1<distance2 && distance1 > mindistance)
{
motor_right();
Delay20ms();
motor_stop();
Delay500ms();
motor_forward();
}
if(distance2<distance1 && distance2 > mindistance)
{
......
}
if(distance2==distance1)
{
......
}
}
else
motor_forward();
}
sbit D1 = P1^7;
sbit D2 = P1^6;
sbit D3 = P1^5;
sbit D4 = P1^4;
void xunji()
{
if(D1==1&&D2==1&&D3==1&&D4==1) //全檢測黑線
motor_forward();
if(D1==0&&D2==1&&D3==0&&D4==0) //中間右側檢測到黑線,小車偏左,小車向右移動
{
motor_right();
if(D1==0&&D2==0&&D3==0&&D4==0)
motor_forward();
}
if(D1==0&&D2==0&&D3==1&&D4==0) //中間左側檢測到黑線,小車偏右,小車向左移動
{
......
}
if(D1==0&&D2==0&&D3==1&&D4==1) //直角左轉
{
motor_forward();
Delay50ms();
if(D1==0&&D2==0&&D3==0&&D4==0)
{
motor_stop();
Delay50ms();
motor_left();
}
}
if(D1==1&&D2==1&&D3==0&&D4==0) //直角右轉
{
......
}
if((D1==0&&D2==0&&D3==0&&D4==1)||(D1==0&&D2==1&&D3==0&&D4==1)||D1==0&&D2==1&&D3==1&&D4==1) //銳角左轉
{
motor_forward();
Delay50ms();
Delay50ms();
if(D1==0&&D2==0&&D3==0&&D4==0)
{
motor_stop();
Delay50ms();
motor_left();
}
}
if((D1==1&&D2==0&&D3==0&&D4==0)||(D1==1&&D2==1&&D3==1&&D4==0)||D1==1&&D2==1&&D3==1&&D4==0) //銳角右轉
{
......
}
if(D1==0&&D2==1&&D3==1&&D4==0)
{
if(D1==1)
motor_right();
}
if(D1==0&&D2==1&&D3==1&&D4==0)
{
if(D4==1)
motor_right();
}
}
void main() {
// 初始化各個模塊
UART_Init(); // 藍牙串口初始化
Timer0_Init(); // 舵機PWM定時器初始化
control_2();
while (1) {
if (current_mode == BLUETOOTH_MODE) {
// 藍牙模式
lanya(received);
} else if(current_mode ==HONGWAIXUN_MODE){
// 紅外尋跡模式
xunji();
} else {
motor_forward();
chaoshengboduoji();
}
}
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费毛片片v | 日韩91在线 | 一级毛片大全免费播放 | www..99re| 最新日韩在线 | 99re| 日韩一区二区三区视频 | 国产999精品久久久影片官网 | 在线观看国产视频 | 亚洲日本三级 | 色约约视频 | www视频在线观看 | 亚洲免费在线 | 蜜桃av鲁一鲁一鲁一鲁 | 精品一区二区三区在线观看 | 亚洲一区二区三区免费在线观看 | 正在播放国产精品 | 亚洲欧美日韩精品久久亚洲区 | 国产精品一区二区三区四区五区 | 国产精品欧美一区喷水 | 9999久久| 欧美中文在线 | 久久草在线视频 | 视频二区 | 日本一区二区三区在线观看 | 亚洲免费在线观看视频 | 欧美日韩亚洲一区二区 | 91资源在线 | 国产婷婷色一区二区三区 | 亚洲男女激情 | 四色成人av永久网址 | 亚洲精选一区二区 | 亚洲精品中文字幕在线观看 | 夜夜夜操 | 成人小视频在线观看 | 成人精品一区二区三区四区 | 神马久久久久久久久久 | 日本中文在线 | 国产亚洲欧美日韩精品一区二区三区 | 91欧美 | 国产综合网址 |