【机甲大师】使用arduind IDE软件编写

一.思维导图

二.程序代码

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手柄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值