一.思维导图
二.程序代码
1.电机(前、后、左、右、停止)
void houtui(){
analogWrite(27, 0);//后
analogWrite(13, 255);
analogWrite(4, 0);
analogWrite(2, 255);
analogWrite(15, 0);
analogWrite(14, 255);
analogWrite(17, 0);
analogWrite(12, 255);
}
void zuoyi(){
analogWrite(27, 0);//左
analogWrite(13, 255);
analogWrite(4, 255);
analogWrite(2, 0);
analogWrite(15, 0);
analogWrite(14, 255);
analogWrite(17, 255);
analogWrite(12, 0);
}
void youyi(){
analogWrite(27, 255);//右
analogWrite(13, 0);
analogWrite(4, 0);
analogWrite(2, 255);
analogWrite(15, 255);
analogWrite(14, 0);
analogWrite(17, 0);
analogWrite(12, 255);
}
void zuozhuan(){
analogWrite(27,0 );//左转
analogWrite(13, 255);
analogWrite(4, 0);
analogWrite(2, 255);
analogWrite(15, 255);
analogWrite(14,0);
analogWrite(17, 255);
analogWrite(12, 0);
}
void youzhuan(){
analogWrite(27,255);//右转
analogWrite(13,0);
analogWrite(4,255);
analogWrite(2,0);
analogWrite(15, 0);
analogWrite(14,255);
analogWrite(17, 0);
analogWrite(12, 255);
}
void tingzhi(){
analogWrite(27, 0);//停
analogWrite(13, 0);
analogWrite(4, 0);
analogWrite(2, 0);
analogWrite(15, 0);
analogWrite(14, 0);
analogWrite(17, 0);
analogWrite(12, 0);
}
2.灯带与震动传感器的配合
中弹前是绿色的,中弹后是红色的。
int x=analogRead(32);
Serial.println(x);
for(int i=0;i<=12;i++){
pixels.setPixelColor(i, pixels.Color(0, 150, 0));
pixels.show();
if(x>400){
pixels.setPixelColor(i, pixels.Color(150,0, 0));
delay(75);
}
3.PS3手柄上的控制功能
(1) 用L1、R1按键控指舵机
if(Ps3.data.button.l1){
myservo.write(pos);
delay(15);
pos--;
}
else if(Ps3.data.button.r1){
myservo.write(pos);
delay(15);
pos++;
}
(2) 用up、down、left、right等按键控指 前、后、左、右和左转、右转(不按时停止)
if(Ps3.data.button.right){
youyi();
}
else if(Ps3.data.button.left){
zuoyi();
}
else if(Ps3.data.button.up){
qianjin();
}
else if(Ps3.data.button.down){
houtui();
}
else if( Ps3.data.button.cross ){
youzhuan();
}
else if(Ps3.data.button.triangle ){
zuozhuan();
}
else tingzhi();
(3)用按键控指红外线(红色的光线)和水弹枪
if( Ps3.data.button.circle ){
digitalWrite(25,HIGH);
}
else if( Ps3.data.button.square ){
digitalWrite(18,HIGH);
}
完整代码
#include<Adafruit_NeoPixel.h>
#include <Ps3Controller.h>
#include <ESP32Servo.h>
int pos=50;
Servo myservo;
//#ifdef __AVR__
//#include <avr/power.h>
#define PIN 5
#define NUMPIXELS 12
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels
void setup(){
myservo.attach(26,500,2500);
Serial.begin(9600);
pinMode(25,OUTPUT);
pinMode(18,OUTPUT);
pinMode(27, OUTPUT);
pinMode(13, OUTPUT);//左前
pinMode(4, OUTPUT);
pinMode(2, OUTPUT);//左后
pinMode(15, OUTPUT);
pinMode(14, OUTPUT);//右后
pinMode(17,OUTPUT);
pinMode(12, OUTPUT);//右前
Serial.begin(115200);
Ps3.begin();
Serial.println("Ready.");
pixels.begin();
Ps3.begin();
}
void zhi(){
pinMode(33,OUTPUT);
}
void qianjin(){
analogWrite(27, 200);//前
analogWrite(13, 0);
analogWrite(4, 200);
analogWrite(2, 0);
analogWrite(15, 200);
analogWrite(14, 0);
analogWrite(17, 200);
analogWrite(12, 0);
}
void houtui(){
analogWrite(27, 0);//后
analogWrite(13, 255);
analogWrite(4, 0);
analogWrite(2, 255);
analogWrite(15, 0);
analogWrite(14, 255);
analogWrite(17, 0);
analogWrite(12, 255);
}
void zuoyi(){
analogWrite(27, 0);//左
analogWrite(13, 255);
analogWrite(4, 255);
analogWrite(2, 0);
analogWrite(15, 0);
analogWrite(14, 255);
analogWrite(17, 255);
analogWrite(12, 0);
}
void youyi(){
analogWrite(27, 255);//右
analogWrite(13, 0);
analogWrite(4, 0);
analogWrite(2, 255);
analogWrite(15, 255);
analogWrite(14, 0);
analogWrite(17, 0);
analogWrite(12, 255);
}
void zuozhuan(){
analogWrite(27,0 );//左转
analogWrite(13, 255);
analogWrite(4, 0);
analogWrite(2, 255);
analogWrite(15, 255);
analogWrite(14,0);
analogWrite(17, 255);
analogWrite(12, 0);
}
void youzhuan(){
analogWrite(27,255);//右转
analogWrite(13,0);
analogWrite(4,255);
analogWrite(2,0);
analogWrite(15, 0);
analogWrite(14,255);
analogWrite(17, 0);
analogWrite(12, 255);
}
void tingzhi(){
analogWrite(27, 0);//停
analogWrite(13, 0);
analogWrite(4, 0);
analogWrite(2, 0);
analogWrite(15, 0);
analogWrite(14, 0);
analogWrite(17, 0);
analogWrite(12, 0);
}
void loop(){
if(Ps3.isConnected()){
digitalWrite(25,LOW);
digitalWrite(18,LOW);
if(Ps3.data.button.l1){
myservo.write(pos);
delay(15);
pos--;
}
else if(Ps3.data.button.r1){
myservo.write(pos);
delay(15);
pos++;
}
else if(Ps3.data.button.right){
youyi();
}
else if(Ps3.data.button.left){
zuoyi();
}
else if(Ps3.data.button.up){
qianjin();
}
else if(Ps3.data.button.down){
houtui();
}
}
else if( Ps3.data.button.cross ){
youzhuan();
}
else if(Ps3.data.button.triangle ){
zuozhuan();
}
else if( Ps3.data.button.circle ){
digitalWrite(25,HIGH);
}
else if( Ps3.data.button.square ){
digitalWrite(18,HIGH);
else tingzhi();
}
int x=analogRead(32);
Serial.println(x);
for(int i=0;i<=12;i++){
pixels.setPixelColor(i, pixels.Color(0, 150, 0));
pixels.show();
if(x>400){
pixels.setPixelColor(i, pixels.Color(150,0, 0));
delay(75);
}
}
}
使用PS5手柄前请先与小车的地址配对,不然无法连接PS5手柄