Strength of Irradiance and the UV Index chart page added

Dependencies:   TFT_fonts UniGraphic VEML6075 mbed vt100

Fork of quattro_vishay_6075 by quattro_dev

This is a forked version of quattro_vishay_6075.
An additional Strength of Irradiance and the UV Index page added.

NOTE: Please update the VEML6075.lib before compile.

/media/uploads/Rhyme/img_2118.jpg

Committer:
shockey
Date:
Fri Feb 05 02:30:50 2016 +0000
Revision:
0:11b872c2badc
Child:
1:6b82f17ff8e0
First working version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shockey 0:11b872c2badc 1 #include "mbed.h"
shockey 0:11b872c2badc 2 #include "vt100.h"
shockey 0:11b872c2badc 3 #include "quattro.h"
shockey 0:11b872c2badc 4 #include "SEPS225.h"
shockey 0:11b872c2badc 5 #include "Arial12x12.h"
shockey 0:11b872c2badc 6 #include "Arial24x23.h"
shockey 0:11b872c2badc 7 #include "Arial28x28.h"
shockey 0:11b872c2badc 8 #include "font_big.h"
shockey 0:11b872c2badc 9 #include "VEML6075.h"
shockey 0:11b872c2badc 10
shockey 0:11b872c2badc 11 #include "kinetis_raw128x128.h"
shockey 0:11b872c2badc 12
shockey 0:11b872c2badc 13 // dummy assign for RESET PIN
shockey 0:11b872c2badc 14 #define PIN_RESET_TFT PTC5
shockey 0:11b872c2badc 15
shockey 0:11b872c2badc 16 #define VEML6075_I2C_ADDRESS (0x10)
shockey 0:11b872c2badc 17
shockey 0:11b872c2badc 18 VEML6075 *veml6075 = 0 ;
shockey 0:11b872c2badc 19
shockey 0:11b872c2badc 20 SEPS225 TFT(SPI_8, 10000000,
shockey 0:11b872c2badc 21 PIN_OLED_MOSI, PIN_OLED_MISO, PIN_OLED_SCLK,
shockey 0:11b872c2badc 22 PIN_OLED_CS, PIN_RESET_TFT, PIN_OLED_RS, "OLED SEPS225") ;
shockey 0:11b872c2badc 23
shockey 0:11b872c2badc 24 Serial pc(PTE0, PTE1) ;
shockey 0:11b872c2badc 25 vt100 *tty = 0 ;
shockey 0:11b872c2badc 26 int page = 0 ;
shockey 0:11b872c2badc 27 int prevPage = 0 ;
shockey 0:11b872c2badc 28 int numPages = 6 ;
shockey 0:11b872c2badc 29
shockey 0:11b872c2badc 30 void enableSW(void)
shockey 0:11b872c2badc 31 {
shockey 0:11b872c2badc 32 int3_r->enable_irq() ;
shockey 0:11b872c2badc 33 int4_g->enable_irq() ;
shockey 0:11b872c2badc 34 int5_b->enable_irq() ;
shockey 0:11b872c2badc 35 }
shockey 0:11b872c2badc 36
shockey 0:11b872c2badc 37 void disableSW(void)
shockey 0:11b872c2badc 38 {
shockey 0:11b872c2badc 39 int3_r->disable_irq() ;
shockey 0:11b872c2badc 40 int4_g->disable_irq() ;
shockey 0:11b872c2badc 41 int5_b->disable_irq() ;
shockey 0:11b872c2badc 42 }
shockey 0:11b872c2badc 43
shockey 0:11b872c2badc 44 void swRPressed(void)
shockey 0:11b872c2badc 45 {
shockey 0:11b872c2badc 46 int3_r->disable_irq() ;
shockey 0:11b872c2badc 47 *led3_org = !(*led3_org) ;
shockey 0:11b872c2badc 48 page++ ;
shockey 0:11b872c2badc 49 page %= numPages ;
shockey 0:11b872c2badc 50 wait(0.25) ;
shockey 0:11b872c2badc 51 int3_r->enable_irq() ;
shockey 0:11b872c2badc 52 }
shockey 0:11b872c2badc 53
shockey 0:11b872c2badc 54 void swGPressed(void)
shockey 0:11b872c2badc 55 {
shockey 0:11b872c2badc 56 int4_g->disable_irq() ;
shockey 0:11b872c2badc 57 *led4_org = !(*led4_org) ;
shockey 0:11b872c2badc 58 page = 0 ;
shockey 0:11b872c2badc 59 wait(0.25) ;
shockey 0:11b872c2badc 60 int4_g->enable_irq() ;
shockey 0:11b872c2badc 61 }
shockey 0:11b872c2badc 62
shockey 0:11b872c2badc 63 void swBPressed(void)
shockey 0:11b872c2badc 64 {
shockey 0:11b872c2badc 65 int5_b->disable_irq() ;
shockey 0:11b872c2badc 66 *led5_org = !(*led5_org) ;
shockey 0:11b872c2badc 67 page-- ;
shockey 0:11b872c2badc 68 if (page < 0) {
shockey 0:11b872c2badc 69 page = numPages - 1 ;
shockey 0:11b872c2badc 70 }
shockey 0:11b872c2badc 71 wait(0.25) ;
shockey 0:11b872c2badc 72 int5_b->enable_irq() ;
shockey 0:11b872c2badc 73 }
shockey 0:11b872c2badc 74
shockey 0:11b872c2badc 75 void doLines(unsigned short color)
shockey 0:11b872c2badc 76 {
shockey 0:11b872c2badc 77 TFT.cls() ;
shockey 0:11b872c2badc 78 for (int i = 0 ; i < 128 ; i += 8) {
shockey 0:11b872c2badc 79 TFT.line(i, 0, 127-i, 127, color) ;
shockey 0:11b872c2badc 80 }
shockey 0:11b872c2badc 81 }
shockey 0:11b872c2badc 82
shockey 0:11b872c2badc 83 void doCircles(unsigned short color)
shockey 0:11b872c2badc 84 {
shockey 0:11b872c2badc 85 TFT.cls() ;
shockey 0:11b872c2badc 86 for (int i = 0 ; i < 64 ; i+= 4) {
shockey 0:11b872c2badc 87 TFT.circle(64, 64, i, color) ;
shockey 0:11b872c2badc 88 }
shockey 0:11b872c2badc 89 }
shockey 0:11b872c2badc 90
shockey 0:11b872c2badc 91 void doRects(unsigned short color)
shockey 0:11b872c2badc 92 {
shockey 0:11b872c2badc 93
shockey 0:11b872c2badc 94 *oled_cs = 0 ;
shockey 0:11b872c2badc 95 TFT.cls() ;
shockey 0:11b872c2badc 96 TFT.line(32, 32, 100, 100, color) ;
shockey 0:11b872c2badc 97 TFT.rect(32, 32, 100, 100, color) ;
shockey 0:11b872c2badc 98 /*
shockey 0:11b872c2badc 99 for (i = 0 ; i < 64 ; i += 4) {
shockey 0:11b872c2badc 100 x0 = 64 - i ;
shockey 0:11b872c2badc 101 x1 = 64 + i ;
shockey 0:11b872c2badc 102 y0 = 64 - i ;
shockey 0:11b872c2badc 103 y1 = 64 + i ;
shockey 0:11b872c2badc 104 TFT.rect(x0, y0, x1, y1, color) ;
shockey 0:11b872c2badc 105 }
shockey 0:11b872c2badc 106 */
shockey 0:11b872c2badc 107 *oled_cs = 1 ;
shockey 0:11b872c2badc 108 }
shockey 0:11b872c2badc 109
shockey 0:11b872c2badc 110 void doText(void)
shockey 0:11b872c2badc 111 {
shockey 0:11b872c2badc 112 TFT.cls() ;
shockey 0:11b872c2badc 113 // *oled_cs = 0 ;
shockey 0:11b872c2badc 114 // TFT.line(0, 64, 127, 64, 0xFF00) ;
shockey 0:11b872c2badc 115 TFT.set_font((unsigned char*) Arial12x12);
shockey 0:11b872c2badc 116 TFT.foreground(0xFFFF) ;
shockey 0:11b872c2badc 117 TFT.background(0x0000) ;
shockey 0:11b872c2badc 118 TFT.locate(10, 20) ;
shockey 0:11b872c2badc 119 TFT.printf("MBED") ;
shockey 0:11b872c2badc 120 TFT.foreground(0xFFFF);
shockey 0:11b872c2badc 121 TFT.locate(20, 60) ;
shockey 0:11b872c2badc 122 TFT.printf("2.8\"TFT") ;
shockey 0:11b872c2badc 123 TFT.locate(20, 80) ;
shockey 0:11b872c2badc 124 TFT.printf("ABCDEF") ;
shockey 0:11b872c2badc 125
shockey 0:11b872c2badc 126 // *oled_cs = 1 ;
shockey 0:11b872c2badc 127 }
shockey 0:11b872c2badc 128
shockey 0:11b872c2badc 129 void doSplash(void)
shockey 0:11b872c2badc 130 {
shockey 0:11b872c2badc 131 TFT.cls() ;
shockey 0:11b872c2badc 132 TFT.foreground(0xFFFF) ;
shockey 0:11b872c2badc 133 TFT.background(0x0000) ;
shockey 0:11b872c2badc 134 TFT.set_font((unsigned char*) Arial28x28);
shockey 0:11b872c2badc 135 TFT.locate(5, 5) ;
shockey 0:11b872c2badc 136 TFT.printf("Marubun") ;
shockey 0:11b872c2badc 137 TFT.set_font((unsigned char*) Arial12x12);
shockey 0:11b872c2badc 138 TFT.locate(35, 40) ;
shockey 0:11b872c2badc 139 TFT.printf("quattro-II") ;
shockey 0:11b872c2badc 140 TFT.locate(50, 60) ;
shockey 0:11b872c2badc 141 TFT.printf("&") ;
shockey 0:11b872c2badc 142 TFT.locate(40, 80) ;
shockey 0:11b872c2badc 143 TFT.printf("shaft-II") ;
shockey 0:11b872c2badc 144 TFT.foreground(0xFD20) ;
shockey 0:11b872c2badc 145 TFT.set_font((unsigned char*) Arial24x23);
shockey 0:11b872c2badc 146 TFT.locate(10, 100) ;
shockey 0:11b872c2badc 147 TFT.printf("Kinetis") ;
shockey 0:11b872c2badc 148 TFT.foreground(0xFFFF) ;
shockey 0:11b872c2badc 149 TFT.set_font((unsigned char*) Arial12x12);
shockey 0:11b872c2badc 150 }
shockey 0:11b872c2badc 151
shockey 0:11b872c2badc 152 void doPict(unsigned short pict[])
shockey 0:11b872c2badc 153 {
shockey 0:11b872c2badc 154 int x, y ;
shockey 0:11b872c2badc 155 TFT.display(0) ;
shockey 0:11b872c2badc 156 // TFT.window(0, 0, 127, 127) ;
shockey 0:11b872c2badc 157 TFT.cls() ;
shockey 0:11b872c2badc 158 for (y = 0 ; y < 128 ; y++ ) {
shockey 0:11b872c2badc 159 for (x = 0 ; x < 128 ; x++ ) {
shockey 0:11b872c2badc 160 TFT.pixel(x, y, pict[128*y + x]) ;
shockey 0:11b872c2badc 161 }
shockey 0:11b872c2badc 162 }
shockey 0:11b872c2badc 163 // TFT.window_pushpixelbuf(pict, 128*128) ;
shockey 0:11b872c2badc 164 TFT.display(1) ;
shockey 0:11b872c2badc 165 }
shockey 0:11b872c2badc 166
shockey 0:11b872c2badc 167 void init_sensors(void)
shockey 0:11b872c2badc 168 {
shockey 0:11b872c2badc 169 veml6075 = new VEML6075(PTB3, PTB2, VEML6075_I2C_ADDRESS) ; // for FRDM-K22F
shockey 0:11b872c2badc 170 veml6075->setUVConf(0x00) ;
shockey 0:11b872c2badc 171 // veml6040 = new VEML6040(PTB3, PTB2, VEML6040_I2C_ADDRESS) ; // for FRDM-K22F
shockey 0:11b872c2badc 172 // veml6040->setCOLORConf(0x00) ;
shockey 0:11b872c2badc 173 }
shockey 0:11b872c2badc 174
shockey 0:11b872c2badc 175 void reportVEML6075(VEML6075 *veml,int x, int y)
shockey 0:11b872c2badc 176 {
shockey 0:11b872c2badc 177 uint8_t uvconf = 0x00 ;
shockey 0:11b872c2badc 178 uint16_t id = 0 ;
shockey 0:11b872c2badc 179 uint16_t uvadata = 0 ;
shockey 0:11b872c2badc 180 uint16_t uvbdata = 0 ;
shockey 0:11b872c2badc 181 uint16_t uvcomp1data = 0 ;
shockey 0:11b872c2badc 182 uint16_t uvcomp2data = 0 ;
shockey 0:11b872c2badc 183 float fUVA = 0.0 ;
shockey 0:11b872c2badc 184 float fUVA_CIE = 0.0 ;
shockey 0:11b872c2badc 185 float fUVB = 0.0 ;
shockey 0:11b872c2badc 186 float fUVB_CIE = 0.0 ;
shockey 0:11b872c2badc 187 float uvi = 0 ;
shockey 0:11b872c2badc 188
shockey 0:11b872c2badc 189 veml->setUVConf(uvconf) ;
shockey 0:11b872c2badc 190 veml->getUVConf(&uvconf) ;
shockey 0:11b872c2badc 191 veml->getID(&id) ;
shockey 0:11b872c2badc 192
shockey 0:11b872c2badc 193 veml->getUVAData(&uvadata) ;
shockey 0:11b872c2badc 194 veml->getUVBData(&uvbdata) ;
shockey 0:11b872c2badc 195 veml->getUVCOMP1Data(&uvcomp1data) ;
shockey 0:11b872c2badc 196 veml->getUVCOMP2Data(&uvcomp2data) ;
shockey 0:11b872c2badc 197 fUVA = veml->getUVA() ;
shockey 0:11b872c2badc 198 fUVA_CIE = veml->getUVA_CIE() ;
shockey 0:11b872c2badc 199 fUVB = veml->getUVB() ;
shockey 0:11b872c2badc 200 fUVB_CIE = veml->getUVB_CIE() ;
shockey 0:11b872c2badc 201 uvi = veml->UVI() ;
shockey 0:11b872c2badc 202
shockey 0:11b872c2badc 203 TFT.foreground(White);
shockey 0:11b872c2badc 204 TFT.locate(x+30, y) ;
shockey 0:11b872c2badc 205 TFT.printf("VEML6075\n") ;
shockey 0:11b872c2badc 206 TFT.locate(x, y+10) ;
shockey 0:11b872c2badc 207 TFT.printf("ID = 0x%04X\n", id) ;
shockey 0:11b872c2badc 208 TFT.locate(x, y+20) ;
shockey 0:11b872c2badc 209 TFT.printf("uvconf = 0x%02X\n", uvconf) ;
shockey 0:11b872c2badc 210 TFT.locate(x, y+40) ;
shockey 0:11b872c2badc 211 TFT.printf("UVLED:NCSU033X\n") ;
shockey 0:11b872c2badc 212 TFT.locate(x, y+50) ;
shockey 0:11b872c2badc 213 TFT.printf("UVA [%08.2f uW/cm2]\n", fUVA ) ;
shockey 0:11b872c2badc 214 // TFT.locate(x, y+50) ;
shockey 0:11b872c2badc 215 // TFT.printf("UVA [%.7f W/m2]\n", fUVA_CIE ) ;
shockey 0:11b872c2badc 216 TFT.locate(x, y+70) ;
shockey 0:11b872c2badc 217 TFT.printf("UVLED:UVTOP310TO39HS\n") ;
shockey 0:11b872c2badc 218 TFT.locate(x, y+80) ;
shockey 0:11b872c2badc 219 TFT.printf("UVB [%08.2f uW/cm2]\n", fUVB ) ;
shockey 0:11b872c2badc 220 // TFT.locate(x, y+80) ;
shockey 0:11b872c2badc 221 // TFT.printf("UVB [%.7f W/m2]\n", fUVB_CIE ) ;
shockey 0:11b872c2badc 222 TFT.locate(x, y+100) ;
shockey 0:11b872c2badc 223 if (uvi >= 8.0 )
shockey 0:11b872c2badc 224 TFT.foreground(Red);
shockey 0:11b872c2badc 225 else if (uvi < 8.0 && uvi > 3.0 )
shockey 0:11b872c2badc 226 TFT.foreground(Yellow);
shockey 0:11b872c2badc 227 else
shockey 0:11b872c2badc 228 TFT.foreground(White);
shockey 0:11b872c2badc 229 // TFT.printf("UVI [ %.1f ] for Demo\n", uvi ) ; // For demo
shockey 0:11b872c2badc 230 TFT.printf("UVI [ %.1f ] \n", uvi ) ;
shockey 0:11b872c2badc 231 // TFT.printf("comp1 [ %6d ]", uvcomp1data) ;
shockey 0:11b872c2badc 232 // TFT.printf("comp2 [ %6d ]", uvcomp2data) ;
shockey 0:11b872c2badc 233 }
shockey 0:11b872c2badc 234
shockey 0:11b872c2badc 235 void doReportVeml(void)
shockey 0:11b872c2badc 236 {
shockey 0:11b872c2badc 237 if (prevPage != page) {
shockey 0:11b872c2badc 238 TFT.cls() ;
shockey 0:11b872c2badc 239 wait(0.5) ;
shockey 0:11b872c2badc 240 }
shockey 0:11b872c2badc 241 TFT.set_font((unsigned char*) Terminal6x8);
shockey 0:11b872c2badc 242 reportVEML6075(veml6075, 5, 10) ;
shockey 0:11b872c2badc 243 // reportVEML6040(veml6040, 5, 10) ;
shockey 0:11b872c2badc 244 }
shockey 0:11b872c2badc 245
shockey 0:11b872c2badc 246 double clip(double src)
shockey 0:11b872c2badc 247 {
shockey 0:11b872c2badc 248 double value ;
shockey 0:11b872c2badc 249 value = src ;
shockey 0:11b872c2badc 250 if (value < 0.0) {
shockey 0:11b872c2badc 251 value = 0.0 ;
shockey 0:11b872c2badc 252 } else if (value > 2.0) {
shockey 0:11b872c2badc 253 value = 2.0 ;
shockey 0:11b872c2badc 254 }
shockey 0:11b872c2badc 255 return( value ) ;
shockey 0:11b872c2badc 256 }
shockey 0:11b872c2badc 257
shockey 0:11b872c2badc 258 void updatePage(void)
shockey 0:11b872c2badc 259 {
shockey 0:11b872c2badc 260 switch(page) {
shockey 0:11b872c2badc 261 case 0: // splash
shockey 0:11b872c2badc 262 if (page != prevPage) {
shockey 0:11b872c2badc 263 doSplash() ;
shockey 0:11b872c2badc 264 }
shockey 0:11b872c2badc 265 break ;
shockey 0:11b872c2badc 266 case 1:
shockey 0:11b872c2badc 267 if (page != prevPage) {
shockey 0:11b872c2badc 268 doPict(kinetis_logo) ;
shockey 0:11b872c2badc 269 }
shockey 0:11b872c2badc 270 break ;
shockey 0:11b872c2badc 271 case 2:
shockey 0:11b872c2badc 272 doReportVeml() ;
shockey 0:11b872c2badc 273 // if (page != prevPage) {
shockey 0:11b872c2badc 274 // doPict(ojizo) ;
shockey 0:11b872c2badc 275 // }
shockey 0:11b872c2badc 276 break ;
shockey 0:11b872c2badc 277 default:
shockey 0:11b872c2badc 278 page = 0 ;
shockey 0:11b872c2badc 279 doPict(kinetis_logo) ;
shockey 0:11b872c2badc 280 break ;
shockey 0:11b872c2badc 281 }
shockey 0:11b872c2badc 282 prevPage = page ;
shockey 0:11b872c2badc 283 }
shockey 0:11b872c2badc 284
shockey 0:11b872c2badc 285 int main()
shockey 0:11b872c2badc 286 {
shockey 0:11b872c2badc 287 oled_cs = new DigitalOut(PIN_OLED_CS, 1) ;
shockey 0:11b872c2badc 288 oled_rs = new DigitalOut(PIN_OLED_RS, 1) ;
shockey 0:11b872c2badc 289 tty = new vt100() ;
shockey 0:11b872c2badc 290 tty->cls() ;
shockey 0:11b872c2badc 291
shockey 0:11b872c2badc 292 init_quattro() ;
shockey 0:11b872c2badc 293 int3_r->fall(swRPressed) ;
shockey 0:11b872c2badc 294 int4_g->fall(swGPressed) ;
shockey 0:11b872c2badc 295 int5_b->fall(swBPressed) ;
shockey 0:11b872c2badc 296
shockey 0:11b872c2badc 297 init_sensors() ;
shockey 0:11b872c2badc 298
shockey 0:11b872c2badc 299 printf("quattro (%s)\n\r", __DATE__) ;
shockey 0:11b872c2badc 300 TFT.set_font((unsigned char*) Arial12x12);
shockey 0:11b872c2badc 301 TFT.window(0,0,128,128) ;
shockey 0:11b872c2badc 302
shockey 0:11b872c2badc 303 doSplash() ;
shockey 0:11b872c2badc 304 page = 0 ;
shockey 0:11b872c2badc 305 prevPage = 0 ;
shockey 0:11b872c2badc 306 TFT.display(1) ;
shockey 0:11b872c2badc 307
shockey 0:11b872c2badc 308 wait(1) ;
shockey 0:11b872c2badc 309 while(1) {
shockey 0:11b872c2badc 310 disableSW() ;
shockey 0:11b872c2badc 311 updatePage() ;
shockey 0:11b872c2badc 312 enableSW() ;
shockey 0:11b872c2badc 313 wait(0.1) ;
shockey 0:11b872c2badc 314 }
shockey 0:11b872c2badc 315 }