Comments added

Dependencies:   Peripherals Buffer_lib_v2 SD_Lib_EffedUP_ERP Time_Lib_v2 Year3_Version5 BMP280 Network_Lib TextLCD BME280

Committer:
emilytrembeth
Date:
Wed Nov 14 15:36:13 2018 +0000
Revision:
4:da63962bc0f1
Parent:
3:ef46c1ddefed
Child:
5:60e116a1e913
Threads for sensor data and the date and time.

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
noutram 0:90e393878517 7 //Function declarations
emilytrembeth 4:da63962bc0f1 8 void displayOnLcd();
emilytrembeth 4:da63962bc0f1 9 void updateRealTimeClock(char *buffer);
emilytrembeth 4:da63962bc0f1 10 void getLineFromSerial(char *keyBuffer, int bufferLength);
emilytrembeth 4:da63962bc0f1 11 void displayMessageOnConsole();
noutram 1:948bd552a2a2 12 void Function1();
noutram 1:948bd552a2a2 13 void Function2();
noutram 0:90e393878517 14
emilytrembeth 4:da63962bc0f1 15 TextLCD lcd(D9, D8, D7, D6, D4, D2); // rs, e, d4-d7
emilytrembeth 4:da63962bc0f1 16 SDBlockDevice sd(PB_5, D12, D13, D10); // mosi, miso, sclk, cs
emilytrembeth 4:da63962bc0f1 17 Serial pc(SERIAL_TX, SERIAL_RX);
emilytrembeth 4:da63962bc0f1 18 time_t currentTime;
emilytrembeth 4:da63962bc0f1 19 char lcdBuffer[32];
emilytrembeth 4:da63962bc0f1 20 DigitalOut myled(LED1);
emilytrembeth 4:da63962bc0f1 21 Ticker ticker;
emilytrembeth 4:da63962bc0f1 22 DigitalIn SWUser(USER_BUTTON);
emilytrembeth 4:da63962bc0f1 23 Mutex date_mutex;
noutram 0:90e393878517 24
noutram 1:948bd552a2a2 25 Thread t1;
noutram 1:948bd552a2a2 26 Thread t2;
emilytrembeth 4:da63962bc0f1 27
emilytrembeth 4:da63962bc0f1 28
emilytrembeth 4:da63962bc0f1 29 void displayOnLcd() {
emilytrembeth 4:da63962bc0f1 30 date_mutex.lock();
emilytrembeth 4:da63962bc0f1 31
emilytrembeth 4:da63962bc0f1 32 myled = !myled;
emilytrembeth 4:da63962bc0f1 33
emilytrembeth 4:da63962bc0f1 34 currentTime = time(NULL);
emilytrembeth 4:da63962bc0f1 35 strftime(lcdBuffer, 32, "%Y/%m/%d %H:%M:%S", localtime(&currentTime));
emilytrembeth 4:da63962bc0f1 36
emilytrembeth 4:da63962bc0f1 37 //lcd.cls();
emilytrembeth 4:da63962bc0f1 38 //lcd.locate(0,0);
emilytrembeth 4:da63962bc0f1 39 pc.printf("%s\n\r", lcdBuffer);
emilytrembeth 4:da63962bc0f1 40
emilytrembeth 4:da63962bc0f1 41 myled = !myled;
emilytrembeth 4:da63962bc0f1 42 date_mutex.unlock();
emilytrembeth 4:da63962bc0f1 43 };
noutram 0:90e393878517 44
emilytrembeth 4:da63962bc0f1 45 void updateRealTimeClock(char *buffer) {
emilytrembeth 4:da63962bc0f1 46 date_mutex.lock();
emilytrembeth 4:da63962bc0f1 47
emilytrembeth 4:da63962bc0f1 48 char *tp;
emilytrembeth 4:da63962bc0f1 49 char *timeArray[6];
emilytrembeth 4:da63962bc0f1 50 int arrayIndex;
emilytrembeth 4:da63962bc0f1 51 struct tm struct_time;
emilytrembeth 4:da63962bc0f1 52
emilytrembeth 4:da63962bc0f1 53 // extract number from string
emilytrembeth 4:da63962bc0f1 54 arrayIndex = 0;
emilytrembeth 4:da63962bc0f1 55 tp = strtok( buffer, " /:-" );
emilytrembeth 4:da63962bc0f1 56 timeArray[arrayIndex++] = tp;
emilytrembeth 4:da63962bc0f1 57 printf("%d ", atoi(tp));
emilytrembeth 4:da63962bc0f1 58 while ( tp != NULL && arrayIndex < 6 ) {
emilytrembeth 4:da63962bc0f1 59 tp = strtok( NULL," /:-" );
emilytrembeth 4:da63962bc0f1 60 timeArray[arrayIndex++] = tp;
emilytrembeth 4:da63962bc0f1 61 if ( tp != NULL ) {
emilytrembeth 4:da63962bc0f1 62 printf("%d ", atoi(tp));
emilytrembeth 4:da63962bc0f1 63 }
emilytrembeth 4:da63962bc0f1 64 }
emilytrembeth 4:da63962bc0f1 65 printf("\r\n");
emilytrembeth 4:da63962bc0f1 66
emilytrembeth 4:da63962bc0f1 67 // store number into time struct
emilytrembeth 4:da63962bc0f1 68 struct_time.tm_year = atoi(timeArray[0]) - 1900;
emilytrembeth 4:da63962bc0f1 69 struct_time.tm_mon = atoi(timeArray[1]) - 1;
emilytrembeth 4:da63962bc0f1 70 struct_time.tm_mday = atoi(timeArray[2]);
emilytrembeth 4:da63962bc0f1 71 struct_time.tm_hour = atoi(timeArray[3]);
emilytrembeth 4:da63962bc0f1 72 struct_time.tm_min = atoi(timeArray[4]);
emilytrembeth 4:da63962bc0f1 73 struct_time.tm_sec = atoi(timeArray[5]);
emilytrembeth 4:da63962bc0f1 74
emilytrembeth 4:da63962bc0f1 75 currentTime = mktime(&struct_time);
emilytrembeth 4:da63962bc0f1 76 set_time(currentTime);
emilytrembeth 4:da63962bc0f1 77
emilytrembeth 4:da63962bc0f1 78 date_mutex.unlock();
emilytrembeth 4:da63962bc0f1 79 }
emilytrembeth 4:da63962bc0f1 80
emilytrembeth 4:da63962bc0f1 81 void getLineFromSerial(char *keyBuffer, int bufferLength)
emilytrembeth 4:da63962bc0f1 82 {
emilytrembeth 4:da63962bc0f1 83 date_mutex.lock();
emilytrembeth 4:da63962bc0f1 84
emilytrembeth 4:da63962bc0f1 85 char c;
emilytrembeth 4:da63962bc0f1 86 int index = 0;
emilytrembeth 4:da63962bc0f1 87
emilytrembeth 4:da63962bc0f1 88 for (;;) {
emilytrembeth 4:da63962bc0f1 89 // break if keyBuffer is full
emilytrembeth 4:da63962bc0f1 90 if (index >= bufferLength) {
emilytrembeth 4:da63962bc0f1 91 break;
emilytrembeth 4:da63962bc0f1 92 }
emilytrembeth 4:da63962bc0f1 93
emilytrembeth 4:da63962bc0f1 94 // read input
emilytrembeth 4:da63962bc0f1 95 c = pc.getc();
emilytrembeth 4:da63962bc0f1 96 //printf(" %d ", c);
emilytrembeth 4:da63962bc0f1 97 pc.putc(c);
emilytrembeth 4:da63962bc0f1 98
emilytrembeth 4:da63962bc0f1 99 // break if end
emilytrembeth 4:da63962bc0f1 100 if (c == '\r') {
emilytrembeth 4:da63962bc0f1 101 keyBuffer[index++] = c;
emilytrembeth 4:da63962bc0f1 102 printf("\n");
emilytrembeth 4:da63962bc0f1 103 break;
emilytrembeth 4:da63962bc0f1 104 }
emilytrembeth 4:da63962bc0f1 105
emilytrembeth 4:da63962bc0f1 106 // store in keyBuffer
emilytrembeth 4:da63962bc0f1 107 keyBuffer[index++] = c;
emilytrembeth 4:da63962bc0f1 108
emilytrembeth 4:da63962bc0f1 109 date_mutex.unlock();
emilytrembeth 4:da63962bc0f1 110 }
emilytrembeth 4:da63962bc0f1 111 }
emilytrembeth 4:da63962bc0f1 112
emilytrembeth 4:da63962bc0f1 113 void displayMessageOnConsole() {
emilytrembeth 4:da63962bc0f1 114 date_mutex.lock();
emilytrembeth 4:da63962bc0f1 115
emilytrembeth 4:da63962bc0f1 116 currentTime = time(NULL);
emilytrembeth 4:da63962bc0f1 117 strftime(lcdBuffer, 32, "%Y/%m/%d %H:%M:%S", localtime(&currentTime));
emilytrembeth 4:da63962bc0f1 118
emilytrembeth 4:da63962bc0f1 119 printf("Current Time:%s\r\n", lcdBuffer);
emilytrembeth 4:da63962bc0f1 120 printf("Enter new Time (YYYY/mm/dd HH:MM:SS)\r\n");
emilytrembeth 4:da63962bc0f1 121
emilytrembeth 4:da63962bc0f1 122 date_mutex.unlock();
emilytrembeth 4:da63962bc0f1 123 }
emilytrembeth 4:da63962bc0f1 124
noutram 0:90e393878517 125
noutram 1:948bd552a2a2 126 void Function1()
noutram 0:90e393878517 127 {
emilytrembeth 4:da63962bc0f1 128 while (true) {
emilytrembeth 4:da63962bc0f1 129 double temp = sensor.getTemperature();
emilytrembeth 4:da63962bc0f1 130 double pressure = sensor.getPressure();
emilytrembeth 4:da63962bc0f1 131 lcd.cls();
emilytrembeth 4:da63962bc0f1 132 lcd.printf("Temp Pressure\n");
emilytrembeth 4:da63962bc0f1 133 lcd.printf("%6.1f ",temp);
emilytrembeth 4:da63962bc0f1 134 lcd.printf("%.2f\n",pressure);
emilytrembeth 4:da63962bc0f1 135
emilytrembeth 4:da63962bc0f1 136 //Write to SD
emilytrembeth 4:da63962bc0f1 137 //fprintf(fp, "%6.1f,%.2f\n\r", temp, pressure);
emilytrembeth 4:da63962bc0f1 138
emilytrembeth 4:da63962bc0f1 139 Thread::wait(15000); //Updates the state every 15 seconds
emilytrembeth 4:da63962bc0f1 140 }
noutram 0:90e393878517 141 }
noutram 0:90e393878517 142
noutram 1:948bd552a2a2 143 void Function2()
noutram 0:90e393878517 144 {
emilytrembeth 4:da63962bc0f1 145 while (true) {
emilytrembeth 4:da63962bc0f1 146 char lineBuffer[32];
emilytrembeth 4:da63962bc0f1 147 char *pointer;
emilytrembeth 4:da63962bc0f1 148 pointer = lineBuffer;
emilytrembeth 4:da63962bc0f1 149 // show initial message on console
emilytrembeth 4:da63962bc0f1 150 displayMessageOnConsole();
emilytrembeth 4:da63962bc0f1 151
emilytrembeth 4:da63962bc0f1 152 // get input from console
emilytrembeth 4:da63962bc0f1 153 getLineFromSerial(pointer, sizeof(lineBuffer));
emilytrembeth 4:da63962bc0f1 154
emilytrembeth 4:da63962bc0f1 155 myled = !myled;
emilytrembeth 4:da63962bc0f1 156 // update RTC based on input value
emilytrembeth 4:da63962bc0f1 157 updateRealTimeClock(pointer);
emilytrembeth 4:da63962bc0f1 158 while(true) {
emilytrembeth 4:da63962bc0f1 159 displayOnLcd();
emilytrembeth 4:da63962bc0f1 160 myled = !myled;
emilytrembeth 4:da63962bc0f1 161 Thread::wait(1000);
emilytrembeth 4:da63962bc0f1 162 }
noutram 0:90e393878517 163 }
emilytrembeth 4:da63962bc0f1 164
emilytrembeth 4:da63962bc0f1 165 }
noutram 0:90e393878517 166
noutram 0:90e393878517 167 //Main thread
noutram 0:90e393878517 168 int main() {
emilytrembeth 4:da63962bc0f1 169
emilytrembeth 4:da63962bc0f1 170 lcd.printf("Press a Switch\n\n");
emilytrembeth 4:da63962bc0f1 171
emilytrembeth 4:da63962bc0f1 172 post();
noutram 0:90e393878517 173
emilytrembeth 4:da63962bc0f1 174 //Initialise the SD card
emilytrembeth 4:da63962bc0f1 175 if ( sd.init() != 0) {
emilytrembeth 4:da63962bc0f1 176 printf("Init failed \n");
emilytrembeth 4:da63962bc0f1 177 errorCode(FATAL);
emilytrembeth 4:da63962bc0f1 178 }
emilytrembeth 4:da63962bc0f1 179
emilytrembeth 4:da63962bc0f1 180 //Create a filing system for SD Card
emilytrembeth 4:da63962bc0f1 181 FATFileSystem fs("sd", &sd);
emilytrembeth 4:da63962bc0f1 182
emilytrembeth 4:da63962bc0f1 183 //Open to WRITE
emilytrembeth 4:da63962bc0f1 184 FILE* fp = fopen("/sd/test.csv","a");
emilytrembeth 4:da63962bc0f1 185 if (fp == NULL) {
emilytrembeth 4:da63962bc0f1 186 error("Could not open file for write\n");
emilytrembeth 4:da63962bc0f1 187 errorCode(FATAL);
emilytrembeth 4:da63962bc0f1 188 }
noutram 0:90e393878517 189
noutram 1:948bd552a2a2 190 // run threads
noutram 1:948bd552a2a2 191 t1.start(Function1);
noutram 1:948bd552a2a2 192 t2.start(Function2);
emilytrembeth 4:da63962bc0f1 193
emilytrembeth 4:da63962bc0f1 194 }
noutram 0:90e393878517 195
emilytrembeth 4:da63962bc0f1 196