单片机如何控制摇杆
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机如何控制摇杆相关的知识,希望对你有一定的参考价值。
参考技术A 双轴按键摇杆主要由两个10K的电位器和一个按键开关组成,两个电位器随着摇杆扭转角度分别输出X、Y轴上对应的电压值,在Z轴方向上按下摇杆可触发轻触按键。在配套机械结构的作用下,无外力扭动的摇杆初始状态下,两个电位器都处在量程的中间位置。2.2 电路原理图
这里单片机主控学长选择arduino,可选其他模块,如stm32
双轴按键摇杆模块的VCC、GND分别连接开发板的5V、GND,模块的X轴输出、Y轴输出分别连接开发板的模拟引脚A0、A1,模块的Z轴输出连接开发板数字引脚2。
3 实现效果
4 测试代码
/*
* JoyStick
* 双轴按键摇杆
*/
#define pinX A0
#define pinY A1
#define pinK 2
int value = 0;
void setup()
pinMode(pinK, INPUT);
Serial.begin(9600);
void loop()
value = analogRead(pinX);
Serial.print("X: ");
Serial.print(value);
value = analogRead(pinY);
Serial.print(" Y: ");
Serial.print(value);
value = digitalRead(pinK);
Serial.print(" Z: ");
Serial.println(value);
delay(1000);
登录后复制
烧录代码后,打开串口监视器,波特率设置成与程序中相一致的9600,扭动摇杆,监视器将显示X、Y轴对应的电压对应的AD数值。
简单的虚拟摇杆控制移动(NGUI)
http://www.cnblogs.com/zhangbaochong/p/4928688.html
一、用NGUI创建虚拟摇杆贴图
先创建一个sprite作为背景叫做JoyStick 并添加一个BoxCollider,再创建一个sprite child作为虚拟摇杆中间的按钮,叫做button
二、通过虚拟摇杆获得x,y偏移值
1 using UnityEngine; 2 using System.Collections; 3 4 public class JoyStick : MonoBehaviour 5 { 6 7 private bool isPress = false; 8 private Transform button; 9 10 //从虚拟摇杆的得到的x,y偏移值-1到1之间 11 public static float h = 0; 12 public static float v = 0; 13 void Awake() 14 { 15 button = transform.FindChild("button"); 16 } 17 void OnPress(bool isPress) 18 { 19 this.isPress = isPress; 20 if (!isPress) 21 { 22 button.localPosition = Vector2.zero; 23 h = 0; 24 v = 0; 25 } 26 } 27 28 void Update() 29 { 30 if (isPress) 31 { 32 Vector2 touchPos = UICamera.lastEventPosition - new Vector2(91, 91); 33 float distance = Vector2.Distance(Vector2.zero, touchPos); 34 if (distance > 73)//虚拟摇杆按钮不能超过半径 35 { 36 touchPos = touchPos.normalized * 73; 37 } 38 button.localPosition = touchPos; 39 40 h = touchPos.x / 73; 41 v = touchPos.y / 73; 42 } 43 } 44 }
三、通过偏移控制移动 主角添加了character controller
1 using UnityEngine; 2 using System.Collections; 3 4 public class PlayerMove : MonoBehaviour 5 { 6 private CharacterController cc; 7 public float speed = 3f; 8 9 void Awake() 10 { 11 cc = GetComponent<CharacterController>(); 12 } 13 14 // Update is called once per frame 15 void Update () 16 { 17 //键盘控制 18 float h = Input.GetAxis("Horizontal"); 19 float v = Input.GetAxis("Vertical"); 20 21 //虚拟摇杆控制 22 if (JoyStick.h != 0 || JoyStick.v != 0) 23 { 24 h = JoyStick.h; 25 v = JoyStick.v; 26 } 27 28 if (Mathf.Abs(h) > 0.1f || Mathf.Abs(v) > 0.1f) 29 { 30 Vector3 targetDir = new Vector3(h, 0, v); 31 transform.LookAt(targetDir + transform.position); 32 cc.SimpleMove(targetDir * speed); 33 } 34 35 36 } 37 }
以上是关于单片机如何控制摇杆的主要内容,如果未能解决你的问题,请参考以下文章
单片机控制TFT液晶,液晶驱动为ILI9341,请教各位大神如何实现动画显示且屏幕不闪烁?
@张飞老师:如何设计单片机控制的2PIN双色LED灯的驱动电路