有甩尾的 fu
int al=5,ar=3,bl=6,br=9,cl=10,cr=11;
int pwm=80;
void setup() {
pinMode(al,OUTPUT);
pinMode(ar,OUTPUT);
pinMode(bl,OUTPUT);
pinMode(br,OUTPUT);
pinMode(cl,OUTPUT);
pinMode(cr,OUTPUT);
}
void loop() {
// switch
//aM cM
// bM
//clockwise: 1,0,1,0,1,0
//anti-clockwise:0,1,0,1,0,1
//forward: 1,0,0,0,0,1
//backward: 0,1,0,0,1,0
//right-curv: 1,0,1,0,0,1
//left-curv: 1,0,0,1,0,1
drivecar(pwm,0,pwm,0,pwm,0);
delay(5000);
drivecar(0,pwm,0,pwm,0,pwm);
delay(5000);
drivecar(pwm,0,0,0,0,pwm);
delay(5000);
drivecar(0,pwm,0,0,pwm,0);
delay(5000);
drivecar(pwm,0,pwm,0,0,pwm);
delay(5000);
drivecar(pwm,0,0,pwm,0,pwm);
delay(5000);
}
void drivecar(int pal,int par,int pbl,int pbr,int pcl,int pcr){
analogWrite(al,pal);
analogWrite(ar,par);
analogWrite(bl,pbl);
analogWrite(br,pbr);
analogWrite(cl,pcl);
analogWrite(cr,pcr);
}
對應藍芽控制, 1~9 對應 4 段速度, 5 停止, 分正反轉
#include <SoftwareSerial.h>
#include <Wire.h>
int cnt=0;
int alPin=5,arPin=3,blPin=6,brPin=9,clPin=10,crPin=11;
int al,ar,bl,br,cl,cr;
int pwm=60,pwmStep=8;
SoftwareSerial I2CBT(13,12); //定義Arduino PIN10及PIN11分別為RX及TX腳位
//請注意Arduino的TX要接藍牙模組的RX, 反之亦然
void setup() {
Serial.begin(9600);
I2CBT.begin(9600);//bluetooth baud rate
}
void loop() {
byte cmmd[4];
int insize,cnt=0;
char ch;
while((insize=(I2CBT.available()))>0){
//沒有delay, 會不能動作
delay(50);
for (int i=0; i<insize; i++){
cmmd[cnt++]=char(I2CBT.read());
if(cmmd[cnt-1]==90){
//結束字符Z, 'Z'==90
cnt=0;
if(cmmd[0]!=90){
//會有一些多餘的通訊,用90濾掉
switch(cmmd[0]){
case 1:case 2:case 3:case 4:al = pwm+pwmStep*(5-cmmd[0]);ar=0;break;
case 6:case 7:case 8:case 9:ar = pwm+pwmStep*(cmmd[0]-5);al=0;break;
case 5:al = 0;ar=0;break;
}
switch(cmmd[1]){
case 1:case 2:case 3:case 4:bl = pwm+pwmStep*(5-cmmd[1]);br=0;break;
case 6:case 7:case 8:case 9:br = pwm+pwmStep*(cmmd[1]-5);bl=0;break;
case 5:bl = 0;br=0;break;
}
switch(cmmd[2]){
case 1:case 2:case 3:case 4:cl = pwm+pwmStep*(5-cmmd[2]);cr=0;break;
case 6:case 7:case 8:case 9:cr = pwm+pwmStep*(cmmd[2]-5);cl=0;break;
case 5:cl = 0;cr=0;break;
}
drivecar(al,ar,bl,br,cl,cr);
}
}
}
} //while
}
void drivecar(int pal,int par,int pbl,int pbr,int pcl,int pcr){
analogWrite(alPin,pal);
analogWrite(arPin,par);
analogWrite(blPin,pbl);
analogWrite(brPin,pbr);
analogWrite(clPin,pcl);
analogWrite(crPin,pcr);
}
============================================================================
int power = 80;
void setup() {
// put your setup code here, to run once:
pinMode(3,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
}
void loop() {
/*analogWrite(11, 0);
analogWrite(5, 0);
analogWrite(9, 0);
analogWrite(3, power-15);
analogWrite(6, power);
delay(2000);
analogWrite(3, 0);
analogWrite(6, 0);
analogWrite(11, 0);
analogWrite(9, power);
analogWrite(10, power);
delay(2000);
analogWrite(9, 0);
analogWrite(10, 0);
analogWrite(3, 0);
analogWrite(11, power);
analogWrite(5, power-4);
delay(2000);
*/
goF();
delay(2000);
goHL();
delay(2000);
goHR();
delay(4000);
goHL();
delay(2000);
goB();
delay(2000);
}
void goB(){
analogWrite(9, 0);
analogWrite(11, 0);
analogWrite(5, 0);
analogWrite(6, 0);
analogWrite(10, power);
analogWrite(3, power-4);
}
void goF(){
analogWrite(9, 0);
analogWrite(10, 0);
analogWrite(3, 0);
analogWrite(6, 0);
analogWrite(11, power);
analogWrite(5, power-4);
}
void goHR(){
analogWrite(6, 0);
analogWrite(11, 0);
analogWrite(3, 0);
analogWrite(5, (power-4)/1.8);
analogWrite(10, power/1.8);
analogWrite(9, power);
}
void goHL(){
analogWrite(9, 0);
analogWrite(10, 0);
analogWrite(5, 0);
analogWrite(11, power/2);
analogWrite(3, power/2);
analogWrite(6, power/1.1);
}