Simple program using display with KS0108 drivers. School project.

Dependencies:   KS0108 MMA8451Q mbed

Committer:
standabassman
Date:
Sun Jan 18 12:43:15 2015 +0000
Revision:
0:d310c6e0dcee
complete version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
standabassman 0:d310c6e0dcee 1 #include "mbed.h"
standabassman 0:d310c6e0dcee 2 #include "KS0108.h"
standabassman 0:d310c6e0dcee 3 #include "MMA8451Q.h"
standabassman 0:d310c6e0dcee 4
standabassman 0:d310c6e0dcee 5 #include "SystemFont5x7.h"
standabassman 0:d310c6e0dcee 6
standabassman 0:d310c6e0dcee 7 #define MMA8451_I2C_ADDRESS (0x1d<<1)
standabassman 0:d310c6e0dcee 8 #define carWidth 6
standabassman 0:d310c6e0dcee 9 #define carLength 12
standabassman 0:d310c6e0dcee 10 #define obstackleWidth 10
standabassman 0:d310c6e0dcee 11
standabassman 0:d310c6e0dcee 12 KS0108 display(PTC16, PTC17, PTA16, PTD6, PTC13, PTC12, PTC11, PTC10, PTC6, PTC5, PTC4, PTC3, PTC0, PTC7);
standabassman 0:d310c6e0dcee 13
standabassman 0:d310c6e0dcee 14 DigitalOut K(PTD7);
standabassman 0:d310c6e0dcee 15
standabassman 0:d310c6e0dcee 16 int carPositionX = 0;
standabassman 0:d310c6e0dcee 17 int carPositionY = 0;
standabassman 0:d310c6e0dcee 18 int obstacklePosX = 0;
standabassman 0:d310c6e0dcee 19 int obstacklePosY = 0;
standabassman 0:d310c6e0dcee 20 int startFlag = 0;
standabassman 0:d310c6e0dcee 21 int obstackleFlag = 0;
standabassman 0:d310c6e0dcee 22
standabassman 0:d310c6e0dcee 23 void initRoad()
standabassman 0:d310c6e0dcee 24 {
standabassman 0:d310c6e0dcee 25 display.Line(0,0,127,0, BLACK);
standabassman 0:d310c6e0dcee 26 display.Line(0,1,127,1, BLACK);
standabassman 0:d310c6e0dcee 27 display.Line(0,62,127,62, BLACK);
standabassman 0:d310c6e0dcee 28 display.Line(0,63,127,63, BLACK);
standabassman 0:d310c6e0dcee 29 }
standabassman 0:d310c6e0dcee 30
standabassman 0:d310c6e0dcee 31 void initCar()
standabassman 0:d310c6e0dcee 32 {
standabassman 0:d310c6e0dcee 33 display.FullRectangle(0,29,11,34, BLACK);
standabassman 0:d310c6e0dcee 34 carPositionX = 0;
standabassman 0:d310c6e0dcee 35 carPositionY = 29;
standabassman 0:d310c6e0dcee 36 }
standabassman 0:d310c6e0dcee 37
standabassman 0:d310c6e0dcee 38 void moveCar(int flag)
standabassman 0:d310c6e0dcee 39 {
standabassman 0:d310c6e0dcee 40 int speed = 4;
standabassman 0:d310c6e0dcee 41 switch(flag)
standabassman 0:d310c6e0dcee 42 {
standabassman 0:d310c6e0dcee 43 case 1:
standabassman 0:d310c6e0dcee 44 display.FullRectangle(carPositionX,carPositionY,carPositionX+11,carPositionY+5, WHITE);
standabassman 0:d310c6e0dcee 45 carPositionY = carPositionY+speed;
standabassman 0:d310c6e0dcee 46 display.FullRectangle(carPositionX,carPositionY,carPositionX+11,carPositionY+5, BLACK);
standabassman 0:d310c6e0dcee 47 break;
standabassman 0:d310c6e0dcee 48 case 2:
standabassman 0:d310c6e0dcee 49 display.FullRectangle(carPositionX,carPositionY,carPositionX+11,carPositionY+5, WHITE);
standabassman 0:d310c6e0dcee 50 carPositionY = carPositionY-speed;
standabassman 0:d310c6e0dcee 51 display.FullRectangle(carPositionX,carPositionY,carPositionX+11,carPositionY+5, BLACK);
standabassman 0:d310c6e0dcee 52 break;
standabassman 0:d310c6e0dcee 53 case 3:
standabassman 0:d310c6e0dcee 54 display.FullRectangle(carPositionX,carPositionY,carPositionX+11,carPositionY+5, WHITE);
standabassman 0:d310c6e0dcee 55 carPositionX = carPositionX+speed;
standabassman 0:d310c6e0dcee 56 display.FullRectangle(carPositionX,carPositionY,carPositionX+11,carPositionY+5, BLACK);
standabassman 0:d310c6e0dcee 57 break;
standabassman 0:d310c6e0dcee 58 case 4:
standabassman 0:d310c6e0dcee 59 display.FullRectangle(carPositionX,carPositionY,carPositionX+11,carPositionY+5, WHITE);
standabassman 0:d310c6e0dcee 60 carPositionX = carPositionX-speed;
standabassman 0:d310c6e0dcee 61 display.FullRectangle(carPositionX,carPositionY,carPositionX+11,carPositionY+5, BLACK);
standabassman 0:d310c6e0dcee 62 break;
standabassman 0:d310c6e0dcee 63 }
standabassman 0:d310c6e0dcee 64 }
standabassman 0:d310c6e0dcee 65
standabassman 0:d310c6e0dcee 66 void checkColision()
standabassman 0:d310c6e0dcee 67 {
standabassman 0:d310c6e0dcee 68 if((carPositionY<obstacklePosY)&&(carPositionX+12>obstacklePosX)||(carPositionY>obstacklePosY+10)&&(carPositionX+12>obstacklePosX))
standabassman 0:d310c6e0dcee 69 {
standabassman 0:d310c6e0dcee 70 startFlag = 3;
standabassman 0:d310c6e0dcee 71 }
standabassman 0:d310c6e0dcee 72 }
standabassman 0:d310c6e0dcee 73
standabassman 0:d310c6e0dcee 74 void initObstackle()
standabassman 0:d310c6e0dcee 75 {
standabassman 0:d310c6e0dcee 76 display.FullRectangle(120,3,127,27, BLACK);
standabassman 0:d310c6e0dcee 77 display.FullRectangle(120,37,127,60, BLACK);
standabassman 0:d310c6e0dcee 78 obstacklePosX = 120;
standabassman 0:d310c6e0dcee 79 obstacklePosY = 27;
standabassman 0:d310c6e0dcee 80 obstackleFlag = 1;
standabassman 0:d310c6e0dcee 81 }
standabassman 0:d310c6e0dcee 82
standabassman 0:d310c6e0dcee 83 void moveObstackle()
standabassman 0:d310c6e0dcee 84 {
standabassman 0:d310c6e0dcee 85 int speed = 3;
standabassman 0:d310c6e0dcee 86 display.FullRectangle(obstacklePosX,3,obstacklePosX+8,27, WHITE);
standabassman 0:d310c6e0dcee 87 display.FullRectangle(obstacklePosX,37,obstacklePosX+8,60, WHITE);
standabassman 0:d310c6e0dcee 88 obstacklePosX = obstacklePosX-speed;
standabassman 0:d310c6e0dcee 89 if(obstacklePosX != 0)
standabassman 0:d310c6e0dcee 90 {
standabassman 0:d310c6e0dcee 91 display.FullRectangle(obstacklePosX,3,obstacklePosX+8,27, BLACK);
standabassman 0:d310c6e0dcee 92 display.FullRectangle(obstacklePosX,37,obstacklePosX+8,60, BLACK);
standabassman 0:d310c6e0dcee 93 }
standabassman 0:d310c6e0dcee 94 else
standabassman 0:d310c6e0dcee 95 {
standabassman 0:d310c6e0dcee 96 obstackleFlag = 0;
standabassman 0:d310c6e0dcee 97 }
standabassman 0:d310c6e0dcee 98 }
standabassman 0:d310c6e0dcee 99
standabassman 0:d310c6e0dcee 100 void drawCar(int positionX, int positionY)
standabassman 0:d310c6e0dcee 101 {
standabassman 0:d310c6e0dcee 102 display.RoundRectangle(positionX,positionY,64,28,12,BLACK);
standabassman 0:d310c6e0dcee 103 display.RoundRectangle(positionX+35,positionY+3,9,22,3,BLACK);
standabassman 0:d310c6e0dcee 104 display.RoundRectangle(positionX+16,positionY+3,6,22,2,BLACK);
standabassman 0:d310c6e0dcee 105 display.Line(positionX+18,positionY+3,positionX+37,positionY+3, BLACK);
standabassman 0:d310c6e0dcee 106 display.Line(positionX+18,positionY+25,positionX+37,positionY+25, BLACK);
standabassman 0:d310c6e0dcee 107 display.FullRectangle(positionX-1,positionY+2,positionX+5,positionY+26, WHITE);
standabassman 0:d310c6e0dcee 108 display.EmptyRectangle(positionX-1,positionY+2,positionX+5,positionY+26, BLACK);
standabassman 0:d310c6e0dcee 109 display.FullRectangle(positionX+7,positionY+8,positionX+14,positionY+12, BLACK);
standabassman 0:d310c6e0dcee 110 display.FullRectangle(positionX+7,positionY+16,positionX+14,positionY+20, BLACK);
standabassman 0:d310c6e0dcee 111 display.FullRectangle(positionX+24,positionY+8,positionX+33,positionY+12, BLACK);
standabassman 0:d310c6e0dcee 112 display.FullRectangle(positionX+24,positionY+16,positionX+33,positionY+20, BLACK);
standabassman 0:d310c6e0dcee 113 display.FullRectangle(positionX+46,positionY+8,positionX+63,positionY+12, BLACK);
standabassman 0:d310c6e0dcee 114 display.FullRectangle(positionX+46,positionY+16,positionX+63,positionY+20, BLACK);
standabassman 0:d310c6e0dcee 115 }
standabassman 0:d310c6e0dcee 116
standabassman 0:d310c6e0dcee 117 void InitScreen()
standabassman 0:d310c6e0dcee 118 {
standabassman 0:d310c6e0dcee 119 int count = 0;
standabassman 0:d310c6e0dcee 120 int distance = 0;
standabassman 0:d310c6e0dcee 121 int dimensionX = 127;
standabassman 0:d310c6e0dcee 122 int dimensionY = 63;
standabassman 0:d310c6e0dcee 123
standabassman 0:d310c6e0dcee 124 display.ClearScreen();
standabassman 0:d310c6e0dcee 125 display.SelectFont(System5x7,BLACK,ReadData);
standabassman 0:d310c6e0dcee 126 display.GotoXY(0,0);
standabassman 0:d310c6e0dcee 127 display.GotoXY(22,32);
standabassman 0:d310c6e0dcee 128 display.PrintString("RedOut PRESENTS");
standabassman 0:d310c6e0dcee 129 wait(2);
standabassman 0:d310c6e0dcee 130 display.ClearScreen();
standabassman 0:d310c6e0dcee 131 display.GotoXY(0,0);
standabassman 0:d310c6e0dcee 132 display.GotoXY(52,32);
standabassman 0:d310c6e0dcee 133 display.PrintString("GAME");
standabassman 0:d310c6e0dcee 134
standabassman 0:d310c6e0dcee 135 for(count = 0;count<12;count++)
standabassman 0:d310c6e0dcee 136 {
standabassman 0:d310c6e0dcee 137 distance = count*2;
standabassman 0:d310c6e0dcee 138
standabassman 0:d310c6e0dcee 139 display.RoundRectangle(distance,distance,dimensionX,dimensionY,3,BLACK);
standabassman 0:d310c6e0dcee 140 dimensionX = dimensionX - 4;
standabassman 0:d310c6e0dcee 141 dimensionY = dimensionY - 4;
standabassman 0:d310c6e0dcee 142 }
standabassman 0:d310c6e0dcee 143 wait(2);
standabassman 0:d310c6e0dcee 144 display.ClearScreen();
standabassman 0:d310c6e0dcee 145 drawCar(32,13);
standabassman 0:d310c6e0dcee 146 wait_ms(500);
standabassman 0:d310c6e0dcee 147 display.GotoXY(0,0);
standabassman 0:d310c6e0dcee 148 display.GotoXY(45,0);
standabassman 0:d310c6e0dcee 149 display.PrintString("DRIVING");
standabassman 0:d310c6e0dcee 150 wait_ms(800);
standabassman 0:d310c6e0dcee 151 display.GotoXY(0,0);
standabassman 0:d310c6e0dcee 152 display.GotoXY(18,48);
standabassman 0:d310c6e0dcee 153 display.PrintString("MOVE TO CONTINUE");
standabassman 0:d310c6e0dcee 154 }
standabassman 0:d310c6e0dcee 155
standabassman 0:d310c6e0dcee 156 int main()
standabassman 0:d310c6e0dcee 157 {
standabassman 0:d310c6e0dcee 158 float moveX = 0;
standabassman 0:d310c6e0dcee 159 float moveY = 0;
standabassman 0:d310c6e0dcee 160 wait_ms(2000);
standabassman 0:d310c6e0dcee 161 K = 0;
standabassman 0:d310c6e0dcee 162 InitScreen();
standabassman 0:d310c6e0dcee 163 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
standabassman 0:d310c6e0dcee 164 PwmOut rled(LED_RED);
standabassman 0:d310c6e0dcee 165 PwmOut gled(LED_GREEN);
standabassman 0:d310c6e0dcee 166 PwmOut bled(LED_BLUE);
standabassman 0:d310c6e0dcee 167
standabassman 0:d310c6e0dcee 168 while(1)
standabassman 0:d310c6e0dcee 169 {
standabassman 0:d310c6e0dcee 170 moveX = acc.getAccX();
standabassman 0:d310c6e0dcee 171 moveY = acc.getAccY();
standabassman 0:d310c6e0dcee 172
standabassman 0:d310c6e0dcee 173 if(((moveX>0.5)||(moveY>0.5))&&(startFlag==0))
standabassman 0:d310c6e0dcee 174 {
standabassman 0:d310c6e0dcee 175 display.ClearScreen();
standabassman 0:d310c6e0dcee 176 display.GotoXY(0,0);
standabassman 0:d310c6e0dcee 177 display.GotoXY(22,16);
standabassman 0:d310c6e0dcee 178 display.PrintString("ON YOUR SEATS");
standabassman 0:d310c6e0dcee 179 wait(1);
standabassman 0:d310c6e0dcee 180 display.GotoXY(0,0);
standabassman 0:d310c6e0dcee 181 display.GotoXY(22,32);
standabassman 0:d310c6e0dcee 182 display.PrintString("DRIVE STARTING");
standabassman 0:d310c6e0dcee 183 wait(1);
standabassman 0:d310c6e0dcee 184 display.ClearScreen();
standabassman 0:d310c6e0dcee 185 initRoad();
standabassman 0:d310c6e0dcee 186 initCar();
standabassman 0:d310c6e0dcee 187 initObstackle();
standabassman 0:d310c6e0dcee 188 startFlag = 1;
standabassman 0:d310c6e0dcee 189 }
standabassman 0:d310c6e0dcee 190
standabassman 0:d310c6e0dcee 191 if(startFlag == 1)
standabassman 0:d310c6e0dcee 192 {
standabassman 0:d310c6e0dcee 193 checkColision();
standabassman 0:d310c6e0dcee 194 if(obstackleFlag == 1)
standabassman 0:d310c6e0dcee 195 {
standabassman 0:d310c6e0dcee 196 moveObstackle();
standabassman 0:d310c6e0dcee 197 }
standabassman 0:d310c6e0dcee 198 if(obstackleFlag == 0)
standabassman 0:d310c6e0dcee 199 {
standabassman 0:d310c6e0dcee 200 initObstackle();
standabassman 0:d310c6e0dcee 201 }
standabassman 0:d310c6e0dcee 202
standabassman 0:d310c6e0dcee 203 display.GotoXY(0,0);
standabassman 0:d310c6e0dcee 204 if(moveY<(-0.2))
standabassman 0:d310c6e0dcee 205 {
standabassman 0:d310c6e0dcee 206 if(carPositionY < 51)
standabassman 0:d310c6e0dcee 207 {
standabassman 0:d310c6e0dcee 208 moveCar(1);
standabassman 0:d310c6e0dcee 209 }
standabassman 0:d310c6e0dcee 210 }
standabassman 0:d310c6e0dcee 211 if(moveY>0.2)
standabassman 0:d310c6e0dcee 212 {
standabassman 0:d310c6e0dcee 213 if(carPositionY > 6)
standabassman 0:d310c6e0dcee 214 {
standabassman 0:d310c6e0dcee 215 moveCar(2);
standabassman 0:d310c6e0dcee 216 }
standabassman 0:d310c6e0dcee 217 }
standabassman 0:d310c6e0dcee 218 if(moveX>0.2)
standabassman 0:d310c6e0dcee 219 {
standabassman 0:d310c6e0dcee 220 if(carPositionX < (127-carLength))
standabassman 0:d310c6e0dcee 221 {
standabassman 0:d310c6e0dcee 222 moveCar(3);
standabassman 0:d310c6e0dcee 223 }
standabassman 0:d310c6e0dcee 224 }
standabassman 0:d310c6e0dcee 225 if(moveX<(-0.2))
standabassman 0:d310c6e0dcee 226 {
standabassman 0:d310c6e0dcee 227 if(carPositionX > 0)
standabassman 0:d310c6e0dcee 228 {
standabassman 0:d310c6e0dcee 229 moveCar(4);
standabassman 0:d310c6e0dcee 230 }
standabassman 0:d310c6e0dcee 231 }
standabassman 0:d310c6e0dcee 232 }
standabassman 0:d310c6e0dcee 233
standabassman 0:d310c6e0dcee 234 if(startFlag==3)
standabassman 0:d310c6e0dcee 235 {
standabassman 0:d310c6e0dcee 236 display.ClearScreen();
standabassman 0:d310c6e0dcee 237 display.GotoXY(0,0);
standabassman 0:d310c6e0dcee 238 display.GotoXY(22,32);
standabassman 0:d310c6e0dcee 239 display.PrintString("GAME OVER");
standabassman 0:d310c6e0dcee 240 wait(10);
standabassman 0:d310c6e0dcee 241 startFlag = 0;
standabassman 0:d310c6e0dcee 242 InitScreen();
standabassman 0:d310c6e0dcee 243
standabassman 0:d310c6e0dcee 244 }
standabassman 0:d310c6e0dcee 245 rled = 1.0 - abs(acc.getAccX());
standabassman 0:d310c6e0dcee 246 gled = 1.0 - abs(acc.getAccY());
standabassman 0:d310c6e0dcee 247 bled = 1.0 - abs(acc.getAccZ());
standabassman 0:d310c6e0dcee 248 }
standabassman 0:d310c6e0dcee 249 }