jordan harper / Mbed 2 deprecated GameProject

Dependencies:   N5110 mbed

Committer:
jordaahh
Date:
Sat Apr 11 15:16:52 2015 +0000
Revision:
1:3b741adc82ea
Parent:
0:a28ad0db4228
Child:
2:98a51d3c2e44
LCD screen has been initialised.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jordaahh 0:a28ad0db4228 1 /* Joystick
jordaahh 0:a28ad0db4228 2
jordaahh 0:a28ad0db4228 3 Example code of how to read a joystick
jordaahh 0:a28ad0db4228 4
jordaahh 0:a28ad0db4228 5 https://www.sparkfun.com/products/9032
jordaahh 0:a28ad0db4228 6
jordaahh 0:a28ad0db4228 7 Craig A. Evans
jordaahh 0:a28ad0db4228 8 7 March 2015
jordaahh 0:a28ad0db4228 9 */
jordaahh 0:a28ad0db4228 10
jordaahh 0:a28ad0db4228 11 #include "mbed.h"
jordaahh 1:3b741adc82ea 12 #include "N5110.h"
jordaahh 1:3b741adc82ea 13
jordaahh 0:a28ad0db4228 14 // change this to alter tolerance of joystick direction
jordaahh 0:a28ad0db4228 15 #define DIRECTION_TOLERANCE 0.05
jordaahh 0:a28ad0db4228 16
jordaahh 0:a28ad0db4228 17 // connections for joystick
jordaahh 0:a28ad0db4228 18 DigitalIn button(p15);
jordaahh 0:a28ad0db4228 19 AnalogIn xPot(p16);
jordaahh 0:a28ad0db4228 20 AnalogIn yPot(p17);
jordaahh 1:3b741adc82ea 21
jordaahh 1:3b741adc82ea 22 // LCD connections
jordaahh 1:3b741adc82ea 23 //vcc, sce, rst, dc, mosi, clk, led
jordaahh 1:3b741adc82ea 24 N5110 lcd(p7,p8,p9,p10,p11,p13,p26);
jordaahh 1:3b741adc82ea 25
jordaahh 1:3b741adc82ea 26 // Output to screen LED's (backlights)
jordaahh 1:3b741adc82ea 27 PwmOut PWM(p26);
jordaahh 1:3b741adc82ea 28
jordaahh 0:a28ad0db4228 29 // timer to regularly read the joystick
jordaahh 0:a28ad0db4228 30 Ticker pollJoystick;
jordaahh 0:a28ad0db4228 31 // Serial for debug
jordaahh 0:a28ad0db4228 32 Serial serial(USBTX,USBRX);
jordaahh 0:a28ad0db4228 33
jordaahh 0:a28ad0db4228 34 // create enumerated type (0,1,2,3 etc. for direction)
jordaahh 0:a28ad0db4228 35 // could be extended for diagonals etc.
jordaahh 0:a28ad0db4228 36 enum DirectionName {
jordaahh 0:a28ad0db4228 37 UP,
jordaahh 0:a28ad0db4228 38 DOWN,
jordaahh 0:a28ad0db4228 39 LEFT,
jordaahh 0:a28ad0db4228 40 RIGHT,
jordaahh 0:a28ad0db4228 41 CENTRE,
jordaahh 0:a28ad0db4228 42 UNKNOWN
jordaahh 0:a28ad0db4228 43 };
jordaahh 0:a28ad0db4228 44
jordaahh 0:a28ad0db4228 45 // struct for Joystick
jordaahh 0:a28ad0db4228 46 typedef struct JoyStick Joystick;
jordaahh 0:a28ad0db4228 47 struct JoyStick {
jordaahh 0:a28ad0db4228 48 float x; // current x value
jordaahh 0:a28ad0db4228 49 float x0; // 'centred' x value
jordaahh 0:a28ad0db4228 50 float y; // current y value
jordaahh 0:a28ad0db4228 51 float y0; // 'centred' y value
jordaahh 0:a28ad0db4228 52 int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
jordaahh 0:a28ad0db4228 53 DirectionName direction; // current direction
jordaahh 0:a28ad0db4228 54 };
jordaahh 0:a28ad0db4228 55 // create struct variable
jordaahh 0:a28ad0db4228 56 Joystick joystick;
jordaahh 0:a28ad0db4228 57
jordaahh 0:a28ad0db4228 58 int printFlag = 0;
jordaahh 0:a28ad0db4228 59
jordaahh 0:a28ad0db4228 60 // function prototypes
jordaahh 0:a28ad0db4228 61 void calibrateJoystick();
jordaahh 0:a28ad0db4228 62 void updateJoystick();
jordaahh 0:a28ad0db4228 63
jordaahh 0:a28ad0db4228 64 int main()
jordaahh 0:a28ad0db4228 65 {
jordaahh 1:3b741adc82ea 66 lcd.init();
jordaahh 0:a28ad0db4228 67 calibrateJoystick(); // get centred values of joystick
jordaahh 0:a28ad0db4228 68 pollJoystick.attach(&updateJoystick,1.0/10.0); // read joystick 10 times per second
jordaahh 0:a28ad0db4228 69
jordaahh 0:a28ad0db4228 70 while(1) {
jordaahh 0:a28ad0db4228 71
jordaahh 0:a28ad0db4228 72 if (printFlag) { // if flag set, clear flag and print joystick values to serial port
jordaahh 0:a28ad0db4228 73 printFlag = 0;
jordaahh 0:a28ad0db4228 74 serial.printf("x = %f y = %f button = %d ",joystick.x,joystick.y,joystick.button);
jordaahh 0:a28ad0db4228 75
jordaahh 0:a28ad0db4228 76 // check joystick direction
jordaahh 0:a28ad0db4228 77 if (joystick.direction == UP)
jordaahh 0:a28ad0db4228 78 serial.printf(" UP\n");
jordaahh 0:a28ad0db4228 79 if (joystick.direction == DOWN)
jordaahh 0:a28ad0db4228 80 serial.printf(" DOWN\n");
jordaahh 0:a28ad0db4228 81 if (joystick.direction == LEFT)
jordaahh 0:a28ad0db4228 82 serial.printf(" LEFT\n");
jordaahh 0:a28ad0db4228 83 if (joystick.direction == RIGHT)
jordaahh 0:a28ad0db4228 84 serial.printf(" RIGHT\n");
jordaahh 0:a28ad0db4228 85 if (joystick.direction == CENTRE)
jordaahh 0:a28ad0db4228 86 serial.printf(" CENTRE\n");
jordaahh 0:a28ad0db4228 87 if (joystick.direction == UNKNOWN)
jordaahh 0:a28ad0db4228 88 serial.printf(" Unsupported direction\n");
jordaahh 0:a28ad0db4228 89
jordaahh 0:a28ad0db4228 90 }
jordaahh 0:a28ad0db4228 91
jordaahh 0:a28ad0db4228 92 }
jordaahh 0:a28ad0db4228 93 }
jordaahh 0:a28ad0db4228 94
jordaahh 0:a28ad0db4228 95 // read default positions of the joystick to calibrate later readings
jordaahh 0:a28ad0db4228 96 void calibrateJoystick()
jordaahh 0:a28ad0db4228 97 {
jordaahh 0:a28ad0db4228 98 button.mode(PullDown);
jordaahh 0:a28ad0db4228 99 // must not move during calibration
jordaahh 0:a28ad0db4228 100 joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
jordaahh 0:a28ad0db4228 101 joystick.y0 = yPot;
jordaahh 0:a28ad0db4228 102 }
jordaahh 0:a28ad0db4228 103 void updateJoystick()
jordaahh 0:a28ad0db4228 104 {
jordaahh 0:a28ad0db4228 105 // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
jordaahh 0:a28ad0db4228 106 joystick.x = xPot - joystick.x0;
jordaahh 0:a28ad0db4228 107 joystick.y = yPot - joystick.y0;
jordaahh 0:a28ad0db4228 108 // read button state
jordaahh 0:a28ad0db4228 109 joystick.button = button;
jordaahh 0:a28ad0db4228 110
jordaahh 0:a28ad0db4228 111 // calculate direction depending on x,y values
jordaahh 0:a28ad0db4228 112 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
jordaahh 0:a28ad0db4228 113 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
jordaahh 0:a28ad0db4228 114 joystick.direction = CENTRE;
jordaahh 0:a28ad0db4228 115 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
jordaahh 0:a28ad0db4228 116 joystick.direction = UP;
jordaahh 0:a28ad0db4228 117 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
jordaahh 0:a28ad0db4228 118 joystick.direction = DOWN;
jordaahh 0:a28ad0db4228 119 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
jordaahh 0:a28ad0db4228 120 joystick.direction = RIGHT;
jordaahh 0:a28ad0db4228 121 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
jordaahh 0:a28ad0db4228 122 joystick.direction = LEFT;
jordaahh 0:a28ad0db4228 123 } else {
jordaahh 0:a28ad0db4228 124 joystick.direction = UNKNOWN;
jordaahh 0:a28ad0db4228 125 }
jordaahh 0:a28ad0db4228 126
jordaahh 0:a28ad0db4228 127 // set flag for printing
jordaahh 0:a28ad0db4228 128 printFlag = 1;
jordaahh 0:a28ad0db4228 129 }