![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Sampling ldr temp and pressure data into 120 sample FIFO buffer.
Fork of Task690-mbed-os-FZ429ZI by
LCD/LCD.cpp@6:c2299e3de428, 2017-12-23 (annotated)
- Committer:
- osmith2
- Date:
- Sat Dec 23 18:44:37 2017 +0000
- Revision:
- 6:c2299e3de428
used sprintf to put all info (date,time,temp,pressure,ldr) into a string of characters, called DaT; ; It is my recommendation that the addToBuffer function be changed from float to char, as the only thing that needs to go into the buffer is DaT.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
osmith2 | 6:c2299e3de428 | 1 | #include "mbed.h" |
osmith2 | 6:c2299e3de428 | 2 | #include "LCD.h" |
osmith2 | 6:c2299e3de428 | 3 | |
osmith2 | 6:c2299e3de428 | 4 | int setInt = 0; |
osmith2 | 6:c2299e3de428 | 5 | Ticker T; |
osmith2 | 6:c2299e3de428 | 6 | |
osmith2 | 6:c2299e3de428 | 7 | NewLCD::NewLCD(PinName RS, PinName E, PinName D0, PinName D1, PinName D2, PinName D3) : _RS(RS),_E(E), _D(D0, D1, D2, D3) { |
osmith2 | 6:c2299e3de428 | 8 | |
osmith2 | 6:c2299e3de428 | 9 | _E = 0; |
osmith2 | 6:c2299e3de428 | 10 | wait(0.000040f); |
osmith2 | 6:c2299e3de428 | 11 | _E = 1; |
osmith2 | 6:c2299e3de428 | 12 | _RS = 0; //Command mode |
osmith2 | 6:c2299e3de428 | 13 | |
osmith2 | 6:c2299e3de428 | 14 | wait(0.015); //Wait 15ms to ensure device is powered |
osmith2 | 6:c2299e3de428 | 15 | |
osmith2 | 6:c2299e3de428 | 16 | for (int i=0; i<3; i++) { |
osmith2 | 6:c2299e3de428 | 17 | writeByte(0x03); //set DDRAM address to 0. Do this multiple times |
osmith2 | 6:c2299e3de428 | 18 | wait(0.00164); |
osmith2 | 6:c2299e3de428 | 19 | } |
osmith2 | 6:c2299e3de428 | 20 | |
osmith2 | 6:c2299e3de428 | 21 | writeByte(0x2); //4-bit mode. Not sure how this sets bits 5 & 4 when we shift them using writeByte. 0010 0000 or 0000 0010? |
osmith2 | 6:c2299e3de428 | 22 | wait(0.000040f); |
osmith2 | 6:c2299e3de428 | 23 | |
osmith2 | 6:c2299e3de428 | 24 | writeCommand(0x28); //4-bit mode, 2 lines, 5x8 dots. 0010 1000 |
osmith2 | 6:c2299e3de428 | 25 | writeCommand(0x0F); //display on, cursor off, blinking cursor off. 0000 1100 (0x0C for nomral operation, 0x0F for everything on) |
osmith2 | 6:c2299e3de428 | 26 | writeCommand(0x06); //cursor moves to right when displaying text. 0000 0110 |
osmith2 | 6:c2299e3de428 | 27 | wait(0.00152); |
osmith2 | 6:c2299e3de428 | 28 | |
osmith2 | 6:c2299e3de428 | 29 | hours = 0; |
osmith2 | 6:c2299e3de428 | 30 | minutes = 0; |
osmith2 | 6:c2299e3de428 | 31 | day = 0; |
osmith2 | 6:c2299e3de428 | 32 | month = 0; |
osmith2 | 6:c2299e3de428 | 33 | year = 2017; |
osmith2 | 6:c2299e3de428 | 34 | firstSet = true; |
osmith2 | 6:c2299e3de428 | 35 | |
osmith2 | 6:c2299e3de428 | 36 | } |
osmith2 | 6:c2299e3de428 | 37 | |
osmith2 | 6:c2299e3de428 | 38 | void NewLCD::charDisp(int column, int row, char c) { |
osmith2 | 6:c2299e3de428 | 39 | int addr = DDRAMAddress(column, row); |
osmith2 | 6:c2299e3de428 | 40 | writeCommand(addr); |
osmith2 | 6:c2299e3de428 | 41 | writeData(c); |
osmith2 | 6:c2299e3de428 | 42 | } |
osmith2 | 6:c2299e3de428 | 43 | |
osmith2 | 6:c2299e3de428 | 44 | int NewLCD::DDRAMAddress(int column, int row) { |
osmith2 | 6:c2299e3de428 | 45 | return (0x80 + (row * 0x40) + column); |
osmith2 | 6:c2299e3de428 | 46 | } |
osmith2 | 6:c2299e3de428 | 47 | |
osmith2 | 6:c2299e3de428 | 48 | void NewLCD::cursorLocation(int column, int row) { |
osmith2 | 6:c2299e3de428 | 49 | _column = column; |
osmith2 | 6:c2299e3de428 | 50 | _row = row; |
osmith2 | 6:c2299e3de428 | 51 | } |
osmith2 | 6:c2299e3de428 | 52 | |
osmith2 | 6:c2299e3de428 | 53 | void NewLCD::shiftCursor(string direction) { |
osmith2 | 6:c2299e3de428 | 54 | if (direction == "right") { //shift to right |
osmith2 | 6:c2299e3de428 | 55 | writeCommand(0x14); //0001 0100 |
osmith2 | 6:c2299e3de428 | 56 | } else if (direction == "left") { //shift to left |
osmith2 | 6:c2299e3de428 | 57 | writeCommand(0x10); //0001 0000 |
osmith2 | 6:c2299e3de428 | 58 | } |
osmith2 | 6:c2299e3de428 | 59 | } |
osmith2 | 6:c2299e3de428 | 60 | |
osmith2 | 6:c2299e3de428 | 61 | void NewLCD::clearScreen() { |
osmith2 | 6:c2299e3de428 | 62 | writeCommand(0x01); //clear screen and set cursor to 0 |
osmith2 | 6:c2299e3de428 | 63 | wait(0.00164f); //this command takes 1.64 ms |
osmith2 | 6:c2299e3de428 | 64 | cursorLocation(0, 0); |
osmith2 | 6:c2299e3de428 | 65 | } |
osmith2 | 6:c2299e3de428 | 66 | |
osmith2 | 6:c2299e3de428 | 67 | int NewLCD::_putc(int txt) { |
osmith2 | 6:c2299e3de428 | 68 | if (txt == '\n') { |
osmith2 | 6:c2299e3de428 | 69 | _column = 0; |
osmith2 | 6:c2299e3de428 | 70 | _row++; |
osmith2 | 6:c2299e3de428 | 71 | if (_row >= 2) { |
osmith2 | 6:c2299e3de428 | 72 | _row = 0; |
osmith2 | 6:c2299e3de428 | 73 | } |
osmith2 | 6:c2299e3de428 | 74 | } else { |
osmith2 | 6:c2299e3de428 | 75 | charDisp(_column, _row, txt); |
osmith2 | 6:c2299e3de428 | 76 | _column++; |
osmith2 | 6:c2299e3de428 | 77 | if (_column >= 16) { |
osmith2 | 6:c2299e3de428 | 78 | _column = 0; |
osmith2 | 6:c2299e3de428 | 79 | _row++; |
osmith2 | 6:c2299e3de428 | 80 | if (_row >= 2) { |
osmith2 | 6:c2299e3de428 | 81 | _row = 0; |
osmith2 | 6:c2299e3de428 | 82 | } |
osmith2 | 6:c2299e3de428 | 83 | } |
osmith2 | 6:c2299e3de428 | 84 | } |
osmith2 | 6:c2299e3de428 | 85 | return txt; |
osmith2 | 6:c2299e3de428 | 86 | } |
osmith2 | 6:c2299e3de428 | 87 | int NewLCD::_repc(int txt) { |
osmith2 | 6:c2299e3de428 | 88 | if (txt == '\n') { |
osmith2 | 6:c2299e3de428 | 89 | _column = 0; |
osmith2 | 6:c2299e3de428 | 90 | _row++; |
osmith2 | 6:c2299e3de428 | 91 | if (_row >= 2) { |
osmith2 | 6:c2299e3de428 | 92 | _row = 0; |
osmith2 | 6:c2299e3de428 | 93 | } |
osmith2 | 6:c2299e3de428 | 94 | } else { |
osmith2 | 6:c2299e3de428 | 95 | charDisp(_column, _row, txt); |
osmith2 | 6:c2299e3de428 | 96 | if (_column >= 16) { |
osmith2 | 6:c2299e3de428 | 97 | _column = 0; |
osmith2 | 6:c2299e3de428 | 98 | _row++; |
osmith2 | 6:c2299e3de428 | 99 | if (_row >= 2) { |
osmith2 | 6:c2299e3de428 | 100 | _row = 0; |
osmith2 | 6:c2299e3de428 | 101 | } |
osmith2 | 6:c2299e3de428 | 102 | } |
osmith2 | 6:c2299e3de428 | 103 | } |
osmith2 | 6:c2299e3de428 | 104 | return txt; |
osmith2 | 6:c2299e3de428 | 105 | } |
osmith2 | 6:c2299e3de428 | 106 | |
osmith2 | 6:c2299e3de428 | 107 | |
osmith2 | 6:c2299e3de428 | 108 | int NewLCD::_getc() { |
osmith2 | 6:c2299e3de428 | 109 | return -1; |
osmith2 | 6:c2299e3de428 | 110 | } |
osmith2 | 6:c2299e3de428 | 111 | |
osmith2 | 6:c2299e3de428 | 112 | void NewLCD::writeByte(char byteToSend) { |
osmith2 | 6:c2299e3de428 | 113 | _D = byteToSend >> 4; |
osmith2 | 6:c2299e3de428 | 114 | wait(0.000040f); // most instructions take 40us |
osmith2 | 6:c2299e3de428 | 115 | _E = 0; |
osmith2 | 6:c2299e3de428 | 116 | wait(0.000040f); |
osmith2 | 6:c2299e3de428 | 117 | _E = 1; |
osmith2 | 6:c2299e3de428 | 118 | _D = byteToSend >> 0; |
osmith2 | 6:c2299e3de428 | 119 | wait(0.000040f); |
osmith2 | 6:c2299e3de428 | 120 | _E = 0; |
osmith2 | 6:c2299e3de428 | 121 | wait(0.000040f); // most instructions take 40us |
osmith2 | 6:c2299e3de428 | 122 | _E = 1; |
osmith2 | 6:c2299e3de428 | 123 | } |
osmith2 | 6:c2299e3de428 | 124 | |
osmith2 | 6:c2299e3de428 | 125 | void NewLCD::writeCommand(char commandToSend) { |
osmith2 | 6:c2299e3de428 | 126 | _RS = 0; |
osmith2 | 6:c2299e3de428 | 127 | writeByte(commandToSend); |
osmith2 | 6:c2299e3de428 | 128 | } |
osmith2 | 6:c2299e3de428 | 129 | |
osmith2 | 6:c2299e3de428 | 130 | void NewLCD::writeData(char dataToSend) { |
osmith2 | 6:c2299e3de428 | 131 | _RS = 1; |
osmith2 | 6:c2299e3de428 | 132 | writeByte(dataToSend); |
osmith2 | 6:c2299e3de428 | 133 | } |
osmith2 | 6:c2299e3de428 | 134 | |
osmith2 | 6:c2299e3de428 | 135 | void NewLCD::setDateAndTime(int sw1s, int sw2s) { |
osmith2 | 6:c2299e3de428 | 136 | |
osmith2 | 6:c2299e3de428 | 137 | clearScreen(); |
osmith2 | 6:c2299e3de428 | 138 | printf("Time: %d:%d\n", hours, minutes); |
osmith2 | 6:c2299e3de428 | 139 | printf("Date: %d/%d/%d", day, month, year); |
osmith2 | 6:c2299e3de428 | 140 | if(sw1s == 1){ |
osmith2 | 6:c2299e3de428 | 141 | wait(0.2); |
osmith2 | 6:c2299e3de428 | 142 | setInt = setInt + 1; |
osmith2 | 6:c2299e3de428 | 143 | if(setInt >= 5) { |
osmith2 | 6:c2299e3de428 | 144 | setInt = 1; |
osmith2 | 6:c2299e3de428 | 145 | } |
osmith2 | 6:c2299e3de428 | 146 | } |
osmith2 | 6:c2299e3de428 | 147 | |
osmith2 | 6:c2299e3de428 | 148 | switch(setInt){ |
osmith2 | 6:c2299e3de428 | 149 | case 1: |
osmith2 | 6:c2299e3de428 | 150 | if(sw2s == 1) { |
osmith2 | 6:c2299e3de428 | 151 | wait(0.2); |
osmith2 | 6:c2299e3de428 | 152 | minutes = minutes + 1; |
osmith2 | 6:c2299e3de428 | 153 | if(minutes >= 60) { |
osmith2 | 6:c2299e3de428 | 154 | minutes = 0; |
osmith2 | 6:c2299e3de428 | 155 | } |
osmith2 | 6:c2299e3de428 | 156 | |
osmith2 | 6:c2299e3de428 | 157 | } |
osmith2 | 6:c2299e3de428 | 158 | break; |
osmith2 | 6:c2299e3de428 | 159 | case 2: |
osmith2 | 6:c2299e3de428 | 160 | if(sw2s == 1) { |
osmith2 | 6:c2299e3de428 | 161 | wait(0.2); |
osmith2 | 6:c2299e3de428 | 162 | hours = hours + 1; |
osmith2 | 6:c2299e3de428 | 163 | if(hours >= 24) { |
osmith2 | 6:c2299e3de428 | 164 | hours = 0; |
osmith2 | 6:c2299e3de428 | 165 | } |
osmith2 | 6:c2299e3de428 | 166 | |
osmith2 | 6:c2299e3de428 | 167 | } |
osmith2 | 6:c2299e3de428 | 168 | break; |
osmith2 | 6:c2299e3de428 | 169 | case 3: |
osmith2 | 6:c2299e3de428 | 170 | |
osmith2 | 6:c2299e3de428 | 171 | if(sw2s == 1) { |
osmith2 | 6:c2299e3de428 | 172 | wait(0.2); |
osmith2 | 6:c2299e3de428 | 173 | month = month + 1; |
osmith2 | 6:c2299e3de428 | 174 | if(month >= 12) { |
osmith2 | 6:c2299e3de428 | 175 | month = 0; |
osmith2 | 6:c2299e3de428 | 176 | } |
osmith2 | 6:c2299e3de428 | 177 | |
osmith2 | 6:c2299e3de428 | 178 | } |
osmith2 | 6:c2299e3de428 | 179 | |
osmith2 | 6:c2299e3de428 | 180 | break; |
osmith2 | 6:c2299e3de428 | 181 | case 4: |
osmith2 | 6:c2299e3de428 | 182 | if(sw2s == 1) { |
osmith2 | 6:c2299e3de428 | 183 | wait(0.2); |
osmith2 | 6:c2299e3de428 | 184 | day = day + 1; |
osmith2 | 6:c2299e3de428 | 185 | if(day >= 31) { |
osmith2 | 6:c2299e3de428 | 186 | day = 0; |
osmith2 | 6:c2299e3de428 | 187 | } |
osmith2 | 6:c2299e3de428 | 188 | |
osmith2 | 6:c2299e3de428 | 189 | } |
osmith2 | 6:c2299e3de428 | 190 | break; |
osmith2 | 6:c2299e3de428 | 191 | default: |
osmith2 | 6:c2299e3de428 | 192 | break; |
osmith2 | 6:c2299e3de428 | 193 | } |
osmith2 | 6:c2299e3de428 | 194 | |
osmith2 | 6:c2299e3de428 | 195 | } |
osmith2 | 6:c2299e3de428 | 196 | void NewLCD::updateClock() { |
osmith2 | 6:c2299e3de428 | 197 | minutes = minutes + 1; |
osmith2 | 6:c2299e3de428 | 198 | if(minutes >= 60) { |
osmith2 | 6:c2299e3de428 | 199 | minutes = 0; |
osmith2 | 6:c2299e3de428 | 200 | hours = hours + 1; |
osmith2 | 6:c2299e3de428 | 201 | if(hours >= 24) { |
osmith2 | 6:c2299e3de428 | 202 | hours = 0; |
osmith2 | 6:c2299e3de428 | 203 | day = day + 1; |
osmith2 | 6:c2299e3de428 | 204 | if(day >= 31) { |
osmith2 | 6:c2299e3de428 | 205 | day = 0; |
osmith2 | 6:c2299e3de428 | 206 | month = month + 1; |
osmith2 | 6:c2299e3de428 | 207 | if(month >= 12) { |
osmith2 | 6:c2299e3de428 | 208 | month = 0; |
osmith2 | 6:c2299e3de428 | 209 | } |
osmith2 | 6:c2299e3de428 | 210 | } |
osmith2 | 6:c2299e3de428 | 211 | } |
osmith2 | 6:c2299e3de428 | 212 | } |
osmith2 | 6:c2299e3de428 | 213 | clearScreen(); |
osmith2 | 6:c2299e3de428 | 214 | printf("Time: %d:%d\n", hours, minutes); |
osmith2 | 6:c2299e3de428 | 215 | printf("Date: %d/%d/%d", day, month, year); |
osmith2 | 6:c2299e3de428 | 216 | } |
osmith2 | 6:c2299e3de428 | 217 | |
osmith2 | 6:c2299e3de428 | 218 | void NewLCD::startClock() { |
osmith2 | 6:c2299e3de428 | 219 | T.attach(this, &NewLCD::updateClock, 60); |
osmith2 | 6:c2299e3de428 | 220 | } |
osmith2 | 6:c2299e3de428 | 221 | |
osmith2 | 6:c2299e3de428 | 222 | |
osmith2 | 6:c2299e3de428 | 223 |