“Race Collision” is a one player game in which a truck has to avoid “particles” that appear on the road. By the use of the joystick, the player can guide themselves through the menu system to start the game. The truck is the main element of the game and it can be moved from side to side with the joystick. The road curves randomly from time to time and the player has to be careful to keep the truck within the road boundaries. Particles appear on the screen at random positions and 4 collisions lead to the end of the game.

Dependencies:   ELEC2645_JoystickLCD_LPC1768_2021

Committer:
alex_20
Date:
Thu May 06 12:04:45 2021 +0000
Revision:
9:6f060f495536
Parent:
8:1fc5e14b0db6
Race Collision for ELEC2645

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:be41a15e7a86 1 #ifndef N5110_H
eencae 0:be41a15e7a86 2 #define N5110_H
eencae 0:be41a15e7a86 3
alex_20 3:cbe2dcca5058 4 #include <vector>
alex_20 5:7930d289e7fc 5 #include <cmath>
alex_20 5:7930d289e7fc 6 #include "math.h"
alex_20 3:cbe2dcca5058 7 #include "Utils.h"
alex_20 4:def20a1665d1 8 #include "Vector.h"
eencae 0:be41a15e7a86 9 #include "mbed.h"
eencae 0:be41a15e7a86 10
eencae 0:be41a15e7a86 11 // number of pixels on display
eencae 0:be41a15e7a86 12 #define WIDTH 84
eencae 0:be41a15e7a86 13 #define HEIGHT 48
eencae 0:be41a15e7a86 14 #define BANKS 6
eencae 0:be41a15e7a86 15
eencae 0:be41a15e7a86 16 /// Fill types for 2D shapes
eencae 0:be41a15e7a86 17 enum FillType {
alex_20 4:def20a1665d1 18 FILL_TRANSPARENT, ///< Transparent with outline
alex_20 4:def20a1665d1 19 FILL_BLACK, ///< Filled black
alex_20 4:def20a1665d1 20 FILL_WHITE, ///< Filled white (no outline)
eencae 0:be41a15e7a86 21 };
eencae 0:be41a15e7a86 22
alex_20 3:cbe2dcca5058 23 const static int TYPE_SOLID = 0;
alex_20 3:cbe2dcca5058 24 const static int TYPE_DOTTED = 1;
alex_20 3:cbe2dcca5058 25
eencae 0:be41a15e7a86 26 /** N5110 Class
eencae 0:be41a15e7a86 27 @brief Library for interfacing with Nokia 5110 LCD display (https://www.sparkfun.com/products/10168) using the hardware SPI on the mbed.
eencae 0:be41a15e7a86 28 @brief The display is powered from a GPIO pin meaning it can be controlled via software. The LED backlight is also software-controllable (via PWM pin).
eencae 0:be41a15e7a86 29 @brief Can print characters and strings to the display using the included 5x7 font.
eencae 0:be41a15e7a86 30 @brief The library also implements a screen buffer so that individual pixels on the display (84 x 48) can be set, cleared and read.
eencae 0:be41a15e7a86 31 @brief The library can print primitive shapes (lines, circles, rectangles)
eencae 0:be41a15e7a86 32 @brief Acknowledgements to Chris Yan's Nokia_5110 Library.
eencae 0:be41a15e7a86 33
eencae 0:be41a15e7a86 34 @brief Revision 1.3
eencae 0:be41a15e7a86 35
eencae 0:be41a15e7a86 36 @author Craig A. Evans
eencae 0:be41a15e7a86 37 @date 7th February 2017
eencae 0:be41a15e7a86 38
eencae 0:be41a15e7a86 39 @code
eencae 0:be41a15e7a86 40
eencae 0:be41a15e7a86 41 #include "mbed.h"
eencae 0:be41a15e7a86 42 #include "N5110.h"
eencae 0:be41a15e7a86 43
eencae 0:be41a15e7a86 44 // rows,cols
eencae 0:be41a15e7a86 45 int sprite[8][5] = {
eencae 0:be41a15e7a86 46 { 0,0,1,0,0 },
eencae 0:be41a15e7a86 47 { 0,1,1,1,0 },
eencae 0:be41a15e7a86 48 { 0,0,1,0,0 },
eencae 0:be41a15e7a86 49 { 0,1,1,1,0 },
eencae 0:be41a15e7a86 50 { 1,1,1,1,1 },
eencae 0:be41a15e7a86 51 { 1,1,1,1,1 },
eencae 0:be41a15e7a86 52 { 1,1,0,1,1 },
eencae 0:be41a15e7a86 53 { 1,1,0,1,1 },
eencae 0:be41a15e7a86 54 };
eencae 0:be41a15e7a86 55
eencae 0:be41a15e7a86 56 // VCC,SCE,RST,D/C,MOSI,SCLK,LED
eencae 0:be41a15e7a86 57 //N5110 lcd(p7,p8,p9,p10,p11,p13,p21); // LPC1768 - pwr from GPIO
eencae 0:be41a15e7a86 58 N5110 lcd(p8,p9,p10,p11,p13,p21); // LPC1768 - powered from +3V3 - JP1 in 2/3 position
eencae 0:be41a15e7a86 59 //N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); // K64F - pwr from 3V3
eencae 0:be41a15e7a86 60
eencae 0:be41a15e7a86 61 int main()
eencae 0:be41a15e7a86 62 {
eencae 0:be41a15e7a86 63 // first need to initialise display
eencae 0:be41a15e7a86 64 lcd.init();
eencae 0:be41a15e7a86 65
eencae 0:be41a15e7a86 66 // change set contrast in range 0.0 to 1.0
eencae 0:be41a15e7a86 67 // 0.4 appears to be a good starting point
eencae 0:be41a15e7a86 68 lcd.setContrast(0.4);
eencae 0:be41a15e7a86 69
eencae 0:be41a15e7a86 70 while(1) {
eencae 0:be41a15e7a86 71
eencae 0:be41a15e7a86 72 // these are default settings so not strictly needed
eencae 0:be41a15e7a86 73 lcd.normalMode(); // normal colour mode
eencae 0:be41a15e7a86 74
eencae 0:be41a15e7a86 75 lcd.clear();
eencae 0:be41a15e7a86 76 // x origin, y origin, rows, cols, sprite
eencae 0:be41a15e7a86 77 lcd.drawSprite(20,6,8,5,(int *)sprite);
eencae 0:be41a15e7a86 78 lcd.refresh();
eencae 0:be41a15e7a86 79 wait(5.0);
eencae 0:be41a15e7a86 80
eencae 0:be41a15e7a86 81 lcd.clear(); // clear buffer at start of every loop
eencae 0:be41a15e7a86 82 // can directly print strings at specified co-ordinates (must be less than 84 pixels to fit on display)
eencae 0:be41a15e7a86 83 lcd.printString("Hello, World!",0,0);
eencae 0:be41a15e7a86 84
eencae 0:be41a15e7a86 85 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
eencae 0:be41a15e7a86 86 // so can display a string of a maximum 14 characters in length
eencae 0:be41a15e7a86 87 // or create formatted strings - ensure they aren't more than 14 characters long
eencae 0:be41a15e7a86 88 int temperature = 27;
eencae 0:be41a15e7a86 89 int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer
eencae 0:be41a15e7a86 90 // it is important the format specifier ensures the length will fit in the buffer
eencae 0:be41a15e7a86 91 if (length <= 14) // if string will fit on display (assuming printing at x=0)
eencae 0:be41a15e7a86 92 lcd.printString(buffer,0,1); // display on screen
eencae 0:be41a15e7a86 93
eencae 0:be41a15e7a86 94 float pressure = 1012.3; // same idea with floats
eencae 0:be41a15e7a86 95 length = sprintf(buffer,"P = %.2f mb",pressure);
eencae 0:be41a15e7a86 96 if (length <= 14)
eencae 0:be41a15e7a86 97 lcd.printString(buffer,0,2);
eencae 0:be41a15e7a86 98
eencae 0:be41a15e7a86 99 // can also print individual characters at specified place
eencae 0:be41a15e7a86 100 lcd.printChar('X',5,3);
eencae 0:be41a15e7a86 101
eencae 0:be41a15e7a86 102 // draw a line across the display at y = 40 pixels (origin top-left)
eencae 0:be41a15e7a86 103 for (int i = 0; i < WIDTH; i++) {
eencae 0:be41a15e7a86 104 lcd.setPixel(i,40,true);
eencae 0:be41a15e7a86 105 }
eencae 0:be41a15e7a86 106 // need to refresh display after setting pixels or writing strings
eencae 0:be41a15e7a86 107 lcd.refresh();
eencae 0:be41a15e7a86 108 wait(5.0);
eencae 0:be41a15e7a86 109
eencae 0:be41a15e7a86 110 // can check status of pixel using getPixel(x,y);
eencae 0:be41a15e7a86 111 lcd.clear(); // clear buffer
eencae 0:be41a15e7a86 112 lcd.setPixel(2,2,true); // set random pixel in buffer
eencae 0:be41a15e7a86 113 lcd.refresh();
eencae 0:be41a15e7a86 114 wait(1.0);
eencae 0:be41a15e7a86 115
eencae 0:be41a15e7a86 116 int pixel_to_test = lcd.getPixel(2,2);
eencae 0:be41a15e7a86 117
eencae 0:be41a15e7a86 118 if ( pixel_to_test ) {
eencae 0:be41a15e7a86 119 lcd.printString("2,2 is set",0,4);
eencae 0:be41a15e7a86 120 }
eencae 0:be41a15e7a86 121
eencae 0:be41a15e7a86 122 // this one shouldn't be set
eencae 0:be41a15e7a86 123 lcd.setPixel(3,3,false); // clear random pixel in buffer
eencae 0:be41a15e7a86 124 lcd.refresh();
eencae 0:be41a15e7a86 125 pixel_to_test = lcd.getPixel(3,3);
eencae 0:be41a15e7a86 126
eencae 0:be41a15e7a86 127 if ( pixel_to_test == 0 ) {
eencae 0:be41a15e7a86 128 lcd.printString("3,3 is clear",0,5);
eencae 0:be41a15e7a86 129 }
eencae 0:be41a15e7a86 130
eencae 0:be41a15e7a86 131 lcd.refresh();
eencae 0:be41a15e7a86 132 wait(4.0);
eencae 0:be41a15e7a86 133
eencae 0:be41a15e7a86 134 lcd.clear(); // clear buffer
eencae 0:be41a15e7a86 135 lcd.inverseMode(); // invert colours
eencae 0:be41a15e7a86 136 lcd.setBrightness(1.0); // put LED backlight on full
eencae 0:be41a15e7a86 137
eencae 0:be41a15e7a86 138 float array[84];
eencae 0:be41a15e7a86 139
eencae 0:be41a15e7a86 140 for (int i = 0; i < 84; i++) {
eencae 0:be41a15e7a86 141 array[i] = 0.5 + 0.5*sin(i*2*3.14/84);
eencae 0:be41a15e7a86 142 }
eencae 0:be41a15e7a86 143
eencae 0:be41a15e7a86 144 // can also plot graphs - 84 elements only
eencae 0:be41a15e7a86 145 // values must be in range 0.0 - 1.0
eencae 0:be41a15e7a86 146 lcd.plotArray(array);
eencae 0:be41a15e7a86 147 lcd.refresh();
eencae 0:be41a15e7a86 148 wait(5.0);
eencae 0:be41a15e7a86 149
eencae 0:be41a15e7a86 150 lcd.clear();
eencae 0:be41a15e7a86 151 lcd.normalMode(); // normal colour mode back
eencae 0:be41a15e7a86 152 lcd.setBrightness(0.5); // put LED backlight on 50%
eencae 0:be41a15e7a86 153
eencae 0:be41a15e7a86 154 // example of drawing lines
eencae 0:be41a15e7a86 155 for (int x = 0; x < WIDTH ; x+=10) {
eencae 0:be41a15e7a86 156 // x0,y0,x1,y1,type 0-white,1-black,2-dotted
eencae 0:be41a15e7a86 157 lcd.drawLine(0,0,x,HEIGHT,2);
eencae 0:be41a15e7a86 158 }
eencae 0:be41a15e7a86 159 lcd.refresh(); // refresh after drawing shapes
eencae 0:be41a15e7a86 160 wait(5.0);
eencae 0:be41a15e7a86 161
eencae 0:be41a15e7a86 162
eencae 0:be41a15e7a86 163 lcd.clear();
eencae 0:be41a15e7a86 164 // example of how to draw circles
eencae 0:be41a15e7a86 165 lcd.drawCircle(WIDTH/2,HEIGHT/2,20,FILL_BLACK); // x,y,radius,black fill
eencae 0:be41a15e7a86 166 lcd.drawCircle(WIDTH/2,HEIGHT/2,10,FILL_WHITE); // x,y,radius,white fill
eencae 0:be41a15e7a86 167 lcd.drawCircle(WIDTH/2,HEIGHT/2,30,FILL_TRANSPARENT); // x,y,radius,transparent with outline
eencae 0:be41a15e7a86 168 lcd.refresh(); // refresh after drawing shapes
eencae 0:be41a15e7a86 169 wait(5.0);
eencae 0:be41a15e7a86 170
eencae 0:be41a15e7a86 171 lcd.clear();
eencae 0:be41a15e7a86 172 // example of how to draw rectangles
eencae 0:be41a15e7a86 173 // origin x,y,width,height,type
eencae 0:be41a15e7a86 174 lcd.drawRect(10,10,50,30,FILL_BLACK); // filled black rectangle
eencae 0:be41a15e7a86 175 lcd.drawRect(15,15,20,10,FILL_WHITE); // filled white rectange (no outline)
eencae 0:be41a15e7a86 176 lcd.drawRect(2,2,70,40,FILL_TRANSPARENT); // transparent, just outline
eencae 0:be41a15e7a86 177 lcd.refresh(); // refresh after drawing shapes
eencae 0:be41a15e7a86 178 wait(5.0);
eencae 0:be41a15e7a86 179
eencae 0:be41a15e7a86 180 }
eencae 0:be41a15e7a86 181 }
eencae 0:be41a15e7a86 182
eencae 0:be41a15e7a86 183
eencae 0:be41a15e7a86 184 @endcode
eencae 0:be41a15e7a86 185 */
eencae 0:be41a15e7a86 186 class N5110
eencae 0:be41a15e7a86 187 {
eencae 0:be41a15e7a86 188 private:
eencae 0:be41a15e7a86 189 // objects
eencae 0:be41a15e7a86 190 SPI *_spi;
alex_20 6:40ef2030334c 191 DigitalOut *_led;
eencae 0:be41a15e7a86 192 DigitalOut *_pwr;
eencae 0:be41a15e7a86 193 DigitalOut *_sce;
eencae 0:be41a15e7a86 194 DigitalOut *_rst;
eencae 0:be41a15e7a86 195 DigitalOut *_dc;
eencae 0:be41a15e7a86 196
eencae 0:be41a15e7a86 197 // variables
eencae 0:be41a15e7a86 198 unsigned char buffer[84][6]; // screen buffer - the 6 is for the banks - each one is 8 bits;
eencae 0:be41a15e7a86 199
eencae 0:be41a15e7a86 200 public:
eencae 0:be41a15e7a86 201 /** Create a N5110 object connected to the specified pins
eencae 0:be41a15e7a86 202 *
eencae 0:be41a15e7a86 203 * @param pwr Pin connected to Vcc on the LCD display (pin 1)
eencae 0:be41a15e7a86 204 * @param sce Pin connected to chip enable (pin 3)
eencae 0:be41a15e7a86 205 * @param rst Pin connected to reset (pin 4)
eencae 0:be41a15e7a86 206 * @param dc Pin connected to data/command select (pin 5)
eencae 0:be41a15e7a86 207 * @param mosi Pin connected to data input (MOSI) (pin 6)
eencae 0:be41a15e7a86 208 * @param sclk Pin connected to serial clock (SCLK) (pin 7)
eencae 0:be41a15e7a86 209 * @param led Pin connected to LED backlight (must be PWM) (pin 8)
eencae 0:be41a15e7a86 210 *
eencae 0:be41a15e7a86 211 */
eencae 0:be41a15e7a86 212 N5110(PinName const pwrPin,
eencae 0:be41a15e7a86 213 PinName const scePin,
eencae 0:be41a15e7a86 214 PinName const rstPin,
eencae 0:be41a15e7a86 215 PinName const dcPin,
eencae 0:be41a15e7a86 216 PinName const mosiPin,
eencae 0:be41a15e7a86 217 PinName const sclkPin,
eencae 0:be41a15e7a86 218 PinName const ledPin);
eencae 0:be41a15e7a86 219
eencae 0:be41a15e7a86 220 /** Create a N5110 object connected to the specified pins (Vcc to +3V3)
eencae 0:be41a15e7a86 221 *
eencae 0:be41a15e7a86 222 * @param sce Pin connected to chip enable (pin 3)
eencae 0:be41a15e7a86 223 * @param rst Pin connected to reset (pin 4)
eencae 0:be41a15e7a86 224 * @param dc Pin connected to data/command select (pin 5)
eencae 0:be41a15e7a86 225 * @param mosi Pin connected to data input (MOSI) (pin 6)
eencae 0:be41a15e7a86 226 * @param sclk Pin connected to serial clock (SCLK) (pin 7)
eencae 0:be41a15e7a86 227 * @param led Pin connected to LED backlight (must be PWM) (pin 8)
eencae 0:be41a15e7a86 228 *
eencae 0:be41a15e7a86 229 */
eencae 0:be41a15e7a86 230 N5110(PinName const scePin,
eencae 0:be41a15e7a86 231 PinName const rstPin,
eencae 0:be41a15e7a86 232 PinName const dcPin,
eencae 0:be41a15e7a86 233 PinName const mosiPin,
eencae 0:be41a15e7a86 234 PinName const sclkPin,
eencae 0:be41a15e7a86 235 PinName const ledPin);
eencae 0:be41a15e7a86 236
eencae 0:be41a15e7a86 237 /**
eencae 0:be41a15e7a86 238 * Free allocated memory when object goes out of scope
eencae 0:be41a15e7a86 239 */
eencae 0:be41a15e7a86 240 ~N5110();
eencae 0:be41a15e7a86 241
eencae 0:be41a15e7a86 242 /** Initialise display
eencae 0:be41a15e7a86 243 *
eencae 0:be41a15e7a86 244 * Powers up the display and turns on backlight (50% brightness default).
eencae 0:be41a15e7a86 245 * Sets the display up in horizontal addressing mode and with normal video mode.
eencae 0:be41a15e7a86 246 */
eencae 0:be41a15e7a86 247 void init();
eencae 0:be41a15e7a86 248
eencae 0:be41a15e7a86 249 /** Turn off
eencae 0:be41a15e7a86 250 *
eencae 0:be41a15e7a86 251 * Powers down the display and turns of the backlight.
eencae 0:be41a15e7a86 252 * Needs to be reinitialised before being re-used.
eencae 0:be41a15e7a86 253 */
eencae 0:be41a15e7a86 254 void turnOff();
eencae 0:be41a15e7a86 255
eencae 0:be41a15e7a86 256 /** Clear
eencae 0:be41a15e7a86 257 *
eencae 0:be41a15e7a86 258 * Clears the screen buffer.
eencae 0:be41a15e7a86 259 */
eencae 0:be41a15e7a86 260 void clear();
eencae 0:be41a15e7a86 261
eencae 0:be41a15e7a86 262 /** Set screen constrast
eencae 0:be41a15e7a86 263 * @param constrast - float in range 0.0 to 1.0 (0.40 to 0.60 is usually a good value)
eencae 0:be41a15e7a86 264 */
eencae 0:be41a15e7a86 265 void setContrast(float contrast);
eencae 0:be41a15e7a86 266
eencae 0:be41a15e7a86 267 /** Turn on normal video mode (default)
eencae 0:be41a15e7a86 268 * Black on white
eencae 0:be41a15e7a86 269 */
eencae 0:be41a15e7a86 270 void normalMode();
eencae 0:be41a15e7a86 271
eencae 0:be41a15e7a86 272 /** Turn on inverse video mode (default)
eencae 0:be41a15e7a86 273 * White on black
eencae 0:be41a15e7a86 274 */
eencae 0:be41a15e7a86 275 void inverseMode();
eencae 0:be41a15e7a86 276
eencae 0:be41a15e7a86 277 /** Backlight On
eencae 0:be41a15e7a86 278 *
eencae 0:be41a15e7a86 279 * Turns backlight on
eencae 0:be41a15e7a86 280 */
eencae 0:be41a15e7a86 281 void backLightOn();
eencae 0:be41a15e7a86 282
eencae 0:be41a15e7a86 283 /** Set Brightness
eencae 0:be41a15e7a86 284 *
eencae 0:be41a15e7a86 285 * Turns backlight off
eencae 0:be41a15e7a86 286 */
eencae 0:be41a15e7a86 287 void backLightOff();
eencae 0:be41a15e7a86 288
eencae 0:be41a15e7a86 289 /** Print String
eencae 0:be41a15e7a86 290 *
eencae 0:be41a15e7a86 291 * Prints a string of characters to the screen buffer. String is cut-off after the 83rd pixel.
eencae 0:be41a15e7a86 292 * @param x - the column number (0 to 83)
eencae 0:be41a15e7a86 293 * @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row
eencae 0:be41a15e7a86 294 */
eencae 0:be41a15e7a86 295 void printString(char const *str,
eencae 0:be41a15e7a86 296 unsigned int const x,
eencae 0:be41a15e7a86 297 unsigned int const y);
eencae 0:be41a15e7a86 298
eencae 0:be41a15e7a86 299 /** Print Character
eencae 0:be41a15e7a86 300 *
eencae 0:be41a15e7a86 301 * Sends a character to the screen buffer. Printed at the specified location. Character is cut-off after the 83rd pixel.
eencae 0:be41a15e7a86 302 * @param c - the character to print. Can print ASCII as so printChar('C').
eencae 0:be41a15e7a86 303 * @param x - the column number (0 to 83)
eencae 0:be41a15e7a86 304 * @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row
eencae 0:be41a15e7a86 305 */
eencae 0:be41a15e7a86 306 void printChar(char const c,
eencae 0:be41a15e7a86 307 unsigned int const x,
eencae 0:be41a15e7a86 308 unsigned int const y);
eencae 0:be41a15e7a86 309
eencae 0:be41a15e7a86 310 /**
eencae 0:be41a15e7a86 311 * @brief Set a Pixel
eencae 0:be41a15e7a86 312 *
eencae 0:be41a15e7a86 313 * @param x The x co-ordinate of the pixel (0 to 83)
eencae 0:be41a15e7a86 314 * @param y The y co-ordinate of the pixel (0 to 47)
eencae 0:be41a15e7a86 315 * @param state The state of the pixel [true=black (default), false=white]
eencae 0:be41a15e7a86 316 *
eencae 0:be41a15e7a86 317 * @details This function sets the state of a pixel in the screen buffer.
eencae 0:be41a15e7a86 318 * The third parameter can be omitted,
eencae 0:be41a15e7a86 319 */
eencae 0:be41a15e7a86 320 void setPixel(unsigned int const x,
eencae 0:be41a15e7a86 321 unsigned int const y,
eencae 0:be41a15e7a86 322 bool const state = true);
eencae 0:be41a15e7a86 323
eencae 0:be41a15e7a86 324 /**
eencae 0:be41a15e7a86 325 * @brief Clear a Pixel
eencae 0:be41a15e7a86 326 *
eencae 0:be41a15e7a86 327 * @param x - the x co-ordinate of the pixel (0 to 83)
eencae 0:be41a15e7a86 328 * @param y - the y co-ordinate of the pixel (0 to 47)
eencae 0:be41a15e7a86 329 *
eencae 0:be41a15e7a86 330 * @details This function clears pixel in the screen buffer
eencae 0:be41a15e7a86 331 *
eencae 0:be41a15e7a86 332 * @deprecated Use setPixel(x, y, false) instead
eencae 0:be41a15e7a86 333 */
eencae 0:be41a15e7a86 334 void clearPixel(unsigned int const x,
eencae 0:be41a15e7a86 335 unsigned int const y)
eencae 0:be41a15e7a86 336 __attribute__((deprecated("Use setPixel(x,y,false) instead")));
eencae 0:be41a15e7a86 337
eencae 0:be41a15e7a86 338 /** Get a Pixel
eencae 0:be41a15e7a86 339 *
eencae 0:be41a15e7a86 340 * This function gets the status of a pixel in the screen buffer.
eencae 0:be41a15e7a86 341 * @param x - the x co-ordinate of the pixel (0 to 83)
eencae 0:be41a15e7a86 342 * @param y - the y co-ordinate of the pixel (0 to 47)
eencae 0:be41a15e7a86 343 * @returns
eencae 0:be41a15e7a86 344 * 0 - pixel is clear
eencae 0:be41a15e7a86 345 * 1 - pixel is set
eencae 0:be41a15e7a86 346 */
eencae 0:be41a15e7a86 347 int getPixel(unsigned int const x,
eencae 0:be41a15e7a86 348 unsigned int const y) const;
eencae 0:be41a15e7a86 349
eencae 0:be41a15e7a86 350 /** Refresh display
eencae 0:be41a15e7a86 351 *
eencae 0:be41a15e7a86 352 * This functions sends the screen buffer to the display.
eencae 0:be41a15e7a86 353 */
eencae 0:be41a15e7a86 354 void refresh();
eencae 0:be41a15e7a86 355
eencae 0:be41a15e7a86 356 /** Randomise buffer
eencae 0:be41a15e7a86 357 *
eencae 0:be41a15e7a86 358 * This function fills the buffer with random data. Can be used to test the display.
eencae 0:be41a15e7a86 359 * A call to refresh() must be made to update the display to reflect the change in pixels.
eencae 0:be41a15e7a86 360 * The seed is not set and so the generated pattern will probably be the same each time.
eencae 0:be41a15e7a86 361 * TODO: Randomise the seed - maybe using the noise on the AnalogIn pins.
eencae 0:be41a15e7a86 362 */
eencae 0:be41a15e7a86 363 void randomiseBuffer();
eencae 0:be41a15e7a86 364
eencae 0:be41a15e7a86 365 /** Plot Array
eencae 0:be41a15e7a86 366 *
eencae 0:be41a15e7a86 367 * This function plots a one-dimensional array in the buffer.
eencae 0:be41a15e7a86 368 * @param array[] - y values of the plot. Values should be normalised in the range 0.0 to 1.0. First 84 plotted.
eencae 0:be41a15e7a86 369 */
eencae 0:be41a15e7a86 370 void plotArray(float const array[]);
eencae 0:be41a15e7a86 371
eencae 0:be41a15e7a86 372 /** Draw Circle
eencae 0:be41a15e7a86 373 *
eencae 0:be41a15e7a86 374 * This function draws a circle at the specified origin with specified radius in the screen buffer
eencae 0:be41a15e7a86 375 * Uses the midpoint circle algorithm.
eencae 0:be41a15e7a86 376 * @see http://en.wikipedia.org/wiki/Midpoint_circle_algorithm
eencae 0:be41a15e7a86 377 * @param x0 - x-coordinate of centre
eencae 0:be41a15e7a86 378 * @param y0 - y-coordinate of centre
eencae 0:be41a15e7a86 379 * @param radius - radius of circle in pixels
eencae 0:be41a15e7a86 380 * @param fill - fill-type for the shape
eencae 0:be41a15e7a86 381 */
eencae 0:be41a15e7a86 382 void drawCircle(unsigned int const x0,
eencae 0:be41a15e7a86 383 unsigned int const y0,
eencae 0:be41a15e7a86 384 unsigned int const radius,
eencae 0:be41a15e7a86 385 FillType const fill);
alex_20 1:2ae7a8b01771 386
alex_20 7:559edc36f261 387 /** Draw Ellipse
alex_20 7:559edc36f261 388 * @param xc - x-coordinate of centre
alex_20 7:559edc36f261 389 * @param yc - y-coordinate of centre
alex_20 7:559edc36f261 390 * @param rx - radius of the minor axis
alex_20 7:559edc36f261 391 * @param ry - radius of the major axis
alex_20 7:559edc36f261 392 */
alex_20 7:559edc36f261 393 void drawEllipse(unsigned int const xc,
alex_20 7:559edc36f261 394 unsigned int const yc,
alex_20 8:1fc5e14b0db6 395 unsigned int const rx,
alex_20 8:1fc5e14b0db6 396 unsigned int const ry);
alex_20 7:559edc36f261 397
alex_20 7:559edc36f261 398 /** Draw Curve
alex_20 7:559edc36f261 399 * @param curve_points - all points that compose the curve
alex_20 7:559edc36f261 400 * @param offset - parameter for movememt illusion
alex_20 7:559edc36f261 401 * @param dash_line - lenght of the lines that compose the curve
alex_20 7:559edc36f261 402 * @param type - 0 white, 1 black
alex_20 7:559edc36f261 403 */
alex_20 3:cbe2dcca5058 404 void drawCurve(std::vector<Vector2Df> curve_points,
alex_20 5:7930d289e7fc 405 float offset,
alex_20 4:def20a1665d1 406 int dash_len,
alex_20 3:cbe2dcca5058 407 int type);
eencae 0:be41a15e7a86 408
eencae 0:be41a15e7a86 409 /** Draw Line
eencae 0:be41a15e7a86 410 *
eencae 0:be41a15e7a86 411 * This function draws a line between the specified points using linear interpolation.
alex_20 4:def20a1665d1 412 * @param x0 - x-coordinate of first point
alex_20 4:def20a1665d1 413 * @param y0 - y-coordinate of first point
alex_20 4:def20a1665d1 414 * @param x1 - x-coordinate of last point
alex_20 4:def20a1665d1 415 * @param y1 - y-coordinate of last point
alex_20 4:def20a1665d1 416 * @param offset - moved from position
alex_20 4:def20a1665d1 417 * @param step - 0 white, 1 black, >= 2 dotted
eencae 0:be41a15e7a86 418 */
eencae 0:be41a15e7a86 419 void drawLine(unsigned int const x0,
eencae 0:be41a15e7a86 420 unsigned int const y0,
eencae 0:be41a15e7a86 421 unsigned int const x1,
eencae 0:be41a15e7a86 422 unsigned int const y1,
alex_20 4:def20a1665d1 423 unsigned int const offset,
alex_20 4:def20a1665d1 424 unsigned int const step);
eencae 0:be41a15e7a86 425
eencae 0:be41a15e7a86 426 /** Draw Rectangle
eencae 0:be41a15e7a86 427 *
eencae 0:be41a15e7a86 428 * This function draws a rectangle.
eencae 0:be41a15e7a86 429 * @param x0 - x-coordinate of origin (top-left)
eencae 0:be41a15e7a86 430 * @param y0 - y-coordinate of origin (top-left)
eencae 0:be41a15e7a86 431 * @param width - width of rectangle
eencae 0:be41a15e7a86 432 * @param height - height of rectangle
eencae 0:be41a15e7a86 433 * @param fill - fill-type for the shape
eencae 0:be41a15e7a86 434 */
eencae 0:be41a15e7a86 435 void drawRect(unsigned int const x0,
eencae 0:be41a15e7a86 436 unsigned int const y0,
eencae 0:be41a15e7a86 437 unsigned int const width,
eencae 0:be41a15e7a86 438 unsigned int const height,
eencae 0:be41a15e7a86 439 FillType const fill);
eencae 0:be41a15e7a86 440
eencae 0:be41a15e7a86 441 /** Draw Sprite
eencae 0:be41a15e7a86 442 *
eencae 0:be41a15e7a86 443 * This function draws a sprite as defined in a 2D array
eencae 0:be41a15e7a86 444 * @param x0 - x-coordinate of origin (top-left)
eencae 0:be41a15e7a86 445 * @param y0 - y-coordinate of origin (top-left)
eencae 0:be41a15e7a86 446 * @param nrows - number of rows in sprite
eencae 0:be41a15e7a86 447 * @param ncols - number of columns in sprite
eencae 0:be41a15e7a86 448 * @param sprite - 2D array representing the sprite
eencae 0:be41a15e7a86 449 */
eencae 0:be41a15e7a86 450 void drawSprite(int x0,
eencae 0:be41a15e7a86 451 int y0,
eencae 0:be41a15e7a86 452 int nrows,
eencae 0:be41a15e7a86 453 int ncols,
eencae 0:be41a15e7a86 454 int *sprite);
eencae 0:be41a15e7a86 455
eencae 0:be41a15e7a86 456
eencae 0:be41a15e7a86 457 private:
eencae 0:be41a15e7a86 458 // methods
eencae 0:be41a15e7a86 459 void setXYAddress(unsigned int const x,
eencae 0:be41a15e7a86 460 unsigned int const y);
eencae 0:be41a15e7a86 461 void initSPI();
eencae 0:be41a15e7a86 462 void turnOn();
eencae 0:be41a15e7a86 463 void reset();
eencae 0:be41a15e7a86 464 void clearRAM();
eencae 0:be41a15e7a86 465 void sendCommand(unsigned char command);
eencae 0:be41a15e7a86 466 void sendData(unsigned char data);
eencae 0:be41a15e7a86 467 void setTempCoefficient(char tc); // 0 to 3
eencae 0:be41a15e7a86 468 void setBias(char bias); // 0 to 7
eencae 0:be41a15e7a86 469 };
eencae 0:be41a15e7a86 470
eencae 0:be41a15e7a86 471 const unsigned char font5x7[480] = {
eencae 0:be41a15e7a86 472 0x00, 0x00, 0x00, 0x00, 0x00,// (space)
eencae 0:be41a15e7a86 473 0x00, 0x00, 0x5F, 0x00, 0x00,// !
eencae 0:be41a15e7a86 474 0x00, 0x07, 0x00, 0x07, 0x00,// "
eencae 0:be41a15e7a86 475 0x14, 0x7F, 0x14, 0x7F, 0x14,// #
eencae 0:be41a15e7a86 476 0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
eencae 0:be41a15e7a86 477 0x23, 0x13, 0x08, 0x64, 0x62,// %
eencae 0:be41a15e7a86 478 0x36, 0x49, 0x55, 0x22, 0x50,// &
eencae 0:be41a15e7a86 479 0x00, 0x05, 0x03, 0x00, 0x00,// '
eencae 0:be41a15e7a86 480 0x00, 0x1C, 0x22, 0x41, 0x00,// (
eencae 0:be41a15e7a86 481 0x00, 0x41, 0x22, 0x1C, 0x00,// )
eencae 0:be41a15e7a86 482 0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
eencae 0:be41a15e7a86 483 0x08, 0x08, 0x3E, 0x08, 0x08,// +
eencae 0:be41a15e7a86 484 0x00, 0x50, 0x30, 0x00, 0x00,// ,
eencae 0:be41a15e7a86 485 0x08, 0x08, 0x08, 0x08, 0x08,// -
eencae 0:be41a15e7a86 486 0x00, 0x60, 0x60, 0x00, 0x00,// .
eencae 0:be41a15e7a86 487 0x20, 0x10, 0x08, 0x04, 0x02,// /
eencae 0:be41a15e7a86 488 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
eencae 0:be41a15e7a86 489 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
eencae 0:be41a15e7a86 490 0x42, 0x61, 0x51, 0x49, 0x46,// 2
eencae 0:be41a15e7a86 491 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
eencae 0:be41a15e7a86 492 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
eencae 0:be41a15e7a86 493 0x27, 0x45, 0x45, 0x45, 0x39,// 5
eencae 0:be41a15e7a86 494 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
eencae 0:be41a15e7a86 495 0x01, 0x71, 0x09, 0x05, 0x03,// 7
eencae 0:be41a15e7a86 496 0x36, 0x49, 0x49, 0x49, 0x36,// 8
eencae 0:be41a15e7a86 497 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
eencae 0:be41a15e7a86 498 0x00, 0x36, 0x36, 0x00, 0x00,// :
eencae 0:be41a15e7a86 499 0x00, 0x56, 0x36, 0x00, 0x00,// ;
eencae 0:be41a15e7a86 500 0x00, 0x08, 0x14, 0x22, 0x41,// <
eencae 0:be41a15e7a86 501 0x14, 0x14, 0x14, 0x14, 0x14,// =
eencae 0:be41a15e7a86 502 0x41, 0x22, 0x14, 0x08, 0x00,// >
eencae 0:be41a15e7a86 503 0x02, 0x01, 0x51, 0x09, 0x06,// ?
eencae 0:be41a15e7a86 504 0x32, 0x49, 0x79, 0x41, 0x3E,// @
eencae 0:be41a15e7a86 505 0x7E, 0x11, 0x11, 0x11, 0x7E,// A
eencae 0:be41a15e7a86 506 0x7F, 0x49, 0x49, 0x49, 0x36,// B
eencae 0:be41a15e7a86 507 0x3E, 0x41, 0x41, 0x41, 0x22,// C
eencae 0:be41a15e7a86 508 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
eencae 0:be41a15e7a86 509 0x7F, 0x49, 0x49, 0x49, 0x41,// E
eencae 0:be41a15e7a86 510 0x7F, 0x09, 0x09, 0x01, 0x01,// F
eencae 0:be41a15e7a86 511 0x3E, 0x41, 0x41, 0x51, 0x32,// G
eencae 0:be41a15e7a86 512 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
eencae 0:be41a15e7a86 513 0x00, 0x41, 0x7F, 0x41, 0x00,// I
eencae 0:be41a15e7a86 514 0x20, 0x40, 0x41, 0x3F, 0x01,// J
eencae 0:be41a15e7a86 515 0x7F, 0x08, 0x14, 0x22, 0x41,// K
eencae 0:be41a15e7a86 516 0x7F, 0x40, 0x40, 0x40, 0x40,// L
eencae 0:be41a15e7a86 517 0x7F, 0x02, 0x04, 0x02, 0x7F,// M
eencae 0:be41a15e7a86 518 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
eencae 0:be41a15e7a86 519 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
eencae 0:be41a15e7a86 520 0x7F, 0x09, 0x09, 0x09, 0x06,// P
eencae 0:be41a15e7a86 521 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
eencae 0:be41a15e7a86 522 0x7F, 0x09, 0x19, 0x29, 0x46,// R
eencae 0:be41a15e7a86 523 0x46, 0x49, 0x49, 0x49, 0x31,// S
eencae 0:be41a15e7a86 524 0x01, 0x01, 0x7F, 0x01, 0x01,// T
eencae 0:be41a15e7a86 525 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
eencae 0:be41a15e7a86 526 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
eencae 0:be41a15e7a86 527 0x7F, 0x20, 0x18, 0x20, 0x7F,// W
eencae 0:be41a15e7a86 528 0x63, 0x14, 0x08, 0x14, 0x63,// X
eencae 0:be41a15e7a86 529 0x03, 0x04, 0x78, 0x04, 0x03,// Y
eencae 0:be41a15e7a86 530 0x61, 0x51, 0x49, 0x45, 0x43,// Z
eencae 0:be41a15e7a86 531 0x00, 0x00, 0x7F, 0x41, 0x41,// [
eencae 0:be41a15e7a86 532 0x02, 0x04, 0x08, 0x10, 0x20,// "\"
eencae 0:be41a15e7a86 533 0x41, 0x41, 0x7F, 0x00, 0x00,// ]
eencae 0:be41a15e7a86 534 0x04, 0x02, 0x01, 0x02, 0x04,// ^
eencae 0:be41a15e7a86 535 0x40, 0x40, 0x40, 0x40, 0x40,// _
eencae 0:be41a15e7a86 536 0x00, 0x01, 0x02, 0x04, 0x00,// `
eencae 0:be41a15e7a86 537 0x20, 0x54, 0x54, 0x54, 0x78,// a
eencae 0:be41a15e7a86 538 0x7F, 0x48, 0x44, 0x44, 0x38,// b
eencae 0:be41a15e7a86 539 0x38, 0x44, 0x44, 0x44, 0x20,// c
eencae 0:be41a15e7a86 540 0x38, 0x44, 0x44, 0x48, 0x7F,// d
eencae 0:be41a15e7a86 541 0x38, 0x54, 0x54, 0x54, 0x18,// e
eencae 0:be41a15e7a86 542 0x08, 0x7E, 0x09, 0x01, 0x02,// f
eencae 0:be41a15e7a86 543 0x08, 0x14, 0x54, 0x54, 0x3C,// g
eencae 0:be41a15e7a86 544 0x7F, 0x08, 0x04, 0x04, 0x78,// h
eencae 0:be41a15e7a86 545 0x00, 0x44, 0x7D, 0x40, 0x00,// i
eencae 0:be41a15e7a86 546 0x20, 0x40, 0x44, 0x3D, 0x00,// j
eencae 0:be41a15e7a86 547 0x00, 0x7F, 0x10, 0x28, 0x44,// k
eencae 0:be41a15e7a86 548 0x00, 0x41, 0x7F, 0x40, 0x00,// l
eencae 0:be41a15e7a86 549 0x7C, 0x04, 0x18, 0x04, 0x78,// m
eencae 0:be41a15e7a86 550 0x7C, 0x08, 0x04, 0x04, 0x78,// n
eencae 0:be41a15e7a86 551 0x38, 0x44, 0x44, 0x44, 0x38,// o
eencae 0:be41a15e7a86 552 0x7C, 0x14, 0x14, 0x14, 0x08,// p
eencae 0:be41a15e7a86 553 0x08, 0x14, 0x14, 0x18, 0x7C,// q
eencae 0:be41a15e7a86 554 0x7C, 0x08, 0x04, 0x04, 0x08,// r
eencae 0:be41a15e7a86 555 0x48, 0x54, 0x54, 0x54, 0x20,// s
eencae 0:be41a15e7a86 556 0x04, 0x3F, 0x44, 0x40, 0x20,// t
eencae 0:be41a15e7a86 557 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
eencae 0:be41a15e7a86 558 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
eencae 0:be41a15e7a86 559 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
eencae 0:be41a15e7a86 560 0x44, 0x28, 0x10, 0x28, 0x44,// x
eencae 0:be41a15e7a86 561 0x0C, 0x50, 0x50, 0x50, 0x3C,// y
eencae 0:be41a15e7a86 562 0x44, 0x64, 0x54, 0x4C, 0x44,// z
eencae 0:be41a15e7a86 563 0x00, 0x08, 0x36, 0x41, 0x00,// {
eencae 0:be41a15e7a86 564 0x00, 0x00, 0x7F, 0x00, 0x00,// |
eencae 0:be41a15e7a86 565 0x00, 0x41, 0x36, 0x08, 0x00,// }
eencae 0:be41a15e7a86 566 0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
eencae 0:be41a15e7a86 567 0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
eencae 0:be41a15e7a86 568 };
eencae 0:be41a15e7a86 569
eencae 0:be41a15e7a86 570 #endif