“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:
eencae
Date:
Fri Dec 11 12:25:25 2020 +0000
Revision:
0:be41a15e7a86
Child:
1:2ae7a8b01771
Initial Commit

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