Sampling ldr temp and pressure data into 120 sample FIFO buffer.

Dependencies:   BME280 BMP280

Fork of Task690-mbed-os-FZ429ZI by University of Plymouth - Stages 1, 2 and 3

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?

UserRevisionLine numberNew 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