单片机如何控制摇杆

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 }
复制代码

 

以上是关于单片机如何控制摇杆的主要内容,如果未能解决你的问题,请参考以下文章

STM32F411CE驱动Xbox摇杆

如何利用单片机控制一颗LED 灯闪烁

单片机控制TFT液晶,液晶驱动为ILI9341,请教各位大神如何实现动画显示且屏幕不闪烁?

@张飞老师:如何设计单片机控制的2PIN双色LED灯的驱动电路

我想用Android手机与单片机进行串口通信,从而可以控制单片机,该如何实现呢?

单片机入门与实战