久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
請各位大佬幫我看一下單片機藍牙小車切換模式,幫幫孩子
[打印本頁]
作者:
xuenai1413
時間:
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();
}
}
}
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产女人叫床高潮大片免费
|
一区二区三区国产好
|
www.xxxx欧美
|
欧美在线观看免费观看视频
|
99久久婷婷国产综合精品电影
|
欧美精品影院
|
av一区二区三区
|
亚洲成人中文字幕
|
国产精品一区二区久久
|
亚洲精品日韩欧美
|
日本不卡高清视频
|
免费午夜视频在线观看
|
中文精品久久
|
在线观看欧美一区
|
久久久国产一区二区三区
|
欧美jizzhd精品欧美巨大免费
|
日韩视频91
|
隔壁老王国产在线精品
|
日韩免费视频
|
亚洲一区免费
|
欧美日韩亚洲三区
|
久久国产精品一区二区三区
|
成人精品久久
|
国产一区二区三区免费
|
精品一区二区视频
|
伊人网一区
|
国产不卡在线观看
|
成人亚洲一区
|
男女搞网站
|
五月婷亚洲
|
国产不卡一区在线观看
|
av天天看
|
超碰在线免费公开
|
国产亚洲欧美在线
|
高清成人av
|
伊人久久麻豆
|
亚洲精品日韩精品
|
国产一区二区三区在线
|
亚洲 精品 综合 精品 自拍
|
中国一级特黄真人毛片免费观看
|
国产成人免费视频网站高清观看视频
|