Display librairy manage 3 LED and a TextLCD (on, off, flash) (print message, clear)

Committer:
us191
Date:
Mon May 06 08:00:51 2013 +0000
Revision:
4:424dd7f7b12c
message examples V2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
us191 4:424dd7f7b12c 1 #include "Display.h"
us191 4:424dd7f7b12c 2
us191 4:424dd7f7b12c 3
us191 4:424dd7f7b12c 4 /* Create a Display interface (default : 16X2 screen)
us191 4:424dd7f7b12c 5 *
us191 4:424dd7f7b12c 6 * @param pinGreenLED greenLED broche
us191 4:424dd7f7b12c 7 * @param pinRedLED redLED broche
us191 4:424dd7f7b12c 8 * @param pinOrangeLED orangeLED broche
us191 4:424dd7f7b12c 9 * @param pinLCDrs LCD Instruction/data control line
us191 4:424dd7f7b12c 10 * @param pinLCDe LCD Enable line (clock)
us191 4:424dd7f7b12c 11 * @param pinLCDd0-d3 LCD Data lines
us191 4:424dd7f7b12c 12 */
us191 4:424dd7f7b12c 13 Display::Display(PinName pinGreenLED, PinName pinRedLED, PinName pinOrangeLED, PinName pinLCDrs, PinName pinLCDe,
us191 4:424dd7f7b12c 14 PinName pinLCDd0, PinName pinLCDd1, PinName pinLCDd2, PinName pinLCDd3) : _greenLED(pinGreenLED), _redLED(pinRedLED),
us191 4:424dd7f7b12c 15 _orangeLED(pinOrangeLED), _lcd(pinLCDrs, pinLCDe, pinLCDd0, pinLCDd1, pinLCDd2, pinLCDd3)
us191 4:424dd7f7b12c 16 {
us191 4:424dd7f7b12c 17 this->clear();
us191 4:424dd7f7b12c 18 }
us191 4:424dd7f7b12c 19
us191 4:424dd7f7b12c 20 /* Create a Display interface
us191 4:424dd7f7b12c 21 *
us191 4:424dd7f7b12c 22 * @param pinGreenLED greenLED broche
us191 4:424dd7f7b12c 23 * @param pinRedLED redLED broche
us191 4:424dd7f7b12c 24 * @param pinOrangeLED orangeLED broche
us191 4:424dd7f7b12c 25 * @param pinLCDrs LCD Instruction/data control line
us191 4:424dd7f7b12c 26 * @param pinLCDe LCD Enable line (clock)
us191 4:424dd7f7b12c 27 * @param pinLCDd0-d3 LCD Data lines
us191 4:424dd7f7b12c 28 * @param typeScreen LCD Sets the panel size/addressing mode (default = LCD16x2)
us191 4:424dd7f7b12c 29 */
us191 4:424dd7f7b12c 30 Display::Display(PinName pinGreenLED, PinName pinRedLED, PinName pinOrangeLED, PinName pinLCDrs, PinName pinLCDe,
us191 4:424dd7f7b12c 31 PinName pinLCDd0, PinName pinLCDd1, PinName pinLCDd2, PinName pinLCDd3, TextLCD::LCDType typeScreen) :
us191 4:424dd7f7b12c 32 _greenLED(pinGreenLED), _redLED(pinRedLED), _orangeLED(pinOrangeLED),
us191 4:424dd7f7b12c 33 _lcd(pinLCDrs, pinLCDe, pinLCDd0, pinLCDd1, pinLCDd2, pinLCDd3, typeScreen)
us191 4:424dd7f7b12c 34 {
us191 4:424dd7f7b12c 35 this->clear();
us191 4:424dd7f7b12c 36 }
us191 4:424dd7f7b12c 37
us191 4:424dd7f7b12c 38 /* Destructor
us191 4:424dd7f7b12c 39 */
us191 4:424dd7f7b12c 40 Display::~Display()
us191 4:424dd7f7b12c 41 {
us191 4:424dd7f7b12c 42 }
us191 4:424dd7f7b12c 43
us191 4:424dd7f7b12c 44 /* print message on LCD screen and change status of green, red and orange LED
us191 4:424dd7f7b12c 45 * all line except the last line, have to finish by '\n'. Warning : '\n' count like a character
us191 4:424dd7f7b12c 46 * don't end message by '\n'
us191 4:424dd7f7b12c 47 *
us191 4:424dd7f7b12c 48 * @param message message will be display on screen
us191 4:424dd7f7b12c 49 * @param statusGreenLED new status of greenLED (on, off, flash)
us191 4:424dd7f7b12c 50 * @param statusRedLED new status of redLED (on, off, flash)
us191 4:424dd7f7b12c 51 * @param statusOrangeLED new status of orangeLED (on, off, flash)
us191 4:424dd7f7b12c 52 */
us191 4:424dd7f7b12c 53 void Display::printMessage(string message, choiceStatusLED statusGreenLED, choiceStatusLED statusRedLED, choiceStatusLED statusOrangeLED) {
us191 4:424dd7f7b12c 54 // clear LCD screen and shutdown 3 LED
us191 4:424dd7f7b12c 55 this->clear();
us191 4:424dd7f7b12c 56
us191 4:424dd7f7b12c 57 // change green LED status to statusGreenLED
us191 4:424dd7f7b12c 58 this->changeStatusLED(Display::green, statusGreenLED);
us191 4:424dd7f7b12c 59 // ...
us191 4:424dd7f7b12c 60 this->changeStatusLED(Display::red, statusRedLED);
us191 4:424dd7f7b12c 61 this->changeStatusLED(Display::orange, statusOrangeLED);
us191 4:424dd7f7b12c 62
us191 4:424dd7f7b12c 63 if (this->checkMessage(message))
us191 4:424dd7f7b12c 64 // print message on LCD screen
us191 4:424dd7f7b12c 65 this->_lcd.printf("%s\n", message.c_str());
us191 4:424dd7f7b12c 66 else
us191 4:424dd7f7b12c 67 this->_lcd.printf("this message can't show rigthly");
us191 4:424dd7f7b12c 68 }
us191 4:424dd7f7b12c 69
us191 4:424dd7f7b12c 70
us191 4:424dd7f7b12c 71 /* put off 3 LED and clear LCD screen
us191 4:424dd7f7b12c 72 */
us191 4:424dd7f7b12c 73 void Display::clear(void) {
us191 4:424dd7f7b12c 74 this->shutdownLED();
us191 4:424dd7f7b12c 75 this->cls();
us191 4:424dd7f7b12c 76 }
us191 4:424dd7f7b12c 77
us191 4:424dd7f7b12c 78
us191 4:424dd7f7b12c 79
us191 4:424dd7f7b12c 80 /* change led status to statusLED
us191 4:424dd7f7b12c 81 * use by printMessage()
us191 4:424dd7f7b12c 82 *
us191 4:424dd7f7b12c 83 * @param led the led (green, red, orange)
us191 4:424dd7f7b12c 84 * @param statusLED new status (on, off, flash)
us191 4:424dd7f7b12c 85 */
us191 4:424dd7f7b12c 86 void Display::changeStatusLED(choiceLED led, choiceStatusLED statusLED) {
us191 4:424dd7f7b12c 87 Led *ptr_led;
us191 4:424dd7f7b12c 88
us191 4:424dd7f7b12c 89 // select LED
us191 4:424dd7f7b12c 90 switch (led) {
us191 4:424dd7f7b12c 91 case green : ptr_led = &_greenLED;
us191 4:424dd7f7b12c 92 break;
us191 4:424dd7f7b12c 93 case red : ptr_led = &_redLED;
us191 4:424dd7f7b12c 94 break;
us191 4:424dd7f7b12c 95 default : ptr_led = &_orangeLED;
us191 4:424dd7f7b12c 96 break;
us191 4:424dd7f7b12c 97 }
us191 4:424dd7f7b12c 98
us191 4:424dd7f7b12c 99 // change this status
us191 4:424dd7f7b12c 100 switch (statusLED) {
us191 4:424dd7f7b12c 101 case on : ptr_led->on();
us191 4:424dd7f7b12c 102 break;
us191 4:424dd7f7b12c 103 case flash : ptr_led->flash();
us191 4:424dd7f7b12c 104 break;
us191 4:424dd7f7b12c 105 default : ptr_led->off();
us191 4:424dd7f7b12c 106 break;
us191 4:424dd7f7b12c 107 }
us191 4:424dd7f7b12c 108 }
us191 4:424dd7f7b12c 109
us191 4:424dd7f7b12c 110 /* put off 3 LED
us191 4:424dd7f7b12c 111 * use by clear()
us191 4:424dd7f7b12c 112 */
us191 4:424dd7f7b12c 113 void Display::shutdownLED(void) {
us191 4:424dd7f7b12c 114 _greenLED.off(); _redLED.off(); _orangeLED.off();
us191 4:424dd7f7b12c 115 }
us191 4:424dd7f7b12c 116
us191 4:424dd7f7b12c 117 /* clear LCD screen
us191 4:424dd7f7b12c 118 * use by clear()
us191 4:424dd7f7b12c 119 */
us191 4:424dd7f7b12c 120 void Display::cls(void) {
us191 4:424dd7f7b12c 121 _lcd.cls();
us191 4:424dd7f7b12c 122 }
us191 4:424dd7f7b12c 123
us191 4:424dd7f7b12c 124 /* check if this message can be display correctly on LCD screen
us191 4:424dd7f7b12c 125 * use by printMessage()
us191 4:424dd7f7b12c 126 *
us191 4:424dd7f7b12c 127 * @param message the message to be verified
us191 4:424dd7f7b12c 128 * @return
us191 4:424dd7f7b12c 129 * true if message is ok
us191 4:424dd7f7b12c 130 * flase else
us191 4:424dd7f7b12c 131 */
us191 4:424dd7f7b12c 132 bool Display::checkMessage(string message) {
us191 4:424dd7f7b12c 133 // check message length (don't exceed screen capacity)
us191 4:424dd7f7b12c 134 unsigned int screenSize = _lcd.columns() * _lcd.rows();
us191 4:424dd7f7b12c 135 if (message.length() > screenSize)
us191 4:424dd7f7b12c 136 return false;
us191 4:424dd7f7b12c 137
us191 4:424dd7f7b12c 138 // check number of '\n'
us191 4:424dd7f7b12c 139 // TextLCD is circular, so if we are on last line, a '\n' we come back on first line
us191 4:424dd7f7b12c 140 int nbCRLF = this->calculNbCRLF(message);
us191 4:424dd7f7b12c 141 if (nbCRLF >= _lcd.rows())
us191 4:424dd7f7b12c 142 return false;
us191 4:424dd7f7b12c 143
us191 4:424dd7f7b12c 144 // check all line length (don't exceed column capacity)
us191 4:424dd7f7b12c 145 std::vector<std::string> allLine = this->subAllLine(message);
us191 4:424dd7f7b12c 146 int lineLength;
us191 4:424dd7f7b12c 147 for (unsigned int i = 0; i < allLine.size(); i++) {
us191 4:424dd7f7b12c 148 lineLength = allLine[i].length();
us191 4:424dd7f7b12c 149 if (lineLength > _lcd.columns())
us191 4:424dd7f7b12c 150 return false;
us191 4:424dd7f7b12c 151 }
us191 4:424dd7f7b12c 152
us191 4:424dd7f7b12c 153
us191 4:424dd7f7b12c 154 return true;
us191 4:424dd7f7b12c 155 }
us191 4:424dd7f7b12c 156
us191 4:424dd7f7b12c 157 /* calcul number of '\n'
us191 4:424dd7f7b12c 158 * use by checkMessage()
us191 4:424dd7f7b12c 159 *
us191 4:424dd7f7b12c 160 * @param message the message to be analyse
us191 4:424dd7f7b12c 161 * @return number of '\n'
us191 4:424dd7f7b12c 162 */
us191 4:424dd7f7b12c 163 int Display::calculNbCRLF(string message) {
us191 4:424dd7f7b12c 164 unsigned int index = 0, nbCRLF = 0;
us191 4:424dd7f7b12c 165
us191 4:424dd7f7b12c 166 while ((index = message.find('\n', index)) != std::string::npos) { // npos is a static member constant of string,
us191 4:424dd7f7b12c 167 nbCRLF++; // defined with a value of -1
us191 4:424dd7f7b12c 168 index++;
us191 4:424dd7f7b12c 169 }
us191 4:424dd7f7b12c 170
us191 4:424dd7f7b12c 171 return nbCRLF;
us191 4:424dd7f7b12c 172 }
us191 4:424dd7f7b12c 173
us191 4:424dd7f7b12c 174 /* return vector of all line message
us191 4:424dd7f7b12c 175 * use by checkMessage()
us191 4:424dd7f7b12c 176 *
us191 4:424dd7f7b12c 177 * @param message the message to be cut
us191 4:424dd7f7b12c 178 * @return a vector which contains a line of the message by entry
us191 4:424dd7f7b12c 179 */
us191 4:424dd7f7b12c 180 vector<string> Display::subAllLine(string message) {
us191 4:424dd7f7b12c 181 std::vector<std::string> allLine;
us191 4:424dd7f7b12c 182 unsigned int index = 0, indexNext = 0;
us191 4:424dd7f7b12c 183
us191 4:424dd7f7b12c 184 // get next '\n' from last position
us191 4:424dd7f7b12c 185 while ((indexNext = message.find('\n', index)) != std::string::npos) {
us191 4:424dd7f7b12c 186 // sub new line (with '\n')
us191 4:424dd7f7b12c 187 allLine.push_back(message.substr(index, indexNext-index+1));
us191 4:424dd7f7b12c 188 // go to next line
us191 4:424dd7f7b12c 189 index = indexNext + 1;
us191 4:424dd7f7b12c 190 }
us191 4:424dd7f7b12c 191
us191 4:424dd7f7b12c 192 // get last line
us191 4:424dd7f7b12c 193 allLine.push_back(message.substr(index));
us191 4:424dd7f7b12c 194
us191 4:424dd7f7b12c 195 return allLine;
us191 4:424dd7f7b12c 196 }