标题:
三轮小车运动Arduino编程
[打印本页]
作者:
cmd
时间:
2018-7-21 20:42
标题:
三轮小车运动Arduino编程
const unsigned char PWM1 =13;
const unsigned char AIN11 =12;
const unsigned char AIN12 =11;
const unsigned char PWM2 =10;
const unsigned char AIN21 =9;
const unsigned char AIN22 =8;
const unsigned char PWM3 =7;
const unsigned char AIN31 =6;
const unsigned char AIN32 =5;
const unsigned char Left1=24;
const unsigned char Right1=25;
const unsigned char Left2=26;
const unsigned char Right2=27;
int L1;
int L2;
int L3;
int L4;
int pwm3=0;
int Time=0;
int r=0;
String data ="";
void setup() {
pinMode(PWM1,OUTPUT);
pinMode(PWM2,OUTPUT);
pinMode(PWM3,OUTPUT);
pinMode(AIN11,OUTPUT);
pinMode(AIN12,OUTPUT);
pinMode(AIN21,OUTPUT);
pinMode(AIN22,OUTPUT);
pinMode(AIN31,OUTPUT);
pinMode(AIN32,OUTPUT);
pinMode(Left1,INPUT);
pinMode(Right1,INPUT);
Serial1.begin(9600);
}
// 电机停转
void motorStop1()
{
digitalWrite(AIN11, LOW);
digitalWrite(AIN12, LOW);
}
void motorStop2()
{
digitalWrite(AIN21, LOW);
digitalWrite(AIN22, LOW);
}
void motorStop3()
{
digitalWrite(AIN31, LOW);
digitalWrite(AIN32, LOW);
}
// 电机以参数设定的 pwm 值顺时针转
void motorCW1(unsigned char pwm)
{
analogWrite(PWM1, pwm);
digitalWrite(AIN12, HIGH);
digitalWrite(AIN11, LOW);
}
void motorCW2(unsigned char pwm)
{
analogWrite(PWM2, pwm);
digitalWrite(AIN22, HIGH);
digitalWrite(AIN21, LOW);
}
void motorCW3(unsigned char pwm)
{
analogWrite(PWM3, pwm);
digitalWrite(AIN32, HIGH);
digitalWrite(AIN31, LOW);
}
// 电机以参数设定的 pwm 值逆时针转
void motorCCW1(unsigned char pwm)
{
analogWrite(PWM1, pwm);
digitalWrite(AIN11, HIGH);
digitalWrite(AIN12, LOW);
}
void motorCCW2(unsigned char pwm)
{
analogWrite(PWM2, pwm);
digitalWrite(AIN21, HIGH);
digitalWrite(AIN22, LOW);
}
void motorCCW3(unsigned char pwm)
{
analogWrite(PWM3, pwm);
digitalWrite(AIN31, HIGH);
digitalWrite(AIN32, LOW);
}
//前,后,左转,右转,左行,右行,停
void forward(unsigned char pwm)
{
motorStop1();
motorCW3(pwm);
motorCCW2(pwm);
}
void backward(unsigned char pwm)
{
motorStop1();
motorCW2(pwm);
motorCCW3(pwm);
}
void LRotate(unsigned char pwm)
{
motorCW1(pwm);
motorCW2(pwm);
motorCW3(pwm);
}
void RRotate(unsigned char pwm)
{
motorCCW1(pwm);
motorCCW2(pwm);
motorCCW3(pwm);
}
void LMove(unsigned char pwm)
{
motorCW1(pwm);
motorCCW2(pwm/2);
motorCCW3(pwm/2);
}
void RMove(unsigned char pwm)
{
motorCCW1(pwm);
motorCW2(pwm/2);
motorCW3(pwm/2);
}
void Stop()
{
motorStop1();
motorStop2();
motorStop3();
}
void loop() {
motorStop1();
motorCW3(pwm3+230);
motorCCW2(230);
L1=digitalRead(Left1);
L2=digitalRead(Right1);
L3=digitalRead(Left2);
L4=digitalRead(Right2);
if(r==1){
if(L1==1&&L2==1){
Time=0;
}
else if(L1==0&&L2==1&&L3==1&&Time==0){
pwm3=5;
Time++;
}
else if(L1==0&&L2==1&&L3==1&&Time!=0){
pwm3--;
Time++;
}
else if(L1==0&&L2==1&&L3==0&&Time==0){
pwm3=10;
Time++;
}
else if(L1==0&&L2==1&&L3==0&&Time!=0){
pwm3+=5;
Time++;
}
else if(L1==1&&L2==0&&L4==1&&Time==0){
pwm3=-5;
Time++;
}
else if(L1==1&&L2==0&&L4==1&&Time!=0){
pwm3++;
Time++;
}
else if(L1==1&&L2==0&&L4==0&&Time==0){
pwm3=-10;
Time++;
}
else if(L1==1&&L2==0&&L4==0&&Time!=0){
pwm3-=5;
Time++;
}
}
while(Serial1.available() > 0)
{
char inChar=(char)Serial1.read();
delay(10);
data+=inChar;
}
if(data!=""){
if(data == "p"){
Stop();
r=0;
}
else if(data == "w"){
r=1;
}
}
data="";
delay(100);
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1