完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1
前言最近开始学习和树莓派小车的编程相关内容,本例较简单,可以通过Arduino mega 2560 读取PS2 手柄的左摇信号并驱动运动。 2 硬件连接 硬件连接是编程的基础,也正是在本例的探索过程中,我在网上发现了很多例子借用了自己的图片、程序,需要的图片和程序存在无法对应的问题,浪费了我很多时间。但绝对,确保了图片和程序的对应性问题 。11 硬件构成了简介 本例使用的小车为双例电机(供电12V旅游比电机30)后驱力,前轮转向为DS3119舵机驱动;使用购买L298N电机驱动板直接驱动两个后轮驱动电机运动;本示例使用的驱动为Arduino mega 2560,前轮转向舵机采用L298N驱动板的5V输出供电,信号线直接与Arduino相连;无线手柄为购买的仿制PS2手柄,但好在一个组成基本相同且有标;小车采用318650个电池组的电池组供应,游电压11.V。本示例涉及硬件如下表: [tr]名称主要参数备注[/tr]
2.2硬件连线 所用端口、硬件连线如下图所示: 3 程序编制 本例所用全部程序如下: #include #include PS2X ps2x; // create PS2 Controller Class Servo myservo; //创建一个舵机控制对象 //right now, the library does NOT support hot pluggable controllers, meaning //you must always either restart your Arduino after you conect the controller, //or call config_gamepad(pins) again after connecting the controller. int Left_motor_back=6; //左电机后退(IN1) int Left_motor_go=7; //左电机前进(IN2) int Right_motor_go=5; // 右电机前进(IN3) int Right_motor_back=4; // 右电机后退(IN4) int Velocity=0; //前进或后退的速度大小 int Direction=90; //转向舵机的角度,舵机初始都是在90度,对应前轮在中位,本例小车底盘大概左转极限对应舵机70度,右转极限对应舵机110度 int error = 0; //这些是人家原来的手柄信号读取例程中的内容 byte type = 0; byte vibrate = 0; void setup(){ Serial.begin(57600); //初始化电机驱动IO为输出方式 pinMode(Left_motor_go,OUTPUT); //将控制电机的四路信号口设置为输出模式 pinMode(Left_motor_back,OUTPUT); pinMode(Right_motor_go,OUTPUT); pinMode(Right_motor_back,OUTPUT); myservo.attach(8); //将舵机信号口设置为相应的舵机模式 //CHANGES for v1.6 HERE!!! **************PAY ATTENTION************* error = ps2x.config_gamepad(13,11,10,12, true, true); //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error if(error == 0){ Serial.println("Found Controller, configured successful"); Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;"); Serial.println("holding L1 or R1 will print out the analog stick values."); Serial.println("Go to www.billporter.info for updates and to report bugs."); } else if(error == 1) Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips"); else if(error == 2) Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips"); else if(error == 3) Serial.println("Controller refusing to enter Pressures mode, may not support it. "); //Serial.print(ps2x.Analog(1), HEX); type = ps2x.readType(); switch(type) { case 0: Serial.println("Unknown Controller type"); break; case 1: Serial.println("DualShock Controller Found"); break; case 2: Serial.println("GuitarHero Controller Found"); break; } } void loop(){ /* You must Read Gamepad to get new values Read GamePad and set vibration values ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255) if you don't enable the rumble, use ps2x.read_gamepad(); with no values you should call this at least once a second */ if(error == 1) //skip loop if no controller found return; ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at 'vibrate' speed if(ps2x.Analog(PSS_LY) <128){ //通过测试可知,左摇杆Y轴中位时是128,前推到顶为0,故此范围内执行if语句,为前进 Velocity = map(ps2x.Analog(PSS_LY), 0, 128, 255, 0);//通过map函数将128-0的摇杆值对应为255-0的速度值 analogWrite(Left_motor_go, Velocity); //前进状态,两个电机的go通道为速度值,back通道为0 analogWrite(Right_motor_go, Velocity); analogWrite(Left_motor_back, 0); analogWrite(Right_motor_back, 0); } else { //相应的,左摇杆Y轴在128-255的时候,意味着后退 Velocity = map(ps2x.Analog(PSS_LY), 128, 255, 0, 255);//通过map函数将128-255的摇杆值对应位0-255的速度值 analogWrite(Left_motor_back, Velocity); //后退状态,两个电机的back通道为速度值,go通道为0 analogWrite(Right_motor_back, Velocity); analogWrite(Left_motor_go, 0); analogWrite(Right_motor_go, 0); } Direction = map(ps2x.Analog(PSS_LX), 0, 255, 70, 110); //转向的控制较为简单,只需通过map函数将0-255的左摇杆X轴值对应为70-110的舵机角度 myservo.write(Direction); //将计算所得的舵机角度写入舵机 delay(50); //这个50ms的延时非常重要,去掉会影响arduino与手柄接收器的通讯 } 这个50ms的延时非常重要,去掉会影响arduino与手柄接收器的通讯 } 程序的说明均已在注释中表述,这里不再赘述。
|
||
|
||
只有小组成员才能发言,加入小组>>
2431 浏览 0 评论
9083 浏览 4 评论
36748 浏览 19 评论
5021 浏览 0 评论
24707 浏览 34 评论
1513浏览 2评论
1731浏览 1评论
2171浏览 1评论
1539浏览 0评论
510浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 21:03 , Processed in 1.080620 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号