Gas Pressure Display Updated Power control for Pressure sensor added

Dependencies:   UniGraphic mbed vt100

Committer:
Rhyme
Date:
Fri Feb 16 08:27:50 2018 +0000
Revision:
0:37c8ecde13c2
control PSE530 power via PTC5 (pse530_en)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:37c8ecde13c2 1 #include "mbed.h"
Rhyme 0:37c8ecde13c2 2 #include "edge_time.h"
Rhyme 0:37c8ecde13c2 3
Rhyme 0:37c8ecde13c2 4 static const uint8_t daysInMonth[12] = {
Rhyme 0:37c8ecde13c2 5 31, 28, 31, 30,
Rhyme 0:37c8ecde13c2 6 31, 30, 31, 31,
Rhyme 0:37c8ecde13c2 7 30, 31, 30, 31
Rhyme 0:37c8ecde13c2 8 } ;
Rhyme 0:37c8ecde13c2 9
Rhyme 0:37c8ecde13c2 10 const char *nameOfDay[7] = {
Rhyme 0:37c8ecde13c2 11 "Sunday", "Monday", "Tuesday", "Wednesday",
Rhyme 0:37c8ecde13c2 12 "Thursday", "Friday", "Saturday"
Rhyme 0:37c8ecde13c2 13 } ;
Rhyme 0:37c8ecde13c2 14
Rhyme 0:37c8ecde13c2 15 uint32_t edge_time = 0 ;
Rhyme 0:37c8ecde13c2 16 uint32_t utc_offset = 9 * 60 * 60 ;
Rhyme 0:37c8ecde13c2 17 tm current_time ;
Rhyme 0:37c8ecde13c2 18 Ticker *tokei = 0 ;
Rhyme 0:37c8ecde13c2 19
Rhyme 0:37c8ecde13c2 20 void inc_sec(void)
Rhyme 0:37c8ecde13c2 21 {
Rhyme 0:37c8ecde13c2 22 __disable_irq() ; // Disable Interrupts
Rhyme 0:37c8ecde13c2 23 edge_time++ ;
Rhyme 0:37c8ecde13c2 24 __enable_irq() ; // Enable Interrupts
Rhyme 0:37c8ecde13c2 25 }
Rhyme 0:37c8ecde13c2 26
Rhyme 0:37c8ecde13c2 27 void init_timer(void)
Rhyme 0:37c8ecde13c2 28 {
Rhyme 0:37c8ecde13c2 29 tokei = new Ticker() ;
Rhyme 0:37c8ecde13c2 30 tokei->attach(inc_sec, 1.0) ;
Rhyme 0:37c8ecde13c2 31 }
Rhyme 0:37c8ecde13c2 32
Rhyme 0:37c8ecde13c2 33 void set_time(const uint16_t valueLen, const uint8_t *value)
Rhyme 0:37c8ecde13c2 34 {
Rhyme 0:37c8ecde13c2 35 uint32_t tmp_timestamp = 0 ;
Rhyme 0:37c8ecde13c2 36 for (int i = 0 ; i < valueLen ; i++ ) {
Rhyme 0:37c8ecde13c2 37 tmp_timestamp |= (value[i] & 0xFF) << (i * 8) ;
Rhyme 0:37c8ecde13c2 38 }
Rhyme 0:37c8ecde13c2 39 edge_time = tmp_timestamp ;
Rhyme 0:37c8ecde13c2 40 ts2tm(edge_time, &current_time) ;
Rhyme 0:37c8ecde13c2 41 // ts2time(edge_time, &current_time) ;
Rhyme 0:37c8ecde13c2 42 }
Rhyme 0:37c8ecde13c2 43
Rhyme 0:37c8ecde13c2 44 void ts2time(uint32_t timestamp, struct tm *tm)
Rhyme 0:37c8ecde13c2 45 {
Rhyme 0:37c8ecde13c2 46 uint32_t seconds, minutes, hours, days, month, year ;
Rhyme 0:37c8ecde13c2 47 uint32_t dayOfWeek ;
Rhyme 0:37c8ecde13c2 48
Rhyme 0:37c8ecde13c2 49 // timestamp += (3600 * 9) ; /* +9 hours for JST */
Rhyme 0:37c8ecde13c2 50 timestamp += utc_offset ;
Rhyme 0:37c8ecde13c2 51
Rhyme 0:37c8ecde13c2 52 seconds = timestamp % 60 ;
Rhyme 0:37c8ecde13c2 53 minutes = timestamp / 60 ;
Rhyme 0:37c8ecde13c2 54 hours = minutes / 60 ; /* +9 for JST */
Rhyme 0:37c8ecde13c2 55 minutes -= hours * 60 ;
Rhyme 0:37c8ecde13c2 56 days = hours / 24 ;
Rhyme 0:37c8ecde13c2 57 hours -= days * 24 ;
Rhyme 0:37c8ecde13c2 58
Rhyme 0:37c8ecde13c2 59 tm->tm_sec = seconds ;
Rhyme 0:37c8ecde13c2 60 tm->tm_min = minutes ;
Rhyme 0:37c8ecde13c2 61 tm->tm_hour = hours ;
Rhyme 0:37c8ecde13c2 62 tm->tm_mday = days + 1 ;
Rhyme 0:37c8ecde13c2 63 // tm->tm_mon = month ;
Rhyme 0:37c8ecde13c2 64 // tm->tm_year = year ;
Rhyme 0:37c8ecde13c2 65 // tm->tm_wday = dayOfWeek ;
Rhyme 0:37c8ecde13c2 66 }
Rhyme 0:37c8ecde13c2 67
Rhyme 0:37c8ecde13c2 68 void ts2tm(uint32_t timestamp, struct tm *tm)
Rhyme 0:37c8ecde13c2 69 {
Rhyme 0:37c8ecde13c2 70 uint32_t seconds, minutes, hours, days, month, year ;
Rhyme 0:37c8ecde13c2 71 uint32_t dayOfWeek ;
Rhyme 0:37c8ecde13c2 72
Rhyme 0:37c8ecde13c2 73 // timestamp += (3600 * 9) ; /* +9 hours for JST */
Rhyme 0:37c8ecde13c2 74 timestamp += utc_offset ;
Rhyme 0:37c8ecde13c2 75
Rhyme 0:37c8ecde13c2 76 seconds = timestamp % 60 ;
Rhyme 0:37c8ecde13c2 77 minutes = timestamp / 60 ;
Rhyme 0:37c8ecde13c2 78 hours = minutes / 60 ; /* +9 for JST */
Rhyme 0:37c8ecde13c2 79 minutes -= hours * 60 ;
Rhyme 0:37c8ecde13c2 80 days = hours / 24 ;
Rhyme 0:37c8ecde13c2 81 hours -= days * 24 ;
Rhyme 0:37c8ecde13c2 82
Rhyme 0:37c8ecde13c2 83 /* Unix timestamp start 1-Jan-1970 Thursday */
Rhyme 0:37c8ecde13c2 84 year = 1970 ;
Rhyme 0:37c8ecde13c2 85 dayOfWeek = 4 ; /* Thursday */
Rhyme 0:37c8ecde13c2 86
Rhyme 0:37c8ecde13c2 87 while(1) {
Rhyme 0:37c8ecde13c2 88 bool isLeapYear =
Rhyme 0:37c8ecde13c2 89 (((year % 4) == 0)
Rhyme 0:37c8ecde13c2 90 &&(((year % 100) != 0)
Rhyme 0:37c8ecde13c2 91 || ((year % 400) == 0))) ;
Rhyme 0:37c8ecde13c2 92 uint16_t daysInYear = isLeapYear ? 366 : 365 ;
Rhyme 0:37c8ecde13c2 93 if (days >= daysInYear) {
Rhyme 0:37c8ecde13c2 94 dayOfWeek += isLeapYear ? 2 : 1 ;
Rhyme 0:37c8ecde13c2 95 days -= daysInYear ;
Rhyme 0:37c8ecde13c2 96 if (dayOfWeek >= 7) {
Rhyme 0:37c8ecde13c2 97 dayOfWeek -= 7 ;
Rhyme 0:37c8ecde13c2 98 }
Rhyme 0:37c8ecde13c2 99 year++ ;
Rhyme 0:37c8ecde13c2 100 } else {
Rhyme 0:37c8ecde13c2 101 tm->tm_yday = days ;
Rhyme 0:37c8ecde13c2 102 dayOfWeek += days ;
Rhyme 0:37c8ecde13c2 103 dayOfWeek %= 7 ;
Rhyme 0:37c8ecde13c2 104
Rhyme 0:37c8ecde13c2 105 /* calc the month and the day */
Rhyme 0:37c8ecde13c2 106 for (month = 0 ; month < 12 ; month++) {
Rhyme 0:37c8ecde13c2 107 uint8_t dim = daysInMonth[month] ;
Rhyme 0:37c8ecde13c2 108
Rhyme 0:37c8ecde13c2 109 /* add a day to feburary if this is a leap year */
Rhyme 0:37c8ecde13c2 110 if ((month == 1) && (isLeapYear)) {
Rhyme 0:37c8ecde13c2 111 dim++ ;
Rhyme 0:37c8ecde13c2 112 }
Rhyme 0:37c8ecde13c2 113
Rhyme 0:37c8ecde13c2 114 if (days >= dim) {
Rhyme 0:37c8ecde13c2 115 days -= dim ;
Rhyme 0:37c8ecde13c2 116 } else {
Rhyme 0:37c8ecde13c2 117 break ;
Rhyme 0:37c8ecde13c2 118 }
Rhyme 0:37c8ecde13c2 119 }
Rhyme 0:37c8ecde13c2 120 break ;
Rhyme 0:37c8ecde13c2 121 }
Rhyme 0:37c8ecde13c2 122 }
Rhyme 0:37c8ecde13c2 123 tm->tm_sec = seconds ;
Rhyme 0:37c8ecde13c2 124 tm->tm_min = minutes ;
Rhyme 0:37c8ecde13c2 125 tm->tm_hour = hours ;
Rhyme 0:37c8ecde13c2 126 tm->tm_mday = days + 1 ;
Rhyme 0:37c8ecde13c2 127 tm->tm_mon = month ;
Rhyme 0:37c8ecde13c2 128 tm->tm_year = year ;
Rhyme 0:37c8ecde13c2 129 tm->tm_wday = dayOfWeek ;
Rhyme 0:37c8ecde13c2 130 }
Rhyme 0:37c8ecde13c2 131
Rhyme 0:37c8ecde13c2 132 void print_time(struct tm *tm)
Rhyme 0:37c8ecde13c2 133 {
Rhyme 0:37c8ecde13c2 134 printf("%02d:%02d:%02d",
Rhyme 0:37c8ecde13c2 135 tm->tm_hour,
Rhyme 0:37c8ecde13c2 136 tm->tm_min,
Rhyme 0:37c8ecde13c2 137 tm->tm_sec ) ;
Rhyme 0:37c8ecde13c2 138 }
Rhyme 0:37c8ecde13c2 139
Rhyme 0:37c8ecde13c2 140 void print_time(uint32_t thetime)
Rhyme 0:37c8ecde13c2 141 {
Rhyme 0:37c8ecde13c2 142 struct tm timestruct ;
Rhyme 0:37c8ecde13c2 143 ts2time(thetime, &timestruct) ;
Rhyme 0:37c8ecde13c2 144 print_time(&timestruct) ;
Rhyme 0:37c8ecde13c2 145 }
Rhyme 0:37c8ecde13c2 146
Rhyme 0:37c8ecde13c2 147 void print_time(void)
Rhyme 0:37c8ecde13c2 148 {
Rhyme 0:37c8ecde13c2 149 struct tm timestruct ;
Rhyme 0:37c8ecde13c2 150 ts2time(edge_time, &timestruct) ;
Rhyme 0:37c8ecde13c2 151 print_time(&timestruct) ;
Rhyme 0:37c8ecde13c2 152 }
Rhyme 0:37c8ecde13c2 153
Rhyme 0:37c8ecde13c2 154 void print_date(struct tm *tm)
Rhyme 0:37c8ecde13c2 155 {
Rhyme 0:37c8ecde13c2 156 printf("%d/%d/%d %02d:%02d:%02d",
Rhyme 0:37c8ecde13c2 157 tm->tm_year,
Rhyme 0:37c8ecde13c2 158 tm->tm_mon + 1,
Rhyme 0:37c8ecde13c2 159 tm->tm_mday,
Rhyme 0:37c8ecde13c2 160 tm->tm_hour,
Rhyme 0:37c8ecde13c2 161 tm->tm_min,
Rhyme 0:37c8ecde13c2 162 tm->tm_sec
Rhyme 0:37c8ecde13c2 163 ) ;
Rhyme 0:37c8ecde13c2 164 }
Rhyme 0:37c8ecde13c2 165
Rhyme 0:37c8ecde13c2 166 void print_date_wd(struct tm *tm)
Rhyme 0:37c8ecde13c2 167 {
Rhyme 0:37c8ecde13c2 168 printf("%d/%d/%d %02d:%02d:%02d (%s)",
Rhyme 0:37c8ecde13c2 169 tm->tm_year,
Rhyme 0:37c8ecde13c2 170 tm->tm_mon + 1,
Rhyme 0:37c8ecde13c2 171 tm->tm_mday,
Rhyme 0:37c8ecde13c2 172 tm->tm_hour,
Rhyme 0:37c8ecde13c2 173 tm->tm_min,
Rhyme 0:37c8ecde13c2 174 tm->tm_sec,
Rhyme 0:37c8ecde13c2 175 nameOfDay[tm->tm_wday]
Rhyme 0:37c8ecde13c2 176 ) ;
Rhyme 0:37c8ecde13c2 177 }
Rhyme 0:37c8ecde13c2 178
Rhyme 0:37c8ecde13c2 179 void time2str(struct tm *tm, char *timestr)
Rhyme 0:37c8ecde13c2 180 {
Rhyme 0:37c8ecde13c2 181 sprintf(timestr, "%02d:%02d:%02d",
Rhyme 0:37c8ecde13c2 182 tm->tm_hour,
Rhyme 0:37c8ecde13c2 183 tm->tm_min,
Rhyme 0:37c8ecde13c2 184 tm->tm_sec ) ;
Rhyme 0:37c8ecde13c2 185 }
Rhyme 0:37c8ecde13c2 186
Rhyme 0:37c8ecde13c2 187 void time2str(char *timestr)
Rhyme 0:37c8ecde13c2 188 {
Rhyme 0:37c8ecde13c2 189 struct tm timestruct ;
Rhyme 0:37c8ecde13c2 190 ts2time(edge_time, &timestruct) ;
Rhyme 0:37c8ecde13c2 191 time2str(&timestruct, timestr) ;
Rhyme 0:37c8ecde13c2 192 }
Rhyme 0:37c8ecde13c2 193
Rhyme 0:37c8ecde13c2 194 int32_t time2seq(uint32_t timestamp)
Rhyme 0:37c8ecde13c2 195 {
Rhyme 0:37c8ecde13c2 196 struct tm timestruct ;
Rhyme 0:37c8ecde13c2 197 int32_t result ;
Rhyme 0:37c8ecde13c2 198 ts2time(timestamp, &timestruct) ;
Rhyme 0:37c8ecde13c2 199 result = timestruct.tm_hour * 10000
Rhyme 0:37c8ecde13c2 200 + timestruct.tm_min * 100
Rhyme 0:37c8ecde13c2 201 + timestruct.tm_sec ;
Rhyme 0:37c8ecde13c2 202 return(result) ;
Rhyme 0:37c8ecde13c2 203 }
Rhyme 0:37c8ecde13c2 204
Rhyme 0:37c8ecde13c2 205 void time2seq(uint32_t timestamp, char *timestr)
Rhyme 0:37c8ecde13c2 206 {
Rhyme 0:37c8ecde13c2 207 struct tm timestruct ;
Rhyme 0:37c8ecde13c2 208 ts2tm(timestamp, &timestruct) ;
Rhyme 0:37c8ecde13c2 209 sprintf(timestr, "%d%02d%02d%02d%02d%02d",
Rhyme 0:37c8ecde13c2 210 timestruct.tm_year,
Rhyme 0:37c8ecde13c2 211 timestruct.tm_mon + 1,
Rhyme 0:37c8ecde13c2 212 timestruct.tm_mday,
Rhyme 0:37c8ecde13c2 213 timestruct.tm_hour,
Rhyme 0:37c8ecde13c2 214 timestruct.tm_min,
Rhyme 0:37c8ecde13c2 215 timestruct.tm_sec
Rhyme 0:37c8ecde13c2 216 ) ;
Rhyme 0:37c8ecde13c2 217 }
Rhyme 0:37c8ecde13c2 218
Rhyme 0:37c8ecde13c2 219 void time2date(struct tm *tm, char *datestr)
Rhyme 0:37c8ecde13c2 220 {
Rhyme 0:37c8ecde13c2 221 sprintf(datestr, "%d/%d/%d %02d:%02d:%02d (%s)",
Rhyme 0:37c8ecde13c2 222 tm->tm_year,
Rhyme 0:37c8ecde13c2 223 tm->tm_mon + 1,
Rhyme 0:37c8ecde13c2 224 tm->tm_mday,
Rhyme 0:37c8ecde13c2 225 tm->tm_hour,
Rhyme 0:37c8ecde13c2 226 tm->tm_min,
Rhyme 0:37c8ecde13c2 227 tm->tm_sec,
Rhyme 0:37c8ecde13c2 228 nameOfDay[tm->tm_wday]
Rhyme 0:37c8ecde13c2 229 ) ;
Rhyme 0:37c8ecde13c2 230 }