My ELEC2645 Project Zhou Jingyuan 200986046

Dependencies:   ZhouJingyuan mbed

Committer:
Iverson66
Date:
Thu May 05 12:39:59 2016 +0000
Revision:
0:c5868f162227
Zhou JIngyuan 200986046

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Iverson66 0:c5868f162227 1 #include "main.h" //headfile
Iverson66 0:c5868f162227 2
Iverson66 0:c5868f162227 3
Iverson66 0:c5868f162227 4 // VCC,SCE,RST,D/C,MOSI,SCLK,LED
Iverson66 0:c5868f162227 5 N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); // connected the LED to the K64F board
Iverson66 0:c5868f162227 6 DigitalIn button(PTB18); // pin of the button connection
Iverson66 0:c5868f162227 7 DigitalIn joystickbutton(PTB11); // pin of the joystickbutton connection
Iverson66 0:c5868f162227 8 AnalogIn xPot(PTB2); //pin of the joystick x point connection
Iverson66 0:c5868f162227 9 AnalogIn yPot(PTB3); //pin of the joystick y point connection
Iverson66 0:c5868f162227 10
Iverson66 0:c5868f162227 11 // timer to regularly read the joystick
Iverson66 0:c5868f162227 12 Ticker pollJoystick;
Iverson66 0:c5868f162227 13
Iverson66 0:c5868f162227 14 // Serial for debug
Iverson66 0:c5868f162227 15 Serial pc(USBTX,USBRX);
Iverson66 0:c5868f162227 16 // create enumerated type (0,1,2,3 etc. for direction)
Iverson66 0:c5868f162227 17 // could be extended for diagonals etc.
Iverson66 0:c5868f162227 18 enum DirectionName {
Iverson66 0:c5868f162227 19 UP,
Iverson66 0:c5868f162227 20 DOWN,
Iverson66 0:c5868f162227 21 LEFT,
Iverson66 0:c5868f162227 22 RIGHT,
Iverson66 0:c5868f162227 23 CENTRE,
Iverson66 0:c5868f162227 24 UNKNOWN
Iverson66 0:c5868f162227 25 };
Iverson66 0:c5868f162227 26 // struct for Joystick
Iverson66 0:c5868f162227 27 typedef struct JoyStick Joystick;
Iverson66 0:c5868f162227 28 struct JoyStick {
Iverson66 0:c5868f162227 29 float x; // current x value
Iverson66 0:c5868f162227 30 float x0; // 'centred' x value
Iverson66 0:c5868f162227 31 float y; // current y value
Iverson66 0:c5868f162227 32 float y0; // 'centred' y value
Iverson66 0:c5868f162227 33 int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
Iverson66 0:c5868f162227 34 DirectionName direction; // current direction
Iverson66 0:c5868f162227 35 };
Iverson66 0:c5868f162227 36 // create struct variable
Iverson66 0:c5868f162227 37 Joystick joystick;
Iverson66 0:c5868f162227 38
Iverson66 0:c5868f162227 39 int main()
Iverson66 0:c5868f162227 40 {
Iverson66 0:c5868f162227 41 button.mode(PullDown); //let the button pressed equal to one
Iverson66 0:c5868f162227 42 joystickbutton.mode(PullDown); //let the joystickbutton pressed equal to one
Iverson66 0:c5868f162227 43 lcd.init();
Iverson66 0:c5868f162227 44 // these are default settings so not strictly needed
Iverson66 0:c5868f162227 45 lcd.normalMode(); // normal colour mode
Iverson66 0:c5868f162227 46 lcd.setBrightness(0.5); // put LED backlight on 50%
Iverson66 0:c5868f162227 47 lcd.printString("get the ball",0,0); //write the string on the screen
Iverson66 0:c5868f162227 48 lcd.refresh(); //Refresh display
Iverson66 0:c5868f162227 49 wait(1.0); //set the disappear time is 1s
Iverson66 0:c5868f162227 50 lcd.clear(); // clear display
Iverson66 0:c5868f162227 51 lcd.setBrightness(1.0); // put LED backlight on 50%
Iverson66 0:c5868f162227 52 illustration (); // function call
Iverson66 0:c5868f162227 53 int t=3; //initial constant to quit the loop
Iverson66 0:c5868f162227 54 do
Iverson66 0:c5868f162227 55 {
Iverson66 0:c5868f162227 56 lcd.drawRect(0,0,84,48,2); //draw rectangle picture
Iverson66 0:c5868f162227 57 lcd.drawRect(0,0,10,48,1);
Iverson66 0:c5868f162227 58 lcd.refresh();
Iverson66 0:c5868f162227 59 wait(0.5); //0.5s to disappear
Iverson66 0:c5868f162227 60 lcd.clear();
Iverson66 0:c5868f162227 61 if(button) //check the button is pressed or not
Iverson66 0:c5868f162227 62 {
Iverson66 0:c5868f162227 63 lcd.clear();
Iverson66 0:c5868f162227 64 lcd.printString("Skip",0,0); //write the string which will lose in 1s
Iverson66 0:c5868f162227 65 lcd.refresh();
Iverson66 0:c5868f162227 66 wait(1.0);
Iverson66 0:c5868f162227 67 lcd.clear();
Iverson66 0:c5868f162227 68 break; //get out of the loop
Iverson66 0:c5868f162227 69 }
Iverson66 0:c5868f162227 70 moving (); //function call
Iverson66 0:c5868f162227 71 t--; //t=t-1
Iverson66 0:c5868f162227 72 }while(t>=0); //when t=-1 jump outof the loop
Iverson66 0:c5868f162227 73 //write string lost in 1s
Iverson66 0:c5868f162227 74 lcd.printString("Warning:",0,0);
Iverson66 0:c5868f162227 75 lcd.printString("The practice",0,0);
Iverson66 0:c5868f162227 76 lcd.printString("is finished",0,2);
Iverson66 0:c5868f162227 77 lcd.refresh();
Iverson66 0:c5868f162227 78 wait(1.0);
Iverson66 0:c5868f162227 79 lcd.clear();
Iverson66 0:c5868f162227 80 while (1)
Iverson66 0:c5868f162227 81 {
Iverson66 0:c5868f162227 82 srand(time(NULL)); //let the value achieved changes each time
Iverson66 0:c5868f162227 83 int u = rand()%(2-1+1)+1; //get random value between 1 and 2
Iverson66 0:c5868f162227 84 //draw the picture disappears in 0.5s
Iverson66 0:c5868f162227 85 lcd.drawRect(0,0,84,48,2);
Iverson66 0:c5868f162227 86 lcd.drawRect(0,0,10,48,1);
Iverson66 0:c5868f162227 87 lcd.refresh();
Iverson66 0:c5868f162227 88 wait(0.5);
Iverson66 0:c5868f162227 89 lcd.clear();
Iverson66 0:c5868f162227 90 moving2(); //function call
Iverson66 0:c5868f162227 91 if(r==0) //get global constant r
Iverson66 0:c5868f162227 92 {
Iverson66 0:c5868f162227 93 if (q>=10) //use the if statement to judge the statement
Iverson66 0:c5868f162227 94 {
Iverson66 0:c5868f162227 95 if(u==1)
Iverson66 0:c5868f162227 96 {
Iverson66 0:c5868f162227 97 lcd.clear();
Iverson66 0:c5868f162227 98 lcd.printString("Hold joystick",0,2);
Iverson66 0:c5868f162227 99 wait(2.0);
Iverson66 0:c5868f162227 100 lcd.clear();
Iverson66 0:c5868f162227 101 if (joystickbutton) // check the joystickbutton is pressed or not
Iverson66 0:c5868f162227 102 q=q-5; //if it is ture, the global constant will reduce five each time
Iverson66 0:c5868f162227 103 }
Iverson66 0:c5868f162227 104 }
Iverson66 0:c5868f162227 105 else if (q<10) //check the value of q
Iverson66 0:c5868f162227 106 {
Iverson66 0:c5868f162227 107 lcd.clear();
Iverson66 0:c5868f162227 108 lcd.printString("Congratulation",0,2); //write string
Iverson66 0:c5868f162227 109 lcd.refresh();
Iverson66 0:c5868f162227 110 break; //jump out of the loop
Iverson66 0:c5868f162227 111 }
Iverson66 0:c5868f162227 112 }
Iverson66 0:c5868f162227 113 else
Iverson66 0:c5868f162227 114 {
Iverson66 0:c5868f162227 115 lcd.clear();
Iverson66 0:c5868f162227 116 lcd.printString("lose the game",0,2); //write string
Iverson66 0:c5868f162227 117 lcd.refresh();
Iverson66 0:c5868f162227 118 break; //jump out of the loop
Iverson66 0:c5868f162227 119 }
Iverson66 0:c5868f162227 120 }
Iverson66 0:c5868f162227 121 }
Iverson66 0:c5868f162227 122 // the function to show the basic information of the game
Iverson66 0:c5868f162227 123 void illustration ()
Iverson66 0:c5868f162227 124 {
Iverson66 0:c5868f162227 125 //show how to control the people
Iverson66 0:c5868f162227 126 lcd.printString("joystick to",0,0);
Iverson66 0:c5868f162227 127 lcd.printString("control people",0,1);
Iverson66 0:c5868f162227 128 //draw circle and draw line to built a people
Iverson66 0:c5868f162227 129 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 130 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 131 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 132 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 133 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 134 lcd.refresh();
Iverson66 0:c5868f162227 135 wait(3.0);
Iverson66 0:c5868f162227 136 lcd.clear();
Iverson66 0:c5868f162227 137 //show the way to win
Iverson66 0:c5868f162227 138 lcd.printString("Use hand to",0,0);
Iverson66 0:c5868f162227 139 lcd.printString("get the ball",0,1);
Iverson66 0:c5868f162227 140 lcd.drawCircle(20,23,2,1);
Iverson66 0:c5868f162227 141 lcd.drawCircle(25,27,1,1);
Iverson66 0:c5868f162227 142 lcd.drawCircle(40,27,1,1);
Iverson66 0:c5868f162227 143 lcd.drawLine(20,25,20,30,1);
Iverson66 0:c5868f162227 144 lcd.drawLine(20,27,23,27,1);
Iverson66 0:c5868f162227 145 lcd.drawLine(20,30,18,32,1);
Iverson66 0:c5868f162227 146 lcd.drawLine(20,30,22,32,1);
Iverson66 0:c5868f162227 147 lcd.refresh();
Iverson66 0:c5868f162227 148 wait(3.0);
Iverson66 0:c5868f162227 149 lcd.clear();
Iverson66 0:c5868f162227 150 //show the condition of the failure
Iverson66 0:c5868f162227 151 lcd.printString("if the ball",0,0);
Iverson66 0:c5868f162227 152 lcd.printString("touch the wall",0,1);
Iverson66 0:c5868f162227 153 lcd.printString("will lose",0,2);
Iverson66 0:c5868f162227 154 lcd.drawRect(0,30,10,20,1);
Iverson66 0:c5868f162227 155 lcd.drawCircle(15,40,1,1);
Iverson66 0:c5868f162227 156 lcd.refresh();
Iverson66 0:c5868f162227 157 wait(3.0);
Iverson66 0:c5868f162227 158 lcd.clear();
Iverson66 0:c5868f162227 159 //get into the game
Iverson66 0:c5868f162227 160 lcd.printString("practice",0,0);
Iverson66 0:c5868f162227 161 lcd.printString("Hold button",0,1);
Iverson66 0:c5868f162227 162 lcd.printString("to skip",0,3);
Iverson66 0:c5868f162227 163 lcd.refresh();
Iverson66 0:c5868f162227 164 wait(2.0);
Iverson66 0:c5868f162227 165 lcd.clear();
Iverson66 0:c5868f162227 166 }
Iverson66 0:c5868f162227 167 // use function to find the randon value of the ball x coordinate from 70 to 80
Iverson66 0:c5868f162227 168 int setpointx (int x1)
Iverson66 0:c5868f162227 169 {
Iverson66 0:c5868f162227 170 srand(time(NULL));
Iverson66 0:c5868f162227 171 x1 = rand()%(80-70+1)+70;
Iverson66 0:c5868f162227 172 return x1; //return an integer to transfer the value to the other function
Iverson66 0:c5868f162227 173 }
Iverson66 0:c5868f162227 174 // use function to find the randon value of the enemy y coordinate from 15 to 30
Iverson66 0:c5868f162227 175 int setpointy (int y1)
Iverson66 0:c5868f162227 176 {
Iverson66 0:c5868f162227 177 srand(time(NULL));
Iverson66 0:c5868f162227 178 y1 = rand()%(30-15+1)+15;
Iverson66 0:c5868f162227 179 return y1; //return an integer to transfer the value to the other function
Iverson66 0:c5868f162227 180 }
Iverson66 0:c5868f162227 181
Iverson66 0:c5868f162227 182 void moving ()
Iverson66 0:c5868f162227 183 {
Iverson66 0:c5868f162227 184 //get the value of the x coordinate and y coordinate of the ball point
Iverson66 0:c5868f162227 185 int a,b;
Iverson66 0:c5868f162227 186 int a1=setpointx(a);
Iverson66 0:c5868f162227 187 int b1=setpointy(b);
Iverson66 0:c5868f162227 188 calibrateJoystick(); // get centred values of joystick
Iverson66 0:c5868f162227 189 pollJoystick.attach(&updateJoystick,0.5); // read joystick 10 times per second
Iverson66 0:c5868f162227 190 while(1){
Iverson66 0:c5868f162227 191 //draw picture
Iverson66 0:c5868f162227 192 lcd.drawRect(0,0,84,48,2);
Iverson66 0:c5868f162227 193 lcd.drawRect(0,0,10,48,1);
Iverson66 0:c5868f162227 194 lcd.drawCircle(a1,b1,1,1);
Iverson66 0:c5868f162227 195 if (printFlag) { // if flag set, clear flag and print joystick values to serial port
Iverson66 0:c5868f162227 196 printFlag = 0;
Iverson66 0:c5868f162227 197 pc.printf("x = %f y = %f button = %d ",joystick.x,joystick.y,joystick.button);
Iverson66 0:c5868f162227 198 // check joystick direction
Iverson66 0:c5868f162227 199 if (joystick.direction == UP)
Iverson66 0:c5868f162227 200 {
Iverson66 0:c5868f162227 201 if(y>10) //use the if statement to make the border of the people moving
Iverson66 0:c5868f162227 202 {
Iverson66 0:c5868f162227 203 //delete the old picture
Iverson66 0:c5868f162227 204 lcd.drawCircle(x,y,2,2);
Iverson66 0:c5868f162227 205 lcd.drawLine(x,y+2,x,y+7,2);
Iverson66 0:c5868f162227 206 lcd.drawLine(x,y+4,x+3,y+4,2);
Iverson66 0:c5868f162227 207 lcd.drawLine(x,y+7,x-2,y+9,2);
Iverson66 0:c5868f162227 208 lcd.drawLine(x,y+7,x+2,y+9,2);
Iverson66 0:c5868f162227 209 // get the new picture
Iverson66 0:c5868f162227 210 y=y-1; //change he value of the y coordinate
Iverson66 0:c5868f162227 211 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 212 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 213 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 214 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 215 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 216 lcd.refresh();
Iverson66 0:c5868f162227 217 }
Iverson66 0:c5868f162227 218 else
Iverson66 0:c5868f162227 219 {
Iverson66 0:c5868f162227 220 // out of the border, just stay
Iverson66 0:c5868f162227 221 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 222 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 223 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 224 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 225 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 226 lcd.refresh();
Iverson66 0:c5868f162227 227 }
Iverson66 0:c5868f162227 228 }
Iverson66 0:c5868f162227 229 if (joystick.direction == DOWN)
Iverson66 0:c5868f162227 230 {
Iverson66 0:c5868f162227 231 //the same use of the first one:joystick.direction == UP
Iverson66 0:c5868f162227 232 if(y<40)
Iverson66 0:c5868f162227 233 {
Iverson66 0:c5868f162227 234 lcd.drawCircle(x,y,2,2);
Iverson66 0:c5868f162227 235 lcd.drawLine(x,y+2,x,y+7,2);
Iverson66 0:c5868f162227 236 lcd.drawLine(x,y+4,x+3,y+4,2);
Iverson66 0:c5868f162227 237 lcd.drawLine(x,y+7,x-2,y+9,2);
Iverson66 0:c5868f162227 238 lcd.drawLine(x,y+7,x+2,y+9,2);
Iverson66 0:c5868f162227 239 y=y+1;
Iverson66 0:c5868f162227 240 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 241 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 242 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 243 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 244 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 245 lcd.refresh();
Iverson66 0:c5868f162227 246 }
Iverson66 0:c5868f162227 247 else
Iverson66 0:c5868f162227 248 {
Iverson66 0:c5868f162227 249 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 250 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 251 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 252 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 253 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 254 lcd.refresh();
Iverson66 0:c5868f162227 255 }
Iverson66 0:c5868f162227 256
Iverson66 0:c5868f162227 257 }
Iverson66 0:c5868f162227 258 if (joystick.direction == LEFT) {//the same use of the first one:joystick.direction == UP
Iverson66 0:c5868f162227 259 if(x<60)
Iverson66 0:c5868f162227 260 {
Iverson66 0:c5868f162227 261 lcd.drawCircle(x,y,2,2);
Iverson66 0:c5868f162227 262 lcd.drawLine(x,y+2,x,y+7,2);
Iverson66 0:c5868f162227 263 lcd.drawLine(x,y+4,x+3,y+4,2);
Iverson66 0:c5868f162227 264 lcd.drawLine(x,y+7,x-2,y+9,2);
Iverson66 0:c5868f162227 265 lcd.drawLine(x,y+7,x+2,y+9,2);
Iverson66 0:c5868f162227 266 x=x+1;
Iverson66 0:c5868f162227 267 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 268 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 269 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 270 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 271 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 272 lcd.refresh();
Iverson66 0:c5868f162227 273 }
Iverson66 0:c5868f162227 274 else
Iverson66 0:c5868f162227 275 {
Iverson66 0:c5868f162227 276 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 277 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 278 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 279 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 280 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 281 lcd.refresh();
Iverson66 0:c5868f162227 282 }
Iverson66 0:c5868f162227 283 }
Iverson66 0:c5868f162227 284 if (joystick.direction == RIGHT) {//the same use of the first one:joystick.direction == UP
Iverson66 0:c5868f162227 285 if(x>q+5)
Iverson66 0:c5868f162227 286 {
Iverson66 0:c5868f162227 287 lcd.drawCircle(x,y,2,2);
Iverson66 0:c5868f162227 288 lcd.drawLine(x,y+2,x,y+7,2);
Iverson66 0:c5868f162227 289 lcd.drawLine(x,y+4,x+3,y+4,2);
Iverson66 0:c5868f162227 290 lcd.drawLine(x,y+7,x-2,y+9,2);
Iverson66 0:c5868f162227 291 lcd.drawLine(x,y+7,x+2,y+9,2);
Iverson66 0:c5868f162227 292 x=x-1;
Iverson66 0:c5868f162227 293 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 294 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 295 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 296 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 297 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 298 lcd.refresh();
Iverson66 0:c5868f162227 299 }
Iverson66 0:c5868f162227 300 else
Iverson66 0:c5868f162227 301 {
Iverson66 0:c5868f162227 302 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 303 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 304 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 305 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 306 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 307 lcd.refresh();
Iverson66 0:c5868f162227 308 }
Iverson66 0:c5868f162227 309 }
Iverson66 0:c5868f162227 310 if (joystick.direction == CENTRE) {//no changing while the direction in centre, so just stay
Iverson66 0:c5868f162227 311 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 312 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 313 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 314 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 315 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 316 lcd.refresh();
Iverson66 0:c5868f162227 317 }
Iverson66 0:c5868f162227 318 if (joystick.direction == UNKNOWN) {//no changing while the direction unknown, so just stay
Iverson66 0:c5868f162227 319 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 320 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 321 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 322 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 323 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 324 lcd.refresh();
Iverson66 0:c5868f162227 325 }
Iverson66 0:c5868f162227 326 }
Iverson66 0:c5868f162227 327 //use if-else if statement to recognise the different situation
Iverson66 0:c5868f162227 328 if ((a1>=10)&&((a1!=x+3)||(b1!=y+4))) {//if the ball don't touch, then keep moving
Iverson66 0:c5868f162227 329 lcd.drawCircle(a1,b1,1,2);
Iverson66 0:c5868f162227 330 a1--;
Iverson66 0:c5868f162227 331 } else if ((a1==x+3) && (b1==y+4) && (a1>=10)) { // if the ball touch the people hand,stop moving and
Iverson66 0:c5868f162227 332 lcd.clear(); // get out of the loop, and get a new ball
Iverson66 0:c5868f162227 333 break;
Iverson66 0:c5868f162227 334 } else if (a1<=10) { // if the ball touch the block, then show sentence to tell the player and
Iverson66 0:c5868f162227 335 lcd.clear(); // get out of the loop, and get a new ball
Iverson66 0:c5868f162227 336 lcd.printString("lose the game",0,0);
Iverson66 0:c5868f162227 337 lcd.refresh();
Iverson66 0:c5868f162227 338 wait(2.0);
Iverson66 0:c5868f162227 339 break;
Iverson66 0:c5868f162227 340 }
Iverson66 0:c5868f162227 341 wait(0.5);
Iverson66 0:c5868f162227 342 }
Iverson66 0:c5868f162227 343 }
Iverson66 0:c5868f162227 344
Iverson66 0:c5868f162227 345 void moving2 ()
Iverson66 0:c5868f162227 346 {
Iverson66 0:c5868f162227 347 //same use of the function moving
Iverson66 0:c5868f162227 348 int a,b;
Iverson66 0:c5868f162227 349 int a1=setpointx(a);
Iverson66 0:c5868f162227 350 int b1=setpointy(b);
Iverson66 0:c5868f162227 351 calibrateJoystick(); // get centred values of joystick
Iverson66 0:c5868f162227 352 pollJoystick.attach(&updateJoystick,0.5); // read joystick 10 times per second
Iverson66 0:c5868f162227 353 while(1)
Iverson66 0:c5868f162227 354 {
Iverson66 0:c5868f162227 355 lcd.drawRect(0,0,84,48,2);
Iverson66 0:c5868f162227 356 lcd.drawRect(0,0,q,48,1);
Iverson66 0:c5868f162227 357 lcd.drawLine(50,0,50,48,1);
Iverson66 0:c5868f162227 358 lcd.drawCircle(a1,b1,1,1);
Iverson66 0:c5868f162227 359 lcd.refresh();
Iverson66 0:c5868f162227 360 if (printFlag) { // if flag set, clear flag and print joystick values to serial port
Iverson66 0:c5868f162227 361 printFlag = 0;
Iverson66 0:c5868f162227 362 pc.printf("x = %f y = %f button = %d ",joystick.x,joystick.y,joystick.button);
Iverson66 0:c5868f162227 363 // check joystick direction
Iverson66 0:c5868f162227 364 if (joystick.direction == UP) // the same way to draw the prople and the principle of the people moving
Iverson66 0:c5868f162227 365 {
Iverson66 0:c5868f162227 366 if(y>10)
Iverson66 0:c5868f162227 367 {
Iverson66 0:c5868f162227 368 lcd.drawCircle(x,y,2,2);
Iverson66 0:c5868f162227 369 lcd.drawLine(x,y+2,x,y+7,2);
Iverson66 0:c5868f162227 370 lcd.drawLine(x,y+4,x+3,y+4,2);
Iverson66 0:c5868f162227 371 lcd.drawLine(x,y+7,x-2,y+9,2);
Iverson66 0:c5868f162227 372 lcd.drawLine(x,y+7,x+2,y+9,2);
Iverson66 0:c5868f162227 373 y=y-1;
Iverson66 0:c5868f162227 374 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 375 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 376 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 377 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 378 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 379 lcd.refresh();
Iverson66 0:c5868f162227 380 }
Iverson66 0:c5868f162227 381 else
Iverson66 0:c5868f162227 382 {
Iverson66 0:c5868f162227 383 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 384 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 385 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 386 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 387 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 388 lcd.refresh();
Iverson66 0:c5868f162227 389 }
Iverson66 0:c5868f162227 390 }
Iverson66 0:c5868f162227 391 if (joystick.direction == DOWN)
Iverson66 0:c5868f162227 392 { // same as the function moving
Iverson66 0:c5868f162227 393 if(y<40)
Iverson66 0:c5868f162227 394 {
Iverson66 0:c5868f162227 395 lcd.drawCircle(x,y,2,2);
Iverson66 0:c5868f162227 396 lcd.drawLine(x,y+2,x,y+7,2);
Iverson66 0:c5868f162227 397 lcd.drawLine(x,y+4,x+3,y+4,2);
Iverson66 0:c5868f162227 398 lcd.drawLine(x,y+7,x-2,y+9,2);
Iverson66 0:c5868f162227 399 lcd.drawLine(x,y+7,x+2,y+9,2);
Iverson66 0:c5868f162227 400 y=y+1;
Iverson66 0:c5868f162227 401 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 402 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 403 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 404 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 405 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 406 lcd.refresh();
Iverson66 0:c5868f162227 407 }
Iverson66 0:c5868f162227 408 else
Iverson66 0:c5868f162227 409 {
Iverson66 0:c5868f162227 410 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 411 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 412 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 413 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 414 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 415 lcd.refresh();
Iverson66 0:c5868f162227 416 }
Iverson66 0:c5868f162227 417
Iverson66 0:c5868f162227 418 }
Iverson66 0:c5868f162227 419 if (joystick.direction == LEFT) {
Iverson66 0:c5868f162227 420 if(x<75)
Iverson66 0:c5868f162227 421 { // same as the function moving
Iverson66 0:c5868f162227 422 lcd.drawCircle(x,y,2,2);
Iverson66 0:c5868f162227 423 lcd.drawLine(x,y+2,x,y+7,2);
Iverson66 0:c5868f162227 424 lcd.drawLine(x,y+4,x+3,y+4,2);
Iverson66 0:c5868f162227 425 lcd.drawLine(x,y+7,x-2,y+9,2);
Iverson66 0:c5868f162227 426 lcd.drawLine(x,y+7,x+2,y+9,2);
Iverson66 0:c5868f162227 427 x=x+1;
Iverson66 0:c5868f162227 428 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 429 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 430 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 431 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 432 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 433 lcd.refresh();
Iverson66 0:c5868f162227 434 }
Iverson66 0:c5868f162227 435 else
Iverson66 0:c5868f162227 436 {
Iverson66 0:c5868f162227 437 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 438 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 439 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 440 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 441 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 442 lcd.refresh();
Iverson66 0:c5868f162227 443 }
Iverson66 0:c5868f162227 444 }
Iverson66 0:c5868f162227 445 if (joystick.direction == RIGHT) {
Iverson66 0:c5868f162227 446 if(x>50)
Iverson66 0:c5868f162227 447 { // same as the function moving
Iverson66 0:c5868f162227 448 lcd.drawCircle(x,y,2,2);
Iverson66 0:c5868f162227 449 lcd.drawLine(x,y+2,x,y+7,2);
Iverson66 0:c5868f162227 450 lcd.drawLine(x,y+4,x+3,y+4,2);
Iverson66 0:c5868f162227 451 lcd.drawLine(x,y+7,x-2,y+9,2);
Iverson66 0:c5868f162227 452 lcd.drawLine(x,y+7,x+2,y+9,2);
Iverson66 0:c5868f162227 453 x=x-1;
Iverson66 0:c5868f162227 454 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 455 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 456 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 457 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 458 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 459 lcd.refresh();
Iverson66 0:c5868f162227 460 }
Iverson66 0:c5868f162227 461 else
Iverson66 0:c5868f162227 462 {
Iverson66 0:c5868f162227 463 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 464 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 465 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 466 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 467 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 468 lcd.refresh();
Iverson66 0:c5868f162227 469 }
Iverson66 0:c5868f162227 470 }
Iverson66 0:c5868f162227 471 if (joystick.direction == CENTRE)
Iverson66 0:c5868f162227 472 { // same as the function moving
Iverson66 0:c5868f162227 473 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 474 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 475 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 476 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 477 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 478 lcd.refresh();
Iverson66 0:c5868f162227 479 }
Iverson66 0:c5868f162227 480 if (joystick.direction == UNKNOWN)
Iverson66 0:c5868f162227 481 { // same as the function moving
Iverson66 0:c5868f162227 482 lcd.drawCircle(x,y,2,1);
Iverson66 0:c5868f162227 483 lcd.drawLine(x,y+2,x,y+7,1);
Iverson66 0:c5868f162227 484 lcd.drawLine(x,y+4,x+3,y+4,1);
Iverson66 0:c5868f162227 485 lcd.drawLine(x,y+7,x-2,y+9,1);
Iverson66 0:c5868f162227 486 lcd.drawLine(x,y+7,x+2,y+9,1);
Iverson66 0:c5868f162227 487 lcd.refresh();
Iverson66 0:c5868f162227 488 }
Iverson66 0:c5868f162227 489 }
Iverson66 0:c5868f162227 490 if ((a1>50)&&((a1!=x+3)||(b1!=y+4))) {// same as the function moving
Iverson66 0:c5868f162227 491 lcd.drawCircle(a1,b1,1,2);
Iverson66 0:c5868f162227 492 a1--;
Iverson66 0:c5868f162227 493 } else if ((a1==x+3) && (b1==y+4) && (a1>=10)) { // same as the function moving
Iverson66 0:c5868f162227 494 lcd.clear();
Iverson66 0:c5868f162227 495 break;
Iverson66 0:c5868f162227 496 } else if (a1<=50) {
Iverson66 0:c5868f162227 497 lcd.clear();
Iverson66 0:c5868f162227 498 r=1; // set global constant r=1 to jump the while(1) loop in the int main function
Iverson66 0:c5868f162227 499 wait(2.0);
Iverson66 0:c5868f162227 500 break;
Iverson66 0:c5868f162227 501 }
Iverson66 0:c5868f162227 502 wait(0.5);
Iverson66 0:c5868f162227 503 }
Iverson66 0:c5868f162227 504 }
Iverson66 0:c5868f162227 505 // read default positions of the joystick to calibrate later readings
Iverson66 0:c5868f162227 506 void calibrateJoystick()
Iverson66 0:c5868f162227 507 {
Iverson66 0:c5868f162227 508
Iverson66 0:c5868f162227 509 // must not move during calibration
Iverson66 0:c5868f162227 510 joystick.x0 = xPot; // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
Iverson66 0:c5868f162227 511 joystick.y0 = yPot;
Iverson66 0:c5868f162227 512 }
Iverson66 0:c5868f162227 513 void updateJoystick()
Iverson66 0:c5868f162227 514 {
Iverson66 0:c5868f162227 515 // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
Iverson66 0:c5868f162227 516 joystick.x = xPot - joystick.x0;
Iverson66 0:c5868f162227 517 joystick.y = yPot - joystick.y0;
Iverson66 0:c5868f162227 518 // read button state
Iverson66 0:c5868f162227 519 joystick.button = button;
Iverson66 0:c5868f162227 520
Iverson66 0:c5868f162227 521 // calculate direction depending on x,y values
Iverson66 0:c5868f162227 522 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
Iverson66 0:c5868f162227 523 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
Iverson66 0:c5868f162227 524 joystick.direction = CENTRE;
Iverson66 0:c5868f162227 525 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
Iverson66 0:c5868f162227 526 joystick.direction = UP;
Iverson66 0:c5868f162227 527 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
Iverson66 0:c5868f162227 528 joystick.direction = DOWN;
Iverson66 0:c5868f162227 529 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
Iverson66 0:c5868f162227 530 joystick.direction = RIGHT;
Iverson66 0:c5868f162227 531 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
Iverson66 0:c5868f162227 532 joystick.direction = LEFT;
Iverson66 0:c5868f162227 533 } else {
Iverson66 0:c5868f162227 534 joystick.direction = UNKNOWN;
Iverson66 0:c5868f162227 535 }
Iverson66 0:c5868f162227 536
Iverson66 0:c5868f162227 537 // set flag for printing
Iverson66 0:c5868f162227 538 printFlag = 1;
Iverson66 0:c5868f162227 539 }
Iverson66 0:c5868f162227 540
Iverson66 0:c5868f162227 541
Iverson66 0:c5868f162227 542
Iverson66 0:c5868f162227 543
Iverson66 0:c5868f162227 544