|
楼主 |
发表于 2017-5-9 15:45:27
|
显示全部楼层
本帖最后由 cjs1748 于 2017-5-9 16:01 编辑
#include <PS2X_lib.h>
PS2X ps2x;
int PS2 = 0;
const int inA = 7;
const int enA = 6;
const int inB = 8;
const int enB = 9;
int PWMR;
int PWML;
int RUN;
int TURN;
void setup(){
PS2 = ps2x.config_gamepad(13,11,10,12, true, true); //指定PS2搖桿腳位及類比搖桿開啟
pinMode(inA, OUTPUT); // connection to TB6612FNG
pinMode(enA, OUTPUT); // connection to TB6612FNG
pinMode(inB, OUTPUT); // connection to TB6612FNG
pinMode(enB, OUTPUT); // connection to TB6612FNG
pinMode(A0, OUTPUT); // LED燈
pinMode(A1, OUTPUT); // LED燈
pinMode(A2, OUTPUT); // LED燈
pinMode(A3, OUTPUT); // LED燈
pinMode(A4, OUTPUT); // LED燈
pinMode(A5, OUTPUT); // LED燈
}
void loop(){
ps2x.read_gamepad();
if(ps2x.ButtonPressed(PSB_CIRCLE))
{ if (digitalRead(A0)==LOW) { digitalWrite (A0, HIGH);} else digitalWrite(A0,LOW); }
if(ps2x.ButtonPressed(PSB_TRIANGLE))
{ if (digitalRead(A1)==LOW) { digitalWrite (A1, HIGH);} else digitalWrite(A1,LOW); }
if(ps2x.ButtonPressed(PSB_CROSS))
{ if (digitalRead(A2)==LOW) { digitalWrite (A2, HIGH);} else digitalWrite(A2,LOW); }
if(ps2x.ButtonPressed(PSB_SQUARE))
{ if (digitalRead(A3)==LOW) { digitalWrite (A3, HIGH);} else digitalWrite(A3,LOW); }
if(ps2x.ButtonPressed(PSB_L1))
{ if (digitalRead(A4)==LOW) { digitalWrite (A4, HIGH);} else digitalWrite(A4,LOW); }
if(ps2x.ButtonPressed(PSB_R1))
{ if (digitalRead(A5)==LOW) { digitalWrite (A5, HIGH);} else digitalWrite(A5,LOW); }
if(ps2x.ButtonPressed(PSB_R2)){
digitalWrite (A0, LOW);
digitalWrite (A1, LOW);
digitalWrite (A2, LOW);
digitalWrite (A3, LOW);
}
if(ps2x.ButtonPressed(PSB_L2)){
digitalWrite (A4, LOW);
digitalWrite (A5, LOW);
}
if (ps2x.Analog(PSS_LY) > 134 ){ //前進
digitalWrite(inA, HIGH);
digitalWrite(inB, HIGH);
if (ps2x.Analog(PSS_LX) < 122){ //前左
RUN = map(ps2x.Analog(PSS_LY), 134, 255, 0, 255);
TURN = map(ps2x.Analog(PSS_LX), 0, 122, 255, 0);
PWMR = RUN;
PWML = (TURN/255)*RUN;
analogWrite(enB , PWMR);
analogWrite(enA , PWML);
}
if (ps2x.Analog(PSS_LX) > 123 && ps2x.Analog(PSS_LX) < 133){ //向正前
RUN = map(ps2x.Analog(PSS_LY), 134, 255, 0, 255);
PWMR = RUN;
PWML = RUN;
analogWrite(enB , PWMR);
analogWrite(enA , PWML);
}
if (ps2x.Analog(PSS_LX) > 134){ //前右
RUN = map(ps2x.Analog(PSS_LY), 134, 255, 0, 255);
TURN = map(ps2x.Analog(PSS_LX), 134, 255, 0, 255);
PWML = RUN;
PWMR = (TURN/255)*RUN;
analogWrite(enB , PWMR);
analogWrite(enA , PWML);
}
}
if (ps2x.Analog(PSS_LY) > 123 && ps2x.Analog(PSS_LY) < 133 ){ //原地轉向
if (ps2x.Analog(PSS_LX) < 122){ //原地左回旋
digitalWrite(inA, HIGH);
digitalWrite(inB, LOW);
TURN = map(ps2x.Analog(PSS_LX), 0, 122, 255, 0);
PWMR = TURN;
PWML = TURN;
analogWrite(enB , PWMR);
analogWrite(enA , PWML);
}
if (ps2x.Analog(PSS_LX) > 123 && ps2x.Analog(PSS_LX) < 133){ //停止
digitalWrite(inA, HIGH);
digitalWrite(inB, HIGH);
PWMR = 0;
PWML = 0;
analogWrite(enB , PWMR);
analogWrite(enA , PWML);
}
if (ps2x.Analog(PSS_LX) > 134){ //原地右迴旋
digitalWrite(inA, LOW);
digitalWrite(inB, HIGH);
TURN = map(ps2x.Analog(PSS_LX), 134, 255, 0, 255);
PWML = TURN;
PWMR = TURN;
analogWrite(enB , PWMR);
analogWrite(enA , PWML);
}
}
if (ps2x.Analog(PSS_LY) < 122 ){ //向後
digitalWrite(inA, LOW);
digitalWrite(inB, LOW);
if (ps2x.Analog(PSS_LX) < 122){ //左後
RUN = map(ps2x.Analog(PSS_LY), 0, 122, 255, 0);
TURN = map(ps2x.Analog(PSS_LX), 0, 122, 255, 0);
PWMR = RUN;
PWML = (TURN/255)*RUN;
analogWrite(enB , PWMR);
analogWrite(enA , PWML);
}
if (ps2x.Analog(PSS_LX) > 123 && ps2x.Analog(PSS_LX) < 133){ //正後
RUN = map(ps2x.Analog(PSS_LY), 0, 122, 255, 0);
PWMR = RUN;
PWML = RUN;
analogWrite(enB , PWMR);
analogWrite(enA , PWML);
}
if (ps2x.Analog(PSS_LX) > 134){ //右後
RUN = map(ps2x.Analog(PSS_LY), 0, 122, 255, 0);
TURN = map(ps2x.Analog(PSS_LX), 134, 255, 0, 255);
PWML = RUN;
PWMR = (TURN/255)*RUN;
analogWrite(enB , PWMR);
analogWrite(enA , PWML);
}
}
delay(50);
}
上面是自己嘗試寫的程式,大致上正確.不過在邊走邊轉的部分不連貫(有空白)
不知有無前輩可 指導一下!!
PS.在ARDUINO和驅動板中間有外加一個7404,所以轉向控制只需要一個數位腳. |
|