tom_hsh 发表于 2012-11-2 15:16:06

自己编写的一个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;
}



}






幻生幻灭 发表于 2012-11-2 18:16:47

把程序套在 代码里面把,好读一点。

test01 发表于 2012-11-2 18:31:05

函数指针
高端

ttyp 发表于 2012-11-2 20:31:43

函数指针就相当于高级语言里的事件:lol

micro_听海 发表于 2012-11-3 10:10:37

只用过c语言,lz这种编的是c++的范式,类啊什么的不是太懂。

tcsun 发表于 2013-11-18 12:58:41

这个库可以控制舵机转动不?如何控制呢?谢谢谢!

卷毛 发表于 2014-4-25 23:26:03

学习了,谢谢lz:lol

haigd 发表于 2017-10-24 19:29:20

虽然没有完全看懂,但是很佩服,好好向楼主学习一下:)
页: [1]
查看完整版本: 自己编写的一个ps2摇杆的类