Final tidy of code following installation of new sensor, more comments added prior to submission

Dependencies:   mbed

Committer:
legstar85
Date:
Fri Jan 21 14:26:56 2022 +0000
Revision:
13:5ad65a688f3f
Updated due to issues with using Start Temp variable later in program now resolved. Doxygen completed and folders in place correctly

Who changed what in which revision?

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