標(biāo)題:
wifi智能小車Arduino程序,追加提速和減速功能 帶手機(jī)端apk
[打印本頁(yè)]
作者:
龍安帝國(guó)
時(shí)間:
2018-3-3 07:55
標(biāo)題:
wifi智能小車Arduino程序,追加提速和減速功能 帶手機(jī)端apk
0.png
(44.64 KB, 下載次數(shù): 104)
下載附件
2018-3-4 01:57 上傳
資料51hei下載地址:
WIFI智能小車改鍵值.rar
(35.43 KB, 下載次數(shù): 93)
2018-3-3 07:54 上傳
點(diǎn)擊文件名下載附件
手機(jī)端apk
下載積分: 黑幣 -5
//============================智宇科技===========================、
/*前進(jìn) 按下發(fā)出 ONA 松開ONF
后退:按下發(fā)出 ONB 松開ONF
左轉(zhuǎn):按下發(fā)出 ONC 松開ONF
右轉(zhuǎn):按下發(fā)出 OND 松開ONF
停止:按下發(fā)出 ONE 松開ONF
WIFI程序功能是按下對(duì)應(yīng)的按鍵執(zhí)行操,松開按鍵就停止
*/
int sd = 115;
int Left_motor=8; //左電機(jī)(IN3) 輸出0 前進(jìn) 輸出1 后退
int Left_motor_pwm=9; //左電機(jī)PWM調(diào)速
int Right_motor_pwm=10; // 右電機(jī)PWM調(diào)速
int Right_motor=11; // 右電機(jī)后退(IN1) 輸出0 前進(jìn) 輸出1 后退
int servopin7=7;//設(shè)置左右舵機(jī)驅(qū)動(dòng)腳到數(shù)字口7
int servopin12=12;//設(shè)置上下舵機(jī)驅(qū)動(dòng)腳到數(shù)字口12
int myangle;//定義角度變量
int pulsewidth;//定義脈寬變量
int val;
char buffer[18]; //串口緩沖區(qū)的字符數(shù)組
void setup() //設(shè)定串口和引腳模式
{
Serial.begin(9600);
Serial.flush(); //清空串口緩存
pinMode(Left_motor,OUTPUT); // PIN 8 8腳無PWM功能
pinMode(Left_motor_pwm,OUTPUT); // PIN 9 (PWM)
pinMode(Right_motor_pwm,OUTPUT);// PIN 10 (PWM)
pinMode(Right_motor,OUTPUT);// PIN 11 (PWM)
pinMode(servopin7,OUTPUT);//設(shè)定舵機(jī)接口為輸出接口
pinMode(servopin12,OUTPUT);//設(shè)定舵機(jī)接口為輸出接口
}
void run(int sd) // 前進(jìn)
{
digitalWrite(Right_motor,LOW); // 右電機(jī)前進(jìn)
digitalWrite(Right_motor_pwm,HIGH); // 右電機(jī)前進(jìn)
analogWrite(Right_motor_pwm,sd);//PWM比例0~255調(diào)速,左右輪差異略增減
digitalWrite(Left_motor,LOW); // 左電機(jī)前進(jìn)
digitalWrite(Left_motor_pwm,HIGH); //左電機(jī)PWM
analogWrite(Left_motor_pwm,sd);//PWM比例0~255調(diào)速,左右輪差異略增減
//delay(time * 100); //執(zhí)行時(shí)間,可以調(diào)整
}
void brake() //剎車,停車
{
digitalWrite(Right_motor_pwm,LOW); // 右電機(jī)PWM 調(diào)速輸出0
analogWrite(Right_motor_pwm,0);//PWM比例0~255調(diào)速,左右輪差異略增減
digitalWrite(Left_motor_pwm,LOW); //左電機(jī)PWM 調(diào)速輸出0
analogWrite(Left_motor_pwm,0);//PWM比例0~255調(diào)速,左右輪差異略增減
//delay(time * 100);//執(zhí)行時(shí)間,可以調(diào)整
}
void left() //左轉(zhuǎn)(左輪不動(dòng),右輪前進(jìn))
{
digitalWrite(Right_motor,LOW); // 右電機(jī)前進(jìn)
digitalWrite(Right_motor_pwm,HIGH); // 右電機(jī)前進(jìn)
analogWrite(Right_motor_pwm,130);//PWM比例0~255調(diào)速,左右輪差異略增減
digitalWrite(Left_motor,LOW); // 左電機(jī)前進(jìn)
digitalWrite(Left_motor_pwm,LOW); //左電機(jī)PWM
analogWrite(Left_motor_pwm,0);//PWM比例0~255調(diào)速,左右輪差異略增減
//delay(time * 100); //執(zhí)行時(shí)間,可以調(diào)整
}
void spin_left() //左轉(zhuǎn)(左輪后退,右輪前進(jìn))
{
digitalWrite(Right_motor,LOW); // 右電機(jī)前進(jìn)
digitalWrite(Right_motor_pwm,HIGH); // 右電機(jī)前進(jìn)
analogWrite(Right_motor_pwm,130);//PWM比例0~255調(diào)速,左右輪差異略增減
digitalWrite(Left_motor,HIGH); // 左電機(jī)后退
digitalWrite(Left_motor_pwm,HIGH); //左電機(jī)PWM
analogWrite(Left_motor_pwm,130);//PWM比例0~255調(diào)速,左右輪差異略增減
//delay(time * 100); //執(zhí)行時(shí)間,可以調(diào)整
}
void right() //右轉(zhuǎn)(右輪不動(dòng),左輪前進(jìn))
{
digitalWrite(Right_motor,LOW); // 右電機(jī)不轉(zhuǎn)
digitalWrite(Right_motor_pwm,LOW); // 右電機(jī)PWM輸出0
analogWrite(Right_motor_pwm,0);//PWM比例0~255調(diào)速,左右輪差異略增減
digitalWrite(Left_motor,LOW); // 左電機(jī)前進(jìn)
digitalWrite(Left_motor_pwm,HIGH); //左電機(jī)PWM
analogWrite(Left_motor_pwm,150);//PWM比例0~255調(diào)速,左右輪差異略增減
//delay(time * 100); //執(zhí)行時(shí)間,可以調(diào)整
}
void spin_right() //右轉(zhuǎn)(右輪后退,左輪前進(jìn))
{
digitalWrite(Right_motor,HIGH); // 右電機(jī)后退
digitalWrite(Right_motor_pwm,HIGH); // 右電機(jī)PWM輸出1
analogWrite(Right_motor_pwm,130);//PWM比例0~255調(diào)速,左右輪差異略增減
digitalWrite(Left_motor,LOW); // 左電機(jī)前進(jìn)
digitalWrite(Left_motor_pwm,HIGH); //左電機(jī)PWM
analogWrite(Left_motor_pwm,130);//PWM比例0~255調(diào)速,左右輪差異略增減
//delay(time * 100); //執(zhí)行時(shí)間,可以調(diào)整
}
void back() //后退
{
digitalWrite(Right_motor,HIGH); // 右電機(jī)后退
digitalWrite(Right_motor_pwm,HIGH); // 右電機(jī)前進(jìn)
analogWrite(Right_motor_pwm,100);//PWM比例0~255調(diào)速,左右輪差異略增減
digitalWrite(Left_motor,HIGH); // 左電機(jī)后退
digitalWrite(Left_motor_pwm,HIGH); //左電機(jī)PWM
analogWrite(Left_motor_pwm,100);//PWM比例0~255調(diào)速,左右輪差異略增減
//delay(time * 100); //執(zhí)行時(shí)間,可以調(diào)整
}
void servopulse(int servopin7,int myangle)/*定義一個(gè)脈沖函數(shù),用來模擬方式產(chǎn)生PWM值舵機(jī)的范圍是0.5MS到2.5MS 1.5MS 占空比是居中周期是20MS*/
{
pulsewidth=(myangle*11)+450;//將角度轉(zhuǎn)化為500-2480 的脈寬值 這里的myangle就是0-180度 所以180*11+50=2480 11是為了換成90度的時(shí)候基本就是1.5MS
digitalWrite(servopin7,HIGH);//將舵機(jī)接口電平置高 90*11+50=1490uS 就是1.5ms
delayMicroseconds(pulsewidth);//延時(shí)脈寬值的微秒數(shù) 這里調(diào)用的是微秒延時(shí)函數(shù)
digitalWrite(servopin7,LOW);//將舵機(jī)接口電平置低
delay(20-(pulsewidth*0.001));//延時(shí)周期內(nèi)剩余時(shí)間 這里調(diào)用的是ms延時(shí)函數(shù)
}
void servopulsesx(int servopin12,int myangle)/*定義一個(gè)脈沖函數(shù),用來模擬方式產(chǎn)生PWM值舵機(jī)的范圍是0.5MS到2.5MS 1.5MS 占空比是居中周期是20MS*/
{
pulsewidth=(myangle*11)+400;//將角度轉(zhuǎn)化為500-2480 的脈寬值 這里的myangle就是0-180度 所以180*11+50=2480 11是為了換成90度的時(shí)候基本就是1.5MS
digitalWrite(servopin12,HIGH);//將舵機(jī)接口電平置高 90*11+50=1490uS 就是1.5ms
delayMicroseconds(pulsewidth);//延時(shí)脈寬值的微秒數(shù) 這里調(diào)用的是微秒延時(shí)函數(shù)
digitalWrite(servopin12,LOW);//將舵機(jī)接口電平置低
delay(20-(pulsewidth*0.001));//延時(shí)周期內(nèi)剩余時(shí)間 這里調(diào)用的是ms延時(shí)函數(shù)
}
void front_detection()// 左右電機(jī)前
{
//此處循環(huán)次數(shù)減少,為了增加小車遇到障礙物的反應(yīng)速度
for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
{
servopulse(servopin7,1);//模擬產(chǎn)生PWM
}
}
void left_detection()//左右舵機(jī)靠左
{
for(int i=0;i<=1;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
{
// servopulse(servopin7,175);//模擬產(chǎn)生PWM
digitalWrite(servopin7,HIGH);//將舵機(jī)接口電平置高 90*11+50=1490uS 就是1.5ms
delayMicroseconds(2476);//延時(shí)脈寬值的微秒數(shù) 這里調(diào)用的是微秒延時(shí)函數(shù)
digitalWrite(servopin7,LOW);//將舵機(jī)接口電平置低
delay(2);//延時(shí)周期內(nèi)剩余時(shí)間 這里調(diào)用的是ms延時(shí)函數(shù)
}
}
void right_detection()//左右電機(jī)靠右
{
for(int i=0;i<=1;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
{
// servopulse(servopin7,1);//模擬產(chǎn)生PWM
digitalWrite(servopin7,HIGH);//將舵機(jī)接口電平置高 90*11+50=1490uS 就是1.5ms
delayMicroseconds(200);//延時(shí)脈寬值的微秒數(shù) 這里調(diào)用的是微秒延時(shí)函數(shù)
digitalWrite(servopin7,LOW);//將舵機(jī)接口電平置低
delay(2);//延時(shí)周期內(nèi)剩余時(shí)間 這里調(diào)用的是ms延時(shí)函數(shù)
}
}
void s_detection()//上下舵機(jī)上
{
for(int i=0;i<=1;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
{
servopulsesx(servopin12,1);//模擬產(chǎn)生PWM
}
}
void x_detection()//上下舵機(jī)下
{
for(int i=0;i<=1;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
{
servopulsesx(servopin12,175);//模擬產(chǎn)生PWM
}
}
void loop()
{
if(Serial.available() > 0) //Serial.available()返回串口收到的字節(jié)數(shù)
{
int index = 0;
delay(100); //延時(shí)等待串口收完數(shù)據(jù),否則剛收到1個(gè)字節(jié)時(shí)就會(huì)執(zhí)行后續(xù)程序
int numChar = Serial.available();
if(numChar > 15) //確認(rèn)數(shù)據(jù)不會(huì)溢出,應(yīng)當(dāng)小于緩沖大小
{
numChar = 15;
}
while(numChar--)
{
buffer[index++] = Serial.read(); //將串口數(shù)據(jù)一字一字的存入緩沖
}
splitString(buffer); //字符串分割
}
}
void splitString(char *data)
{
Serial.print("Data entered:");
Serial.println(data);
char *parameter;
parameter = strtok(data, " ,"); //string token,將data按照空格或者,進(jìn)行分割并截取
Serial.print("***");
Serial.println(parameter);
while(parameter != NULL)
{
setLED(parameter);
parameter = strtok(NULL, " ,"); //string token,再次分割并截取,直至截取后的字符為空
Serial.print("---");
Serial.println(parameter);
}
for(int x = 0; x < 16; x++) //清空緩沖
{
buffer[x] = '\0';
}
Serial.flush();
}
void setLED(char *data)
{
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'A'))
{
Serial.println("go forward!");
run(sd);
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'B'))
{
Serial.println("go back!");
back();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'C'))
{
Serial.println("go left!");
spin_left();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'D'))
{
Serial.println("go right!");
spin_right();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'E'))
{
Serial.println("Stop!");
brake();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'F'))
{
Serial.println("Stop!");
brake();
}
/* 以下是控制舵機(jī)左,上下舵機(jī) */
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'L'))//左
{
left_detection();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'I'))//右
{
right_detection();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'K'))//上
{
s_detection();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'J'))//下
{
x_detection();
}
//---------------------------
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'G'))
{
if(sd+10<=255)
{
sd = sd+10;
}
Serial.println(sd);
run(sd);
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'H'))//jianshu
{
if(sd-10>40)
{
sd = sd-10;
}
Serial.println(sd);
run(sd);
}
}
復(fù)制代碼
作者:
qingfongh
時(shí)間:
2018-4-9 10:19
帶上位機(jī)程序的嗎?
作者:
shishi123
時(shí)間:
2018-5-2 17:46
下載了APP,不連WIFI的情況下,APP一按就退出
作者:
danielliu
時(shí)間:
2018-5-5 13:46
學(xué)習(xí)一下,感謝分享
作者:
51hkjsjf
時(shí)間:
2018-6-6 08:24
感謝分享,正在學(xué)習(xí),很有幫助啊
作者:
無限創(chuàng)意2018
時(shí)間:
2018-6-8 22:53
好像功能不太理想!
作者:
wuxishun
時(shí)間:
2018-6-25 07:38
謝謝分享
作者:
ywzlq
時(shí)間:
2018-6-25 08:31
學(xué)習(xí)一下,感謝分享!!
作者:
HXXXX
時(shí)間:
2018-6-25 09:22
怎么用藍(lán)牙接收控制智能小車
作者:
hs88
時(shí)間:
2018-8-25 23:31
距離才十米,有什么意義
作者:
2307393235
時(shí)間:
2020-1-7 13:26
我想學(xué)習(xí)一下
作者:
cr8526
時(shí)間:
2022-2-27 18:46
可以加個(gè)攝像頭的嗎?
作者:
qq378912453
時(shí)間:
2023-10-11 10:38
距離有點(diǎn)短
作者:
gz5353741
時(shí)間:
2024-3-8 16:31
手機(jī)端apk不行
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1