“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:
Fri Mar 19 20:04:39 2021 +0000
Revision:
3:cbe2dcca5058
Parent:
1:2ae7a8b01771
Child:
4:def20a1665d1
everything in N5110

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