自己编写的一个ps2摇杆的类
自己编写的一个ps2摇杆的类,大家给点意见主程序:
//--------------------------------------------------------------------test.ino----------------------------------------------
#include "ps2.h"
ps2 ps;
void setup()
{
ps.init(0,1,2);
//函数指针赋值
ps.Up=Up;
ps.Middle=Middle;
ps.Dwon=Down;
}
void loop()
{
ps.setXYvalue(495,519); //设置中间值
ps.run();
delay(500);
}
void Up()
{
Serial.println("up");
}
void Middle()
{
Serial.println("Middle");
}
void Down()
{
Serial.println("Down");
}
//------------------------------------------------------------ps2.h头文件------------------------------------------------
#ifndef ps2H
#define ps2H
//---------------------------------------------------------------------------
#include <Arduino.h>
class ps2
{
private:
//当前x,y值
int x_position;
int y_position;
//中间值,也就是不动摇杆时的X,Y值
int X_Middle;
int Y_Middle;
//模拟端口
int PIN_ANALOG_X;
int PIN_ANALOG_Y;
// 模拟端口,数字端口都可以
int PIN_ANALOG_K;
//中间按钮
bool k_pressed;
public:
//
ps2();
void setXYvalue(int X,int Y); //设置X,Y的中间值
void init( int X,int Y, int k);//初始化端口
int getX_position();//读取当前X的值
int getY_position();//读取当前Y的值
bool getKey();//读取中间按钮是否为按下状态
void run();//运行程序
//函数指针
void (*Middle)(); // 横/竖,中间
void (*Up)();
void (*Dwon)();
void (*Left)();
void (*Right)();
void(*LeftUp)();
void (*RightUp)();
void (*LeftDwon)();
void (*RightDwon)();
};
#endif
//-------------------------------------------------------ps2.cpp文件----------------------------------------------------
//---------------------------------------------------------------------------
#include "ps2.h"
//---------------------------------------------------------------------------
ps2::ps2()
{
X_Middle=480;
Y_Middle=480;
Middle=NULL;
Up=NULL;
Dwon=NULL;
Left=NULL;
Right=NULL;
LeftUp=NULL;
RightUp=NULL;
LeftDwon=NULL;
RightDwon=NULL;
}
void ps2::setXYvalue(int X,int Y)
{
X_Middle=X;
Y_Middle=Y;
}
void ps2::init( int X,int Y, int k)
{
PIN_ANALOG_X=X;
PIN_ANALOG_Y=Y;
PIN_ANALOG_K=k;
pinMode(PIN_ANALOG_K, INPUT);// 初始化 摇杆,中间开关
}
int ps2::getX_position()
{
return x_position;
}
int ps2::getY_position()
{
return y_position;
}
bool ps2::getKey()
{
return k_pressed;
}
void ps2::run()
{
k_pressed=digitalRead(PIN_ANALOG_K);
x_position = analogRead(PIN_ANALOG_X);
y_position = analogRead(PIN_ANALOG_Y);
// 默认方向,中间
int x_direction = 0;
int y_direction = 0;
// 判定,横轴方向
if (x_position > X_Middle+80)
x_direction = 1; // 右
else
if (x_position < X_Middle-80)
x_direction = 2; // 左
// 判定,竖轴方向
if (y_position > Y_Middle+80)
y_direction = 6; // 上
else
if (y_position < Y_Middle-80)
y_direction = 3; // 下
int direct = y_direction;
if (x_direction != 0){ // 判定,X轴方向叠加
direct = x_direction + y_direction;
}
switch (direct){
case 0: // 横/竖,中间
if(Middle!=NULL)
(*Middle)();
break;
case 1: // 右
if(Right!=NULL)
(*Right)();
break;
case 2: // 左
if(Left!=NULL)
(*Left)();
break;
case 3: // 上
//Up();
if(Up!=NULL)
(*Up)();
break;
case 4: // 右上
if(RightUp!=NULL)
(*RightUp)();
break;
case 5: // 左上
if(LeftUp!=NULL)
(*LeftUp)();
break;
case 6: // 下
if(Dwon!=NULL)
(*Dwon)();
break;
case 7: // 右下
if(RightDwon!=NULL)
(*RightDwon)();
break;
case 8: // 左下
if(LeftDwon!=NULL)
(*LeftDwon)();
break;
}
}
把程序套在 代码里面把,好读一点。 函数指针
高端 函数指针就相当于高级语言里的事件:lol 只用过c语言,lz这种编的是c++的范式,类啊什么的不是太懂。 这个库可以控制舵机转动不?如何控制呢?谢谢谢!
学习了,谢谢lz:lol 虽然没有完全看懂,但是很佩服,好好向楼主学习一下:)
页:
[1]