设为首页收藏本站

arduino 单片机机器人爱好者之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: UNO

Arduino舵机转向小车、PS2控制,循迹,避障,跟随

  [复制链接]

该用户从未签到

发表于 2017-8-23 13:15:34 | 显示全部楼层
还没到货,先收集资料。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2018-1-30 11:17:08 | 显示全部楼层
謝謝分享謝謝分享
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2018-4-17 14:21:08 | 显示全部楼层
买了小车,真准备装PS2手柄试试。谢谢分享!
回复 支持 反对

使用道具 举报

签到天数: 350 天

[LV.8]以坛为家I

 楼主| 发表于 2018-4-17 17:40:01 | 显示全部楼层
oww2002 发表于 2018-4-17 14:21
买了小车,真准备装PS2手柄试试。谢谢分享!

回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2018-7-30 18:05:46 | 显示全部楼层
附件里面的程序只是操控一个舵机吗?
回复 支持 反对

使用道具 举报

签到天数: 350 天

[LV.8]以坛为家I

 楼主| 发表于 2018-7-31 08:04:03 | 显示全部楼层
yzc199833 发表于 2018-7-30 18:05
附件里面的程序只是操控一个舵机吗?

是的,小车只用到一个舵机,如果你想控制多个舵机需要添加相关程序即可,多个舵机无法同时控制。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2018-7-31 13:29:19 | 显示全部楼层
那怎么设计控制多个舵机?大神能不能看看我设计的这个程序行不行啊,好像不能单独控制每一个舵机,试了好多次
//程序任务:PS2手柄数据采集和遥控主机发送数据。
#include <PS2X_lib.h>  //声明PS2X库文件
PS2X ps2x; // 定义ps2x为PS2X类变量
int PS_LY;//存储PS2手柄左摇杆Y轴数据
int PS_RX;//存储PS2手柄右摇杆X轴数据
int flag;//存储PS2手柄按键标识
//初始化
void setup(){
Serial.begin(9600); //启动串行通信
//初始化PS2与Arduino控制器接口
ps2x.config_gamepad(13,11,10,12, true, true);  
}
//主程序
void loop(){   
   ps2x.read_gamepad();//读PS2数据   
   //如果按下PS2的绿色“三角”按键,标识为'A'
   if(ps2x.NewButtonState(PSB_GREEN))         
        { flag='A' ; }   
   //如果按下PS2的蓝色“X”按键,标识为'B'
    else if(ps2x.NewButtonState(PSB_BLUE))      
         { flag='B' ; }
    //如果没有按键按下,标识为'C'
    else
       { flag='C' ; }
   //把PS2手柄左摇杆Y轴数据读到变量PS_LY
    PS_LY=ps2x.Analog(PSS_LY);
    //把PS2手柄右摇杆X轴数据读到变量PS_RX
    PS_RX=ps2x.Analog(PSS_RX);
   //把PS2手柄操作数据从遥控器发到乐高小车的接收端
   Serial.write(flag);
   Serial.write(PS_LY);   
   Serial.write(PS_RX);  
   delay(100); //等待数据发送与接收
}

乐高被控车程序:


//程序任务:接受遥控主机发送的数据,并处理这些数据,

//通过控制小车左右电机的转速和转向来控制小车行走。

#include <Servo.h>  //声明伺服马达函数库
Servo rightservo;  // 定义伺服马达对象变量
Servo leftservo;  // 定义伺服马达对象变量
int power=15;//马达功率变量定义和初始化设置

int PS_LY;//存储PS2手柄左摇杆Y轴数据
int PS_RX;//存储PS2手柄右摇杆X轴数据
int button;//存储PS2手柄按键标识

void setup()
{
   Serial.begin(9600);  //串口波特率设置,开始串口通信
   rightservo.attach(9);  //初始化9号数字量引脚来控制小车右马达
   leftservo.attach(10); //初始化10号数字量引脚来控制小车左马达
   //连续旋转的舵机, 执行myservo.write(90),舵机的速度可能不为0,
   //我手头的舵机,执行myservo.write(93),舵机的速度才为0。
   rightservo.write(93);//舵机停转
   leftservo.write(93);//舵机停转
}

void loop()
{
      //如果查询上位机通过串口已经发来有3个字节的密码   
       if(Serial.available()==3)
      {
             button=Serial.read();//串口缓冲器里读出的第一个字节
             PS_LY=Serial.read(); //
             PS_RX=Serial.read(); //  
           //如果按下PS2的绿色“三角”按键,则功率设置为15
           if(button=='A')
           {
              power=15;              
           }
            //如果按下PS2的蓝色“X”按键,则功率设置为5
           if(button=='B')
           {
             power=5;
           }
           //如果PS2右摇杆不动,而左摇杆的Y轴数据发生变化
           if(PS_RX==128 && PS_LY!=127)
           {
               如果左摇杆向前摇动
                if(PS_LY<127)
               {
                 //小车前进
                 rightservo.write(93+power);
                 leftservo.write(93-power);
               }
               如果左摇杆向后摇动
                if(PS_LY>127)
               {
                 //小车后退
                 rightservo.write(93-power);
                 leftservo.write(93+power);
               }
           }   
           //如果PS2左摇杆不动,而右摇杆的X轴数据发生变化
           else if(PS_LY==127 && PS_RX!=128)
           {
               //如果右摇杆向右摇动
               if(PS_RX<128)
               {
                 //小车右转
                 rightservo.write(93);
                 leftservo.write(93-power);
               }
                //如果右摇杆向左摇动
               if(PS_RX>128)
               {
                 //小车左转
                 rightservo.write(93+power);
                 leftservo.write(93);
               }
           }
           //否则小车停止
           else
               {
                  rightservo.write(93);
                 leftservo.write(93);
               }      
      }
}
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2018-7-31 13:59:25 | 显示全部楼层
或者说一个程序分别控制三个舵机
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2018-7-31 14:00:26 | 显示全部楼层
/**
* Copyright(C), 2018-2038, KenRobot.com
* FileName: PS2.ino
* Author: 啃萝卜
* Create: 2018/07/31
* Modify: 2018/07/31
*/

#include <PS2X_lib.h>
#include <Servo.h>

int ps2x_0_DAT = 11;
int ps2x_0_CMD = 10;
int ps2x_0_SEL = 9;
int ps2x_0_CLK = 8;
PS2X ps2x_0;
Servo servo_0;
Servo servo_1;
Servo servo_2;
int error = 0;
int type = 0;

void setup() {
    Serial.begin(9600);
    servo_0.attach(7);
    servo_1.attach(6);
    servo_2.attach(5);
    servo_0.write(0);
    error = ps2x_0.config_gamepad(ps2x_0_DAT, ps2x_0_CMD, ps2x_0_SEL, ps2x_0_CLK, true, true);
    if (error == 0) {
        Serial.println("手柄设置成功");
    } else {
        Serial.println("手柄设置失败");
    }
    Serial.println("手柄的类型为: ");
    type = ps2x_0.readType();
    switch (type) {
        case 0:
            Serial.println("未知");
            break;
        case 1:
            Serial.println("DualShock");
            break;
        case 2:
            Serial.println("GuitarHero");
            break;
        case 3:
            Serial.println("Wireless Sony DualShock");
            break;
    }
}

void loop() {
    if (error == 1) {
        return;
    }
    if (type == 1) {
        ps2x_0.read_gamepad();
        if (ps2x_0.Button(PSB_START)) {
            Serial.println("START PRESSED");
            if (ps2x_0.Button(PSB_PAD_UP)) {
                servo_0.write(90);
                delay(3000);
                servo_0.write(0);
                delay(2000);
            }
            if (ps2x_0.Button(PSB_PAD_DOWN)) {
                servo_0.write(90);
                delay(3000);
                servo_0.write(0);
                delay(2000);
            }
            if (ps2x_0.Button(PSB_PAD_LEFT)) {
                servo_0.write(90);
                delay(3000);
                servo_0.write(0);
                delay(2000);
            }
        }
    }
}
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2018-7-31 14:00:58 | 显示全部楼层
这个行吗   ,,,,,,,,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|联系我们|YFRobot ( 苏ICP备13017135  

GMT+8, 2018-10-21 12:17 , Processed in 0.101198 second(s), 21 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表