要把x&y的控制放到一起,下面是我这几天带孩子玩写的摇杆控制小车的程序,摇杆是PS2摇杆,两个可调电阻,中位时测过输出约2.5V,ADC值约500上下,写程序时这段是停止,程序刚刚前3天左右时间在小车上跑过,驱动模块用的是298N,LCD是I2C 1602~啃萝卜不知道咋回事,粘不上程序,用WORD粘上来~
#include
#include
LiquidCrystal_I2C lcd(0x3f, 16, 2);
int potpin1 =A0; //
int potpin2=A1;
int val1; //
int vala;
int valb;
int M1 = 6;
int M2 = 7;
int M3 = 8;
int M4 = 9;
int EN1 = 10;
int EN2 = 11;
uint8_t M1Status=LOW;
uint8_t M2Status=LOW;
uint8_t M3Status=LOW;
uint8_t M4Status=LOW;
int en1=0;
int en2=0;
void setup()
{
lcd.init();
lcd.init();
lcd.backlight();
//lcd测试
lcd.setCursor(0, 0);
lcd.print("System starting!");
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
pinMode(M3, OUTPUT);
pinMode(M4, OUTPUT);
pinMode(EN1, OUTPUT);
pinMode(EN2, OUTPUT);
lcd.setCursor(0, 1);
lcd.print("test engine......");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Welcome!");
lcd.setCursor(0, 1);
lcd.print("Hello Sunny!");
}
void loop()
{
vala = analogRead(potpin1);
valb = analogRead(potpin2);
if (valb>=401 && valb<=599)
{
if(vala>599)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4WD CAR TEST SYS");
lcd.setCursor(2, 1);
lcd.print("car forward!");
val1 = map(vala,600, 1023, 0, 255);
analogWrite(en1, val1);
analogWrite(en2, val1);
front();
delay(15);
} // waits for the servo to get there
else if(vala<401)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4WD CAR TEST SYS");
lcd.setCursor(1, 1);
lcd.print("car backward!");
val1 = map(vala,0, 400, 255, 0);
analogWrite(en1, val1);
analogWrite(en2, val1);
back();
delay(15);
}
else
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4WD CAR TEST SYS");
lcd.setCursor(3, 1);
lcd.print("car Stop!");
Stop();
delay(15);
}
}
else if(valb<400)
{
if(vala>599)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4WD CAR TEST SYS");
lcd.setCursor(1, 1);
lcd.print("Turning left!");
val1 = map(vala,600, 1023, 0, 255);
analogWrite(en1, val1);
analogWrite(en2, val1);
left();
delay(15);
}
else if(vala<401)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4WD CAR TEST SYS");
lcd.setCursor(1, 1);
lcd.print("car back&left!");
val1 = map(vala,0, 400, 255, 0);
analogWrite(en1, val1);
analogWrite(en2, val1);
right();
delay(15);
}
else
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4WD CAR TEST SYS");
lcd.setCursor(3, 1);
lcd.print("car Stop!");
Stop();
delay(15);
}
}
else
{
if(vala>599)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4WD CAR TEST SYS");
lcd.setCursor(0, 1);
lcd.print("Turning right!");
val1 = map(vala,600, 1023, 0, 255);
analogWrite(en1, val1);
analogWrite(en2, val1);
right();
delay(15);
}
else if(vala<401)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4WD CAR TEST SYS");
lcd.setCursor(0, 1);
lcd.print("car back&right!");
val1 = map(vala,0, 400, 255, 0);
analogWrite(en1, val1);
analogWrite(en2, val1);
left();
delay(15);
}
else
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("4WD CAR TEST SYS");
lcd.setCursor(3, 1);
lcd.print("car Stop!");
Stop();
delay(15);
}
}
}
void front(void)
{
M1Status = LOW;
M2Status = HIGH;
M3Status = LOW;
M4Status = HIGH;
SetEN();
}
void back(void)
{
M1Status = HIGH;
M2Status = LOW;
M3Status = HIGH;
M4Status = LOW;
SetEN();
}
void right(void)
{
M1Status = LOW;
M2Status = HIGH;
M3Status = HIGH;
M4Status = LOW;
SetEN();
}
void left(void)
{
M1Status = HIGH;
M2Status = LOW;
M3Status = LOW;
M4Status = HIGH;
SetEN();
}
void Stop(void)
{
en1 = 0;
en2 = 0;
M1Status = LOW;
M2Status = LOW;
M3Status = LOW;
M4Status = LOW;
SetEN();
}
//设置两侧速度
void SetEN()
{
analogWrite(EN1, en1);
analogWrite(EN2, en2);
digitalWrite(M1, M1Status);
digitalWrite(M2, M2Status);
digitalWrite(M3, M3Status);
digitalWrite(M4, M4Status);
}