Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: N5110 PowerControl mbed
main.cpp
- Committer:
- el13ks
- Date:
- 2015-04-22
- Revision:
- 7:9ecf9df1e95e
- Parent:
- 6:af4d3c5a9d43
- Child:
- 8:c12828c83a44
File content as of revision 7:9ecf9df1e95e:
#include "mbed.h" #include "N5110.h" #define DIRECTION_TOLERANCE 0.05// Tolerance of Joystick BusOut myleds(p24,p23,p22); //External LEDS InterruptIn StartButton(p18);//Start button N5110 lcd(p7,p8,p9,p10,p11,p13,p26); //PWR, SCE, RST, DC, MOSI, SCLK, LED AnalogIn Bright(p20);//Pot to adjust brightness Ticker timer; //Create ticker object DigitalIn button(p17);// Joystick Button AnalogIn xPot(p15);// Joystick x-direction AnalogIn yPot(p16);// Joystick y-direction int i=3; // Pacman's starting position int j = 3; Ticker pollJoystick; // timer to regularly read the joystick int coinflag = 1; int coinflag2 = 1; int coinflag3 = 1; int coinflag4 = 1; int coinflag5 = 1; enum DirectionName { // create enumerated type (0,1,2,3 etc. for direction) UP, // could be extended for diagonals etc. DOWN, LEFT, RIGHT, CENTRE, UNKNOWN }; typedef struct JoyStick Joystick; // struct for Joystick struct JoyStick { float x; // current x value float x0; // 'centred' x value float y; // current y value float y0; // 'centred' y value int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed) DirectionName direction; // current direction }; Joystick joystick; // create struct variable void calibrateJoystick() // read default positions of the joystick to calibrate later readings { button.mode(PullDown); // must not move during calibration joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly) joystick.y0 = yPot; } void updateJoystick() { joystick.x = xPot - joystick.x0; // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred) joystick.y = yPot - joystick.y0; joystick.button = button; // read button state // calculate direction depending on x,y values // tolerance allows a little lee-way in case joystick not exactly in the stated direction if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { joystick.direction = CENTRE; } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { joystick.direction = UP; } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) { joystick.direction = DOWN; } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { joystick.direction = RIGHT; } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) { joystick.direction = LEFT; } else { joystick.direction = UNKNOWN; } } void drawMap() { lcd.drawRect(41,20,10,2,1); lcd.drawRect(41,0,2,10,1); lcd.drawRect(7,8,24,2,1); lcd.drawRect(83,47,1,1,2); //Round off shape } void checkRight() { int r = 0;//Variable for right movement check if(lcd.getPixel (i+3,j))//Check 4 pixels to the right r++; if(lcd.getPixel (i+4,j))//Check 5 pixels to the right r++; if (r==2) { // Condition for solid obstacles i--; } } void checkLeft() { int l = 0 ; // Variable for left movement check if(lcd.getPixel (i-3,j))//Check 4 pixels to the left l++; if(lcd.getPixel (i-4,j))//Check 5 pixels to the left l++; if (l==2) { // Condition for solid obstacles i++; } } void checkUp() { int u=0; if(lcd.getPixel (i,j-3))//Check 4 pixels above u++; if(lcd.getPixel (i,j-4))//Check 5 pixels above u++; if (u==2) { // Condition for solid obstacles j++; } } void checkDown() { int d=0; if(lcd.getPixel (i,j+3))//Check 4 pixels below d++; if(lcd.getPixel (i,j+4))//Check 5 pixels below d++; if (d==2) { // Condition for solid obstacles j--; } } void drawCoin() { if (coinflag) { lcd.drawCircle(10,3,2,0); } if (coinflag2) { lcd.drawCircle(20,3,2,0); } if (coinflag3) { lcd.drawCircle(30,3,2,0); } if (coinflag4) { lcd.drawCircle(50,3,2,0); } if (coinflag5) { lcd.drawCircle(60,3,2,0); } } void checkCoin() { if (i==10 &&j==3) { coinflag=0; } if (i==20 &&j==3) { coinflag2=0; } if (i==30 &&j==3) { coinflag3=0; } if (i==50 &&j==3) { coinflag4=0; } if (i==60 &&j==3) { coinflag5=0; } } void Joystickcheck() { if (joystick.direction == UP) { j--; } if (joystick.direction == DOWN) { j++; } if (joystick.direction == LEFT) { i--; } if (joystick.direction == RIGHT) { i++; } } void drawPacman() { if(joystick.direction == RIGHT) { lcd.setPixel(i,j); lcd.setPixel(i-1,j);//Direction dependent (left and right) lcd.setPixel(i-2,j);//Direction dependent (left and right) lcd.setPixel(i-3,j);//Direction dependent (left and right) lcd.setPixel(i,j+1); lcd.setPixel(i,j+2); lcd.setPixel(i,j+3); lcd.setPixel(i,j-1); lcd.setPixel(i,j-2); lcd.setPixel(i,j-3); lcd.setPixel(i-1,j+3); lcd.setPixel(i+1,j+3); lcd.setPixel(i,j-1); lcd.setPixel(i-2,j+2); lcd.setPixel(i-1,j+2); lcd.setPixel(i+2,j+2); lcd.setPixel(i+1,j+2); lcd.setPixel(i-1,j+1);//Direction dependent (left and right) lcd.setPixel(i-2,j+1);//Direction dependent (left and right) lcd.setPixel(i-3,j+1);//Direction dependent (left and right) lcd.setPixel(i-1,j-1);//Direction dependent (left and right) lcd.setPixel(i-2,j-1);//Direction dependent (left and right) lcd.setPixel(i-3,j-1);//Direction dependent (left and right) lcd.setPixel(i-1,j-2); lcd.setPixel(i-2,j-2); lcd.setPixel(i+1,j-2); lcd.setPixel(i+2,j-2); lcd.setPixel(i+1,j-3); lcd.setPixel(i-1,j-3); } else if(joystick.direction == LEFT) { lcd.setPixel(i,j); lcd.setPixel(i,j+1); lcd.setPixel(i,j+2); lcd.setPixel(i,j+3); lcd.setPixel(i,j-1); lcd.setPixel(i,j-2); lcd.setPixel(i,j-3); lcd.setPixel(i-1,j+3); lcd.setPixel(i+1,j+3); lcd.setPixel(i,j-1); lcd.setPixel(i-2,j+2); lcd.setPixel(i-1,j+2); lcd.setPixel(i+2,j+2); lcd.setPixel(i+1,j+2); lcd.setPixel(i-1,j-2); lcd.setPixel(i-2,j-2); lcd.setPixel(i+1,j-2); lcd.setPixel(i+2,j-2); lcd.setPixel(i+1,j-3); lcd.setPixel(i-1,j-3); lcd.setPixel(i+1,j);//Direction dependent(left and right) lcd.setPixel(i+2,j);//Direction dependent(left and right) lcd.setPixel(i+3,j);//Direction dependent (left and right) lcd.setPixel(i+1,j+1);//Direction dependent (left and right) lcd.setPixel(i+2,j+1);//Direction dependent (left and right) lcd.setPixel(i+3,j+1);//Direction dependent (left and right) lcd.setPixel(i+1,j-1);//Direction dependent (left and right) lcd.setPixel(i+2,j-1);//Direction dependent (left and right) lcd.setPixel(i+3,j-1);//Direction dependent (left and right) } else if(joystick.direction == UP) { lcd.setPixel(i,j); lcd.setPixel(i+1,j); lcd.setPixel(i+2,j); lcd.setPixel(i+3,j); lcd.setPixel(i-1,j); lcd.setPixel(i-2,j); lcd.setPixel(i-3,j); lcd.setPixel(i,j+1);//Direction dependent(Up and Down) lcd.setPixel(i+1,j+1);//Direction dependent(Up and Down) lcd.setPixel(i+2,j+1); lcd.setPixel(i+3,j+1); lcd.setPixel(i-1,j+1);//Direction dependent(Up and Down) lcd.setPixel(i-2,j+1); lcd.setPixel(i-3,j+1); lcd.setPixel(i,j+2);//Direction dependent(Up and Down) lcd.setPixel(i+1,j+2);//Direction dependent(Up and Down) lcd.setPixel(i+2,j+2); lcd.setPixel(i-1,j+2);//Direction dependent(Up and Down) lcd.setPixel(i-2,j+2); lcd.setPixel(i-1,j+3);//Direction dependent(Up and Down) lcd.setPixel(i,j+3);//Direction dependent(Up and Down) lcd.setPixel(i+1,j+3);//Direction dependent(Up and Down) lcd.setPixel(i-2,j-1); lcd.setPixel(i-3,j-1); lcd.setPixel(i+3,j-1); lcd.setPixel(i+2,j-1); lcd.setPixel(i+2,j-2); lcd.setPixel(i-2,j-2); } else if (joystick.direction == DOWN) { lcd.setPixel(i,j); lcd.setPixel(i+1,j); lcd.setPixel(i+2,j); lcd.setPixel(i+3,j); lcd.setPixel(i-1,j); lcd.setPixel(i-2,j); lcd.setPixel(i-3,j); lcd.setPixel(i,j-1);//Direction dependent(Up and Down) lcd.setPixel(i+1,j-1);//Direction dependent(Up and Down) lcd.setPixel(i+2,j+1); lcd.setPixel(i+3,j+1); lcd.setPixel(i-1,j-1);//Direction dependent(Up and Down) lcd.setPixel(i-2,j+1); lcd.setPixel(i-3,j+1); lcd.setPixel(i,j-2);//Direction dependent(Up and Down) lcd.setPixel(i+1,j-2);//Direction dependent(Up and Down) lcd.setPixel(i+2,j+2); lcd.setPixel(i-1,j-2);//Direction dependent(Up and Down) lcd.setPixel(i-2,j+2); lcd.setPixel(i-1,j-3);//Direction dependent(Up and Down) lcd.setPixel(i,j-3);//Direction dependent(Up and Down) lcd.setPixel(i+1,j-3);//Direction dependent(Up and Down) lcd.setPixel(i-2,j-1); lcd.setPixel(i-3,j-1); lcd.setPixel(i+3,j-1); lcd.setPixel(i+2,j-1); lcd.setPixel(i+2,j-2); lcd.setPixel(i-2,j-2); } else { lcd.setPixel(i,j); lcd.setPixel(i-1,j);//Direction dependent (left and right) lcd.setPixel(i-2,j);//Direction dependent (left and right) lcd.setPixel(i-3,j);//Direction dependent (left and right) lcd.setPixel(i,j+1); lcd.setPixel(i,j+2); lcd.setPixel(i,j+3); lcd.setPixel(i,j-1); lcd.setPixel(i,j-2); lcd.setPixel(i,j-3); lcd.setPixel(i-1,j+3); lcd.setPixel(i+1,j+3); lcd.setPixel(i,j-1); lcd.setPixel(i-2,j+2); lcd.setPixel(i-1,j+2); lcd.setPixel(i+2,j+2); lcd.setPixel(i+1,j+2); lcd.setPixel(i-1,j+1);//Direction dependent (left and right) lcd.setPixel(i-2,j+1);//Direction dependent (left and right) lcd.setPixel(i-3,j+1);//Direction dependent (left and right) lcd.setPixel(i-1,j-1);//Direction dependent (left and right) lcd.setPixel(i-2,j-1);//Direction dependent (left and right) lcd.setPixel(i-3,j-1);//Direction dependent (left and right) lcd.setPixel(i-1,j-2); lcd.setPixel(i-2,j-2); lcd.setPixel(i+1,j-2); lcd.setPixel(i+2,j-2); lcd.setPixel(i+1,j-3); lcd.setPixel(i-1,j-3); } } void Boundarycheck() { if (i<3) { i=3; } if (j<3) { j=3; } if (j>44) { j=44; } if (i>80) { i=80; } } int main() { lcd.init(); calibrateJoystick(); // get centred values of joystick pollJoystick.attach(&updateJoystick,1.0/10.0); // read joystick 10 times per second while(1) { lcd.clear(); drawPacman(); drawMap(); drawCoin(); checkRight(); checkLeft(); checkDown(); checkUp(); Joystickcheck(); Boundarycheck(); checkCoin(); lcd.refresh(); } }