Comments added

Dependencies:   Peripherals Buffer_lib_v2 SD_Lib_EffedUP_ERP Time_Lib_v2 Year3_Version5 BMP280 Network_Lib TextLCD BME280

Committer:
cgogay
Date:
Fri Nov 23 12:40:27 2018 +0000
Revision:
6:2ef9c06ce506
Parent:
5:60e116a1e913
Child:
7:981670f59caf
LDR sensor, serial protocol READ ALL command, requirement 7

Who changed what in which revision?

UserRevisionLine numberNew contents of line
noutram 0:90e393878517 1 #include "mbed.h"
emilytrembeth 4:da63962bc0f1 2 #include "TextLCD.h"
emilytrembeth 4:da63962bc0f1 3 #include "SDBlockDevice.h"
emilytrembeth 4:da63962bc0f1 4 #include "FATFileSystem.h"
emilytrembeth 4:da63962bc0f1 5 #include "sample_hardware.hpp"
noutram 0:90e393878517 6
emilytrembeth 5:60e116a1e913 7 #define Day 1
emilytrembeth 5:60e116a1e913 8 #define Month 2
emilytrembeth 5:60e116a1e913 9 #define Year 3
emilytrembeth 5:60e116a1e913 10 #define Hour 4
emilytrembeth 5:60e116a1e913 11 #define Minute 5
emilytrembeth 5:60e116a1e913 12 #define Second 6
emilytrembeth 5:60e116a1e913 13
noutram 0:90e393878517 14 //Function declarations
emilytrembeth 4:da63962bc0f1 15 void displayOnLcd();
emilytrembeth 4:da63962bc0f1 16 void updateRealTimeClock(char *buffer);
emilytrembeth 4:da63962bc0f1 17 void getLineFromSerial(char *keyBuffer, int bufferLength);
emilytrembeth 4:da63962bc0f1 18 void displayMessageOnConsole();
emilytrembeth 5:60e116a1e913 19 void SetingTimeWithButtons ();
emilytrembeth 5:60e116a1e913 20 void FunctionSensor();
emilytrembeth 5:60e116a1e913 21 void FunctionTime();
noutram 0:90e393878517 22
emilytrembeth 4:da63962bc0f1 23 TextLCD lcd(D9, D8, D7, D6, D4, D2); // rs, e, d4-d7
emilytrembeth 4:da63962bc0f1 24 SDBlockDevice sd(PB_5, D12, D13, D10); // mosi, miso, sclk, cs
emilytrembeth 4:da63962bc0f1 25 Serial pc(SERIAL_TX, SERIAL_RX);
emilytrembeth 4:da63962bc0f1 26 time_t currentTime;
emilytrembeth 4:da63962bc0f1 27 char lcdBuffer[32];
emilytrembeth 4:da63962bc0f1 28 DigitalOut myled(LED1);
emilytrembeth 4:da63962bc0f1 29 Ticker ticker;
emilytrembeth 4:da63962bc0f1 30 DigitalIn SWUser(USER_BUTTON);
emilytrembeth 4:da63962bc0f1 31 Mutex date_mutex;
emilytrembeth 5:60e116a1e913 32 int setting;
emilytrembeth 5:60e116a1e913 33 int t;
emilytrembeth 5:60e116a1e913 34 //InterruptIn SW1;
noutram 0:90e393878517 35
noutram 1:948bd552a2a2 36 Thread t1;
noutram 1:948bd552a2a2 37 Thread t2;
emilytrembeth 4:da63962bc0f1 38
emilytrembeth 4:da63962bc0f1 39
cgogay 6:2ef9c06ce506 40 //Main thread
cgogay 6:2ef9c06ce506 41 int main() {
cgogay 6:2ef9c06ce506 42
cgogay 6:2ef9c06ce506 43 lcd.printf("Select Time Option\n\n");
cgogay 6:2ef9c06ce506 44
cgogay 6:2ef9c06ce506 45 post();
cgogay 6:2ef9c06ce506 46
cgogay 6:2ef9c06ce506 47 //Initialise the SD card
cgogay 6:2ef9c06ce506 48 if ( sd.init() != 0) {
cgogay 6:2ef9c06ce506 49 printf("Init failed \n");
cgogay 6:2ef9c06ce506 50 errorCode(FATAL);
cgogay 6:2ef9c06ce506 51 }
cgogay 6:2ef9c06ce506 52
cgogay 6:2ef9c06ce506 53 //Create a filing system for SD Card
cgogay 6:2ef9c06ce506 54 FATFileSystem fs("sd", &sd);
cgogay 6:2ef9c06ce506 55
cgogay 6:2ef9c06ce506 56 //Open to WRITE
cgogay 6:2ef9c06ce506 57 FILE* fp = fopen("/sd/test.csv","a");
cgogay 6:2ef9c06ce506 58 if (fp == NULL) {
cgogay 6:2ef9c06ce506 59 error("Could not open file for write\n");
cgogay 6:2ef9c06ce506 60 errorCode(FATAL);
cgogay 6:2ef9c06ce506 61 }
cgogay 6:2ef9c06ce506 62
cgogay 6:2ef9c06ce506 63 // run threads
cgogay 6:2ef9c06ce506 64 t1.start(FunctionSensor);
cgogay 6:2ef9c06ce506 65 t2.start(FunctionTime);
cgogay 6:2ef9c06ce506 66
cgogay 6:2ef9c06ce506 67 }
cgogay 6:2ef9c06ce506 68
cgogay 6:2ef9c06ce506 69
emilytrembeth 4:da63962bc0f1 70 void displayOnLcd() {
emilytrembeth 4:da63962bc0f1 71 date_mutex.lock();
emilytrembeth 4:da63962bc0f1 72
emilytrembeth 4:da63962bc0f1 73 myled = !myled;
emilytrembeth 4:da63962bc0f1 74
emilytrembeth 4:da63962bc0f1 75 currentTime = time(NULL);
emilytrembeth 5:60e116a1e913 76 strftime(lcdBuffer, 32, "%d/%m/%Y %H:%M:%S", localtime(&currentTime));
emilytrembeth 4:da63962bc0f1 77
emilytrembeth 4:da63962bc0f1 78 //lcd.cls();
emilytrembeth 5:60e116a1e913 79 // lcd.locate(0,0);
emilytrembeth 4:da63962bc0f1 80 pc.printf("%s\n\r", lcdBuffer);
emilytrembeth 4:da63962bc0f1 81
emilytrembeth 4:da63962bc0f1 82 myled = !myled;
emilytrembeth 4:da63962bc0f1 83 date_mutex.unlock();
emilytrembeth 4:da63962bc0f1 84 };
noutram 0:90e393878517 85
emilytrembeth 4:da63962bc0f1 86 void updateRealTimeClock(char *buffer) {
emilytrembeth 4:da63962bc0f1 87 date_mutex.lock();
emilytrembeth 4:da63962bc0f1 88
emilytrembeth 4:da63962bc0f1 89 char *tp;
emilytrembeth 4:da63962bc0f1 90 char *timeArray[6];
emilytrembeth 4:da63962bc0f1 91 int arrayIndex;
emilytrembeth 4:da63962bc0f1 92 struct tm struct_time;
emilytrembeth 4:da63962bc0f1 93
emilytrembeth 4:da63962bc0f1 94 // extract number from string
emilytrembeth 4:da63962bc0f1 95 arrayIndex = 0;
emilytrembeth 4:da63962bc0f1 96 tp = strtok( buffer, " /:-" );
emilytrembeth 4:da63962bc0f1 97 timeArray[arrayIndex++] = tp;
emilytrembeth 4:da63962bc0f1 98 printf("%d ", atoi(tp));
emilytrembeth 4:da63962bc0f1 99 while ( tp != NULL && arrayIndex < 6 ) {
emilytrembeth 4:da63962bc0f1 100 tp = strtok( NULL," /:-" );
emilytrembeth 4:da63962bc0f1 101 timeArray[arrayIndex++] = tp;
emilytrembeth 4:da63962bc0f1 102 if ( tp != NULL ) {
emilytrembeth 4:da63962bc0f1 103 printf("%d ", atoi(tp));
emilytrembeth 4:da63962bc0f1 104 }
emilytrembeth 4:da63962bc0f1 105 }
emilytrembeth 4:da63962bc0f1 106 printf("\r\n");
emilytrembeth 4:da63962bc0f1 107
emilytrembeth 4:da63962bc0f1 108 // store number into time struct
emilytrembeth 5:60e116a1e913 109 struct_time.tm_mday = atoi(timeArray[0]);
emilytrembeth 4:da63962bc0f1 110 struct_time.tm_mon = atoi(timeArray[1]) - 1;
emilytrembeth 5:60e116a1e913 111 struct_time.tm_year = atoi(timeArray[2]) - 1900;
emilytrembeth 4:da63962bc0f1 112 struct_time.tm_hour = atoi(timeArray[3]);
emilytrembeth 4:da63962bc0f1 113 struct_time.tm_min = atoi(timeArray[4]);
emilytrembeth 4:da63962bc0f1 114 struct_time.tm_sec = atoi(timeArray[5]);
emilytrembeth 4:da63962bc0f1 115
emilytrembeth 4:da63962bc0f1 116 currentTime = mktime(&struct_time);
emilytrembeth 4:da63962bc0f1 117 set_time(currentTime);
emilytrembeth 4:da63962bc0f1 118
emilytrembeth 4:da63962bc0f1 119 date_mutex.unlock();
emilytrembeth 4:da63962bc0f1 120 }
emilytrembeth 4:da63962bc0f1 121
emilytrembeth 4:da63962bc0f1 122 void getLineFromSerial(char *keyBuffer, int bufferLength)
emilytrembeth 4:da63962bc0f1 123 {
emilytrembeth 4:da63962bc0f1 124 date_mutex.lock();
emilytrembeth 4:da63962bc0f1 125
emilytrembeth 4:da63962bc0f1 126 char c;
emilytrembeth 4:da63962bc0f1 127 int index = 0;
emilytrembeth 4:da63962bc0f1 128
emilytrembeth 4:da63962bc0f1 129 for (;;) {
emilytrembeth 4:da63962bc0f1 130 // break if keyBuffer is full
emilytrembeth 4:da63962bc0f1 131 if (index >= bufferLength) {
emilytrembeth 4:da63962bc0f1 132 break;
emilytrembeth 4:da63962bc0f1 133 }
emilytrembeth 4:da63962bc0f1 134
emilytrembeth 4:da63962bc0f1 135 // read input
emilytrembeth 4:da63962bc0f1 136 c = pc.getc();
emilytrembeth 4:da63962bc0f1 137 //printf(" %d ", c);
emilytrembeth 4:da63962bc0f1 138 pc.putc(c);
emilytrembeth 4:da63962bc0f1 139
emilytrembeth 4:da63962bc0f1 140 // break if end
emilytrembeth 4:da63962bc0f1 141 if (c == '\r') {
emilytrembeth 4:da63962bc0f1 142 keyBuffer[index++] = c;
emilytrembeth 4:da63962bc0f1 143 printf("\n");
emilytrembeth 4:da63962bc0f1 144 break;
emilytrembeth 4:da63962bc0f1 145 }
emilytrembeth 4:da63962bc0f1 146
emilytrembeth 4:da63962bc0f1 147 // store in keyBuffer
emilytrembeth 4:da63962bc0f1 148 keyBuffer[index++] = c;
emilytrembeth 4:da63962bc0f1 149
emilytrembeth 4:da63962bc0f1 150 date_mutex.unlock();
emilytrembeth 4:da63962bc0f1 151 }
emilytrembeth 4:da63962bc0f1 152 }
emilytrembeth 4:da63962bc0f1 153
emilytrembeth 4:da63962bc0f1 154 void displayMessageOnConsole() {
emilytrembeth 4:da63962bc0f1 155 date_mutex.lock();
emilytrembeth 4:da63962bc0f1 156
emilytrembeth 4:da63962bc0f1 157 currentTime = time(NULL);
emilytrembeth 5:60e116a1e913 158 //strftime(lcdBuffer, 32, "%Y/%m/%d %H:%M:%S", localtime(&currentTime));
emilytrembeth 5:60e116a1e913 159 strftime(lcdBuffer, 32, "%d/%m/%Y %H:%M:%S", localtime(&currentTime));
emilytrembeth 4:da63962bc0f1 160
emilytrembeth 4:da63962bc0f1 161 printf("Current Time:%s\r\n", lcdBuffer);
emilytrembeth 5:60e116a1e913 162 printf("Enter new Time (dd/mm/YYYY HH:MM:SS)\r\n");
emilytrembeth 4:da63962bc0f1 163
emilytrembeth 4:da63962bc0f1 164 date_mutex.unlock();
emilytrembeth 4:da63962bc0f1 165 }
emilytrembeth 4:da63962bc0f1 166
emilytrembeth 5:60e116a1e913 167 void SetingTimeWithButtons () {
emilytrembeth 5:60e116a1e913 168
emilytrembeth 5:60e116a1e913 169 int day = 0;
emilytrembeth 5:60e116a1e913 170 int month = 0;
emilytrembeth 5:60e116a1e913 171 int year = 2017;
emilytrembeth 5:60e116a1e913 172 int hour = 0;
emilytrembeth 5:60e116a1e913 173 int min = 0;
emilytrembeth 5:60e116a1e913 174 int sec = 0;
emilytrembeth 5:60e116a1e913 175
emilytrembeth 5:60e116a1e913 176 setting = Day;
emilytrembeth 5:60e116a1e913 177 t = 1;
emilytrembeth 5:60e116a1e913 178
emilytrembeth 5:60e116a1e913 179 while(t == 1) {
emilytrembeth 5:60e116a1e913 180 switch (setting) {
emilytrembeth 5:60e116a1e913 181 case Day:
emilytrembeth 5:60e116a1e913 182 if (SW1 == 1) {
emilytrembeth 5:60e116a1e913 183 wait(0.2);
emilytrembeth 5:60e116a1e913 184 day = day + 1;
emilytrembeth 5:60e116a1e913 185 lcd.cls();
emilytrembeth 5:60e116a1e913 186 lcd.locate(0,0);
cgogay 6:2ef9c06ce506 187 lcd.printf("Day = %d\n", day);
emilytrembeth 5:60e116a1e913 188 }
emilytrembeth 5:60e116a1e913 189 if (SW2 == 1) {
emilytrembeth 5:60e116a1e913 190 setting = Month;
emilytrembeth 5:60e116a1e913 191 wait(0.5);
emilytrembeth 5:60e116a1e913 192 }
emilytrembeth 5:60e116a1e913 193 break;
emilytrembeth 5:60e116a1e913 194
emilytrembeth 5:60e116a1e913 195 case Month:
emilytrembeth 5:60e116a1e913 196 if (SW1 == 1) {
emilytrembeth 5:60e116a1e913 197 wait(0.2);
emilytrembeth 5:60e116a1e913 198 month = month + 1;
emilytrembeth 5:60e116a1e913 199 lcd.cls();
emilytrembeth 5:60e116a1e913 200 lcd.locate(0,0);
cgogay 6:2ef9c06ce506 201 lcd.printf("Month = %d\n", month);
emilytrembeth 5:60e116a1e913 202 }
emilytrembeth 5:60e116a1e913 203 if (SW2 == 1) {
emilytrembeth 5:60e116a1e913 204 setting = Year;
emilytrembeth 5:60e116a1e913 205 wait(0.5);
emilytrembeth 5:60e116a1e913 206 }
emilytrembeth 5:60e116a1e913 207 break;
emilytrembeth 5:60e116a1e913 208
emilytrembeth 5:60e116a1e913 209 case Year:
emilytrembeth 5:60e116a1e913 210 if (SW1 == 1) {
emilytrembeth 5:60e116a1e913 211 wait(0.2);
emilytrembeth 5:60e116a1e913 212 year = year + 1;
emilytrembeth 5:60e116a1e913 213 lcd.cls();
emilytrembeth 5:60e116a1e913 214 lcd.locate(0,0);
cgogay 6:2ef9c06ce506 215 lcd.printf("Year = %d\n", year);
emilytrembeth 5:60e116a1e913 216 }
emilytrembeth 5:60e116a1e913 217 if (SW2 == 1) {
emilytrembeth 5:60e116a1e913 218 setting = Hour;
emilytrembeth 5:60e116a1e913 219 wait(0.5);
emilytrembeth 5:60e116a1e913 220 }
emilytrembeth 5:60e116a1e913 221 break;
emilytrembeth 5:60e116a1e913 222
emilytrembeth 5:60e116a1e913 223 case Hour:
emilytrembeth 5:60e116a1e913 224 if (SW1 == 1) {
emilytrembeth 5:60e116a1e913 225 wait(0.2);
emilytrembeth 5:60e116a1e913 226 hour = hour + 1;
emilytrembeth 5:60e116a1e913 227 lcd.cls();
emilytrembeth 5:60e116a1e913 228 lcd.locate(0,0);
cgogay 6:2ef9c06ce506 229 lcd.printf("Hour = %d\n", hour);
emilytrembeth 5:60e116a1e913 230 }
emilytrembeth 5:60e116a1e913 231 if (SW2 == 1) {
emilytrembeth 5:60e116a1e913 232 setting = Minute;
emilytrembeth 5:60e116a1e913 233 wait(0.5);
emilytrembeth 5:60e116a1e913 234 }
emilytrembeth 5:60e116a1e913 235 break;
emilytrembeth 5:60e116a1e913 236
emilytrembeth 5:60e116a1e913 237 case Minute:
emilytrembeth 5:60e116a1e913 238 if (SW1 == 1) {
emilytrembeth 5:60e116a1e913 239 wait(0.2);
emilytrembeth 5:60e116a1e913 240 min = min + 1;
emilytrembeth 5:60e116a1e913 241 lcd.cls();
emilytrembeth 5:60e116a1e913 242 lcd.locate(0,0);
cgogay 6:2ef9c06ce506 243 lcd.printf("Minute = %d\n", min);
emilytrembeth 5:60e116a1e913 244 }
emilytrembeth 5:60e116a1e913 245 if (SW2 == 1) {
emilytrembeth 5:60e116a1e913 246 setting = Second;
emilytrembeth 5:60e116a1e913 247 wait(0.5);
emilytrembeth 5:60e116a1e913 248 }
emilytrembeth 5:60e116a1e913 249 break;
emilytrembeth 5:60e116a1e913 250
emilytrembeth 5:60e116a1e913 251 case Second:
emilytrembeth 5:60e116a1e913 252 if (SW1 == 1) {
emilytrembeth 5:60e116a1e913 253 wait(0.2);
emilytrembeth 5:60e116a1e913 254 sec = sec + 1;
emilytrembeth 5:60e116a1e913 255 lcd.cls();
emilytrembeth 5:60e116a1e913 256 lcd.locate(0,0);
cgogay 6:2ef9c06ce506 257 lcd.printf("Second = %d\n", sec);
emilytrembeth 5:60e116a1e913 258 }
emilytrembeth 5:60e116a1e913 259 if (SW2 == 1) {
emilytrembeth 5:60e116a1e913 260 wait(0.5);
emilytrembeth 5:60e116a1e913 261 t = 0;
emilytrembeth 5:60e116a1e913 262 }
emilytrembeth 5:60e116a1e913 263 break;
emilytrembeth 5:60e116a1e913 264 }
emilytrembeth 5:60e116a1e913 265 }
emilytrembeth 5:60e116a1e913 266
emilytrembeth 5:60e116a1e913 267 struct tm struct_time;
emilytrembeth 5:60e116a1e913 268
emilytrembeth 5:60e116a1e913 269 //store number into time struct
emilytrembeth 5:60e116a1e913 270 struct_time.tm_year = year - 1900;
emilytrembeth 5:60e116a1e913 271 struct_time.tm_mon = month;
emilytrembeth 5:60e116a1e913 272 struct_time.tm_mday = day;
emilytrembeth 5:60e116a1e913 273 struct_time.tm_hour = hour;
emilytrembeth 5:60e116a1e913 274 struct_time.tm_min = min;
emilytrembeth 5:60e116a1e913 275 struct_time.tm_sec = sec;
emilytrembeth 5:60e116a1e913 276
emilytrembeth 5:60e116a1e913 277 // Coverting to time
emilytrembeth 5:60e116a1e913 278 time_t currentTime = mktime(&struct_time);
emilytrembeth 5:60e116a1e913 279 set_time(currentTime);
emilytrembeth 5:60e116a1e913 280
emilytrembeth 5:60e116a1e913 281 }
noutram 0:90e393878517 282
emilytrembeth 5:60e116a1e913 283
emilytrembeth 5:60e116a1e913 284 void FunctionSensor()
noutram 0:90e393878517 285 {
emilytrembeth 4:da63962bc0f1 286 while (true) {
emilytrembeth 4:da63962bc0f1 287 double temp = sensor.getTemperature();
emilytrembeth 4:da63962bc0f1 288 double pressure = sensor.getPressure();
emilytrembeth 4:da63962bc0f1 289 lcd.cls();
emilytrembeth 4:da63962bc0f1 290 lcd.printf("Temp Pressure\n");
emilytrembeth 4:da63962bc0f1 291 lcd.printf("%6.1f ",temp);
emilytrembeth 4:da63962bc0f1 292 lcd.printf("%.2f\n",pressure);
emilytrembeth 4:da63962bc0f1 293
emilytrembeth 4:da63962bc0f1 294 //Write to SD
emilytrembeth 4:da63962bc0f1 295 //fprintf(fp, "%6.1f,%.2f\n\r", temp, pressure);
emilytrembeth 4:da63962bc0f1 296
emilytrembeth 4:da63962bc0f1 297 Thread::wait(15000); //Updates the state every 15 seconds
emilytrembeth 4:da63962bc0f1 298 }
noutram 0:90e393878517 299 }
noutram 0:90e393878517 300
emilytrembeth 5:60e116a1e913 301 void FunctionTime()
noutram 0:90e393878517 302 {
emilytrembeth 4:da63962bc0f1 303 while (true) {
emilytrembeth 4:da63962bc0f1 304 char lineBuffer[32];
emilytrembeth 4:da63962bc0f1 305 char *pointer;
emilytrembeth 4:da63962bc0f1 306 pointer = lineBuffer;
emilytrembeth 5:60e116a1e913 307 if (SW1 == 1) { //Set time on Putty
emilytrembeth 4:da63962bc0f1 308 // show initial message on console
emilytrembeth 4:da63962bc0f1 309 displayMessageOnConsole();
emilytrembeth 4:da63962bc0f1 310
emilytrembeth 4:da63962bc0f1 311 // get input from console
emilytrembeth 4:da63962bc0f1 312 getLineFromSerial(pointer, sizeof(lineBuffer));
emilytrembeth 4:da63962bc0f1 313
emilytrembeth 4:da63962bc0f1 314 myled = !myled;
emilytrembeth 4:da63962bc0f1 315 // update RTC based on input value
emilytrembeth 4:da63962bc0f1 316 updateRealTimeClock(pointer);
emilytrembeth 5:60e116a1e913 317 }
emilytrembeth 5:60e116a1e913 318 if (SW2 == 1) { // Set time with Buttons
emilytrembeth 5:60e116a1e913 319 pc.printf("Ready");
emilytrembeth 5:60e116a1e913 320 wait(0.5);
emilytrembeth 5:60e116a1e913 321 SetingTimeWithButtons ();
emilytrembeth 5:60e116a1e913 322 }
emilytrembeth 4:da63962bc0f1 323 while(true) {
emilytrembeth 4:da63962bc0f1 324 displayOnLcd();
emilytrembeth 4:da63962bc0f1 325 myled = !myled;
emilytrembeth 4:da63962bc0f1 326 Thread::wait(1000);
emilytrembeth 4:da63962bc0f1 327 }
noutram 0:90e393878517 328 }
emilytrembeth 4:da63962bc0f1 329
cgogay 6:2ef9c06ce506 330 }