Example program using the MLX90620 and KL25Z. Best viewed with wide-screen VT-100 color terminal. Tested with Tera Term. Easy i2c pin name change for mbed1768.

Dependencies:   MLX9062x PrintBuffer mbed

KL25Z_MLX90620 home page:

This program takes temperature data from the MLX90620 and displays the temperature data in the same format as the 16x4 pixel array. The display is updated once a second. Temperature can be displayed in degrees C or F and changed on the fly. Also, the data pixel format can be swapped. If the MLX90620 is pointing inward (toward you) or outward (away from you) you can change that on the fly as well. For each display output, the coolest pixel is displayed in BLUE and the warmest pixel in RED. The new data is painted over the old data.

NOTE: This program relys heavily on the mbed's USB Serial communication. ASCII ESCape codes are used. Use a terminal emulator like Tera Term. Be sure that the terminal has a wide screen (136 characters wide), with VT100 color emulation enabled and an even spaced character font like "Terminal".

The maximum USB serial communication you can use on the mbed1768 is 921600 baud. The KL25Z is limited to 115200 baud. Faster speeds cause characters drop out.

If you get bored, you can watch the RGB led on the KL25Z change color. Since the LED does not blend colors well, put a small piece of kleenex or a single layer from a napkin over the LED. You'll have a much better appreciation for the LED that way. Thanks to David Dicarlo's FRDM_RGBLED program for that idea.

Typical output from program:

/media/uploads/loopsva/mlx90620output.jpg

...kevin

Committer:
loopsva
Date:
Thu Aug 01 18:37:35 2013 +0000
Revision:
1:9d7894633924
Parent:
0:6f472b9627c7
Child:
2:1f1157f04539
Initial release of MLX90620 program with update MLX90620 and PrintBuffer drivers.  Can also be used with mbed1768 by just changing the MLX90620 i2c I/O pin names.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:6f472b9627c7 1 #include "mbed.h"
loopsva 0:6f472b9627c7 2 #include "PrintBuffer.h"
loopsva 0:6f472b9627c7 3 #include "MLX90620.h"
loopsva 0:6f472b9627c7 4
loopsva 0:6f472b9627c7 5 #define BS 0x08 //ascii backspace
loopsva 0:6f472b9627c7 6 #define CR 0x0d //ascii CR
loopsva 0:6f472b9627c7 7 #define LF 0x0a //ascii LF
loopsva 0:6f472b9627c7 8 #define SP 0x20 //ascii space
loopsva 0:6f472b9627c7 9 #define ESC 0x1b //ascii escape
loopsva 0:6f472b9627c7 10 #define DP 0x2e //ascii decimal point / period
loopsva 0:6f472b9627c7 11 #define ticC 0x03 //ascii control C
loopsva 0:6f472b9627c7 12 #define ticX 0x18 //ascii control X
loopsva 0:6f472b9627c7 13
loopsva 0:6f472b9627c7 14 extern "C" void mbed_reset();
loopsva 0:6f472b9627c7 15 int revision = 102;
loopsva 0:6f472b9627c7 16 int gDebug = 2;
loopsva 0:6f472b9627c7 17
loopsva 0:6f472b9627c7 18 Serial pc (USBTX, USBRX);
loopsva 0:6f472b9627c7 19 I2C i2c1(PTE0, PTE1);
loopsva 0:6f472b9627c7 20 I2C i2c2(PTE25, PTE24);
loopsva 0:6f472b9627c7 21 MLX90620 mlx(PTE0, PTE1, "mlx"); //MLX90620 register access
loopsva 0:6f472b9627c7 22 PrintBuffer pb("pb"); //new for 132. Moved PrintBuffer off to .cpp and .h files
loopsva 0:6f472b9627c7 23
loopsva 0:6f472b9627c7 24 PwmOut rled(LED_RED);
loopsva 0:6f472b9627c7 25 PwmOut gled(LED_GREEN);
loopsva 0:6f472b9627c7 26 PwmOut bled(LED_BLUE);
loopsva 0:6f472b9627c7 27
loopsva 0:6f472b9627c7 28 int rLedDelay = 0;
loopsva 0:6f472b9627c7 29 float rLedPwm = 0.01; //LED1 brightness
loopsva 0:6f472b9627c7 30 bool rLedUp = true; //LED1 auto up-down
loopsva 0:6f472b9627c7 31 int gLedDelay = 0;
loopsva 0:6f472b9627c7 32 float gLedPwm = 0.01; //LED1 brightness
loopsva 0:6f472b9627c7 33 bool gLedUp = true; //LED1 auto up-down
loopsva 0:6f472b9627c7 34 int bLedDelay = 0;
loopsva 0:6f472b9627c7 35 float bLedPwm = 0.01; //LED1 brightness
loopsva 0:6f472b9627c7 36 bool bLedUp = true; //LED1 auto up-down
loopsva 0:6f472b9627c7 37
loopsva 0:6f472b9627c7 38 //MLX90620 buffers used by MLX90620.cpp
loopsva 0:6f472b9627c7 39 char* EEbuf = new char[256];
loopsva 0:6f472b9627c7 40 char* RamCmmd = new char[8]; //holds / sends MLX90620 RAM commands
loopsva 0:6f472b9627c7 41 char* RamBuf = new char[128]; //0x3f words, values are 'unsigned short'
loopsva 0:6f472b9627c7 42 int SaveEEP = 0; //***USED BY .INI FILE save EEPROM Contents to EEP.CSV
loopsva 0:6f472b9627c7 43
loopsva 0:6f472b9627c7 44 //For MLX90620
loopsva 0:6f472b9627c7 45 unsigned short ConfigReg = 0; //MLX90620 configuration register
loopsva 0:6f472b9627c7 46 float Ta = 0.0;
loopsva 0:6f472b9627c7 47 double TempPxl = 0;
loopsva 0:6f472b9627c7 48
loopsva 0:6f472b9627c7 49 //Used for display of temperature and extreme values
loopsva 0:6f472b9627c7 50 float HotPxl = -40.0; //hottest pixel in the array
loopsva 0:6f472b9627c7 51 float ColdPxl = 200.0; //coldest pixel in the array
loopsva 0:6f472b9627c7 52 unsigned short HotColor = 0xffff; //color of hottest pixel
loopsva 0:6f472b9627c7 53 unsigned short ColdColor = 0xffff; //color of coldest pixel
loopsva 0:6f472b9627c7 54 int AutoScale = 0; //***USED BY .INI FILE autoscale display 0 or 1
loopsva 0:6f472b9627c7 55 bool ReFrame = false; //do a reframe if asked
loopsva 0:6f472b9627c7 56 int HottestX = 0; //hottest pixel X
loopsva 0:6f472b9627c7 57 int HottestY = 0; //hottest pixel Y
loopsva 0:6f472b9627c7 58 int ColdestX = 0; //coldest pixel X
loopsva 0:6f472b9627c7 59 int ColdestY = 0; //coldest pixel Y
loopsva 0:6f472b9627c7 60 bool PickPix = false; //pick a pixel to dump all data on flag
loopsva 0:6f472b9627c7 61 int pixX = 0; //display pixel X (0-15)
loopsva 0:6f472b9627c7 62 int pixY = 0; //display pixel Y (0-3)
loopsva 0:6f472b9627c7 63
loopsva 0:6f472b9627c7 64 //Display Options
loopsva 0:6f472b9627c7 65 int TempC = 'C'; //***USED BY .INI FILE display temperatures in degrees C or F
loopsva 0:6f472b9627c7 66 int SensFacingAway = 0; //***USED BY .INI FILE sensor facing towards you or away from you
loopsva 0:6f472b9627c7 67 int xHatch = 1; //***USED BY .INI FILE display hatch pattern between pixels or allow pixels to blend together
loopsva 0:6f472b9627c7 68 float lowEnd = 20.0; //***USED BY .INI FILE low end of color temperature scale (blue end)
loopsva 0:6f472b9627c7 69 float hiEnd = 100.0; //***USED BY .INI FILE top end of color temperature scale (red end)
loopsva 0:6f472b9627c7 70 int PutOnPC = 1; //***USED BY .INI FILE display temperature array on PC 0 or 1. Requires VT100 terminal operation
loopsva 0:6f472b9627c7 71
loopsva 0:6f472b9627c7 72 const int PCRXBUFSIZE = 128; //pc RX buffer size
loopsva 0:6f472b9627c7 73 char pcRxBuffer[PCRXBUFSIZE]; //RX data buffer
loopsva 0:6f472b9627c7 74 volatile int pcRxQty = 0; //RX data counter/pointer
loopsva 0:6f472b9627c7 75 volatile char inchar = 0; //RX input character
loopsva 0:6f472b9627c7 76 volatile bool LocalEcho = false; //whether or not, to local echo input chars from pc
loopsva 0:6f472b9627c7 77 volatile bool pcRxLine = false; //CR or LF detected in RX buffer
loopsva 0:6f472b9627c7 78 volatile bool pcRxEOB = false; //RX buffer EOB (full)
loopsva 0:6f472b9627c7 79 volatile bool pcRxIsNumb = false; //whether or not string is a valid number (including dp)
loopsva 0:6f472b9627c7 80 volatile double pcRxNumb = 0.0; //RX buffer comversion
loopsva 0:6f472b9627c7 81 int pcRxCharCnt = 0; //total number of pc RX characters received since boot
loopsva 0:6f472b9627c7 82 int pcRxIRQCnt = 0; //total number of pc RX interrupts received since boot
loopsva 0:6f472b9627c7 83
loopsva 0:6f472b9627c7 84 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 85 // This function is called when a character goes into the RX buffer.
loopsva 0:6f472b9627c7 86
loopsva 0:6f472b9627c7 87 void PcRxChar() {
loopsva 0:6f472b9627c7 88 pcRxCharCnt++;
loopsva 0:6f472b9627c7 89 if(inchar == BS) {
loopsva 0:6f472b9627c7 90 if(pcRxQty == 0) {
loopsva 0:6f472b9627c7 91 pcRxBuffer[pcRxQty] = 0;
loopsva 0:6f472b9627c7 92 } else {
loopsva 0:6f472b9627c7 93 if(LocalEcho) pc.printf("%c %c", BS, BS);
loopsva 0:6f472b9627c7 94 pcRxQty--;
loopsva 0:6f472b9627c7 95 }
loopsva 0:6f472b9627c7 96 } else if((inchar == CR) || (inchar == LF)) {
loopsva 0:6f472b9627c7 97 pcRxLine = true;
loopsva 0:6f472b9627c7 98 if(LocalEcho) pc.printf("\n");
loopsva 1:9d7894633924 99
loopsva 1:9d7894633924 100 // no s/w reset in the KL25Z mbed.
loopsva 1:9d7894633924 101 // } else if(inchar == ticC) {
loopsva 1:9d7894633924 102 // pc.printf("\n\n*** Control C detected, Resetting ***\n");
loopsva 1:9d7894633924 103 // mbed_reset();
loopsva 0:6f472b9627c7 104 } else if((inchar == 'C') || (inchar == 'c')) {
loopsva 0:6f472b9627c7 105 TempC = inchar;
loopsva 0:6f472b9627c7 106 } else if((inchar == 'F') || (inchar == 'f')) {
loopsva 0:6f472b9627c7 107 TempC = inchar;
loopsva 0:6f472b9627c7 108 } else if((inchar == 'I') || (inchar == 'i')) {
loopsva 0:6f472b9627c7 109 SensFacingAway = 0;
loopsva 0:6f472b9627c7 110 } else if((inchar == 'O') || (inchar == 'o')) {
loopsva 0:6f472b9627c7 111 SensFacingAway = 1;
loopsva 0:6f472b9627c7 112 } else {
loopsva 0:6f472b9627c7 113 if(pcRxQty < sizeof(pcRxBuffer)) {
loopsva 0:6f472b9627c7 114 pcRxBuffer[pcRxQty] = inchar;
loopsva 0:6f472b9627c7 115 pcRxQty++;
loopsva 0:6f472b9627c7 116 if(LocalEcho) pc.putc(inchar);
loopsva 0:6f472b9627c7 117 } else {
loopsva 0:6f472b9627c7 118 pc.printf ("\n*** pcRxBuffer is full!!\n");
loopsva 0:6f472b9627c7 119 pcRxEOB = true;
loopsva 1:9d7894633924 120 pcRxQty = 0;
loopsva 1:9d7894633924 121 pcRxBuffer[pcRxQty] = 0;
loopsva 0:6f472b9627c7 122 }
loopsva 0:6f472b9627c7 123 }
loopsva 0:6f472b9627c7 124
loopsva 0:6f472b9627c7 125 bool oneDot = false;
loopsva 0:6f472b9627c7 126 pcRxIsNumb = true;
loopsva 0:6f472b9627c7 127 for(int i = 0; i < pcRxQty; i++) {
loopsva 0:6f472b9627c7 128 if(pcRxBuffer[i] == '.') {
loopsva 0:6f472b9627c7 129 if(oneDot == true) {
loopsva 0:6f472b9627c7 130 pcRxIsNumb = false;
loopsva 0:6f472b9627c7 131 break;
loopsva 0:6f472b9627c7 132 } else {
loopsva 0:6f472b9627c7 133 oneDot = true;
loopsva 0:6f472b9627c7 134 }
loopsva 0:6f472b9627c7 135 }
loopsva 0:6f472b9627c7 136 else if((pcRxBuffer[i] < '0') || (pcRxBuffer[i] > '9')) {
loopsva 0:6f472b9627c7 137 if(!((i == 0) && (pcRxBuffer[i] == '-'))) {
loopsva 0:6f472b9627c7 138 pcRxIsNumb = false;
loopsva 0:6f472b9627c7 139 break;
loopsva 0:6f472b9627c7 140 }
loopsva 0:6f472b9627c7 141 }
loopsva 0:6f472b9627c7 142 }
loopsva 0:6f472b9627c7 143 }
loopsva 0:6f472b9627c7 144
loopsva 0:6f472b9627c7 145 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 146 // Read received chars from USB UART
loopsva 0:6f472b9627c7 147
loopsva 0:6f472b9627c7 148 void PcRxIRQ(void){
loopsva 0:6f472b9627c7 149 pcRxIRQCnt++;
loopsva 0:6f472b9627c7 150 // LPC_UART0->IER = 0; //Disable Rx interrupt
loopsva 0:6f472b9627c7 151 while (pc.readable()) {
loopsva 0:6f472b9627c7 152 inchar = pc.getc(); //read data from USB
loopsva 0:6f472b9627c7 153 PcRxChar(); //go process char
loopsva 0:6f472b9627c7 154 }
loopsva 0:6f472b9627c7 155 // LPC_UART0->IER = 1; //re-enable Rx interrupt
loopsva 0:6f472b9627c7 156 }
loopsva 0:6f472b9627c7 157
loopsva 0:6f472b9627c7 158 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 159 //Detect I2C device chain
loopsva 0:6f472b9627c7 160
loopsva 0:6f472b9627c7 161 int i2cQty = 16; //number of bytes to get
loopsva 0:6f472b9627c7 162 char i2cData[32]; //i2c buffer data
loopsva 0:6f472b9627c7 163
loopsva 0:6f472b9627c7 164 void find_i2c1() {
loopsva 0:6f472b9627c7 165 if(gDebug > 1) pc.printf("Searching for I2C devices on bus 1...\n");
loopsva 0:6f472b9627c7 166
loopsva 0:6f472b9627c7 167 int count = 0;
loopsva 0:6f472b9627c7 168 for (int address = 2; address < 256; address +=2) {
loopsva 0:6f472b9627c7 169 if (!i2c1.write(address, NULL, 0)) { // 0 returned is ok
loopsva 0:6f472b9627c7 170 wait_ms(5);
loopsva 0:6f472b9627c7 171 if(gDebug > 1) pc.printf(" - I2C device found at address 0x%02X\n", address);
loopsva 0:6f472b9627c7 172 for (int clrb = 0; clrb < i2cQty; clrb +=1) { //clear out i2c buffer before reading in data
loopsva 0:6f472b9627c7 173 i2cData[clrb] = 0;
loopsva 0:6f472b9627c7 174 }
loopsva 0:6f472b9627c7 175 count++;
loopsva 0:6f472b9627c7 176 }
loopsva 0:6f472b9627c7 177 }
loopsva 0:6f472b9627c7 178 if(gDebug > 1) pc.printf(" - I2seeU! %d devices found\n", count);
loopsva 0:6f472b9627c7 179 }
loopsva 0:6f472b9627c7 180
loopsva 0:6f472b9627c7 181 //---------
loopsva 0:6f472b9627c7 182
loopsva 0:6f472b9627c7 183 void find_i2c2() {
loopsva 0:6f472b9627c7 184 if(gDebug > 1) pc.printf("Searching for I2C devices on bus 2...\n");
loopsva 0:6f472b9627c7 185
loopsva 0:6f472b9627c7 186 int count = 0;
loopsva 0:6f472b9627c7 187 for (int address = 2; address < 256; address +=2) {
loopsva 0:6f472b9627c7 188 if (!i2c2.write(address, NULL, 0)) { // 0 returned is ok
loopsva 0:6f472b9627c7 189 wait_ms(5);
loopsva 0:6f472b9627c7 190 if(gDebug > 1) pc.printf(" - I2C device found at address 0x%02X\n", address);
loopsva 0:6f472b9627c7 191 for (int clrb = 0; clrb < i2cQty; clrb +=1) { //clear out i2c buffer before reading in data
loopsva 0:6f472b9627c7 192 i2cData[clrb] = 0;
loopsva 0:6f472b9627c7 193 }
loopsva 0:6f472b9627c7 194 count++;
loopsva 0:6f472b9627c7 195 }
loopsva 0:6f472b9627c7 196 }
loopsva 0:6f472b9627c7 197 if(gDebug > 1) pc.printf(" - I2seeU! %d devices found\n", count);
loopsva 0:6f472b9627c7 198 }
loopsva 0:6f472b9627c7 199
loopsva 0:6f472b9627c7 200 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 201 // Slowly rise and lower red LED's brightness
loopsva 0:6f472b9627c7 202
loopsva 0:6f472b9627c7 203 const float ALLLEDSTEPS = 21.0;
loopsva 0:6f472b9627c7 204
loopsva 0:6f472b9627c7 205 const float RLEDMAX = 0.150;
loopsva 0:6f472b9627c7 206 const float RLEDSTEP = (RLEDMAX / ALLLEDSTEPS);
loopsva 0:6f472b9627c7 207
loopsva 0:6f472b9627c7 208 void rWinkLed() {
loopsva 0:6f472b9627c7 209 rLedDelay++;
loopsva 0:6f472b9627c7 210 if(rLedDelay >= 1) {
loopsva 0:6f472b9627c7 211 rLedDelay = 0;
loopsva 0:6f472b9627c7 212 if(rLedUp == true) {
loopsva 0:6f472b9627c7 213 rLedPwm = rLedPwm + RLEDSTEP;
loopsva 0:6f472b9627c7 214 if(rLedPwm > RLEDMAX) {
loopsva 0:6f472b9627c7 215 rLedUp = false;
loopsva 0:6f472b9627c7 216 rLedPwm = RLEDMAX;
loopsva 0:6f472b9627c7 217 }
loopsva 0:6f472b9627c7 218 } else {
loopsva 0:6f472b9627c7 219 rLedPwm = rLedPwm - RLEDSTEP;
loopsva 0:6f472b9627c7 220 if(rLedPwm < RLEDSTEP) {
loopsva 0:6f472b9627c7 221 rLedUp = true;
loopsva 0:6f472b9627c7 222 rLedPwm = 0.001;
loopsva 0:6f472b9627c7 223 }
loopsva 0:6f472b9627c7 224 }
loopsva 0:6f472b9627c7 225 rled = 1.0 - rLedPwm;
loopsva 0:6f472b9627c7 226 }
loopsva 0:6f472b9627c7 227 }
loopsva 0:6f472b9627c7 228
loopsva 0:6f472b9627c7 229 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 230 // Slowly rise and lower green LED's brightness
loopsva 0:6f472b9627c7 231
loopsva 0:6f472b9627c7 232 const float GLEDMAX = 0.970;
loopsva 0:6f472b9627c7 233 const float GLEDSTEP = (GLEDMAX / ALLLEDSTEPS);
loopsva 0:6f472b9627c7 234
loopsva 0:6f472b9627c7 235 void gWinkLed() {
loopsva 0:6f472b9627c7 236 gLedDelay++;
loopsva 0:6f472b9627c7 237 if(gLedDelay >= 1) {
loopsva 0:6f472b9627c7 238 gLedDelay = 0;
loopsva 0:6f472b9627c7 239 if(gLedUp == true) {
loopsva 0:6f472b9627c7 240 gLedPwm = gLedPwm + GLEDSTEP;
loopsva 0:6f472b9627c7 241 if(gLedPwm > GLEDMAX) {
loopsva 0:6f472b9627c7 242 gLedUp = false;
loopsva 0:6f472b9627c7 243 gLedPwm = GLEDMAX;
loopsva 0:6f472b9627c7 244 }
loopsva 0:6f472b9627c7 245 } else {
loopsva 0:6f472b9627c7 246 gLedPwm = gLedPwm - GLEDSTEP;
loopsva 0:6f472b9627c7 247 if(gLedPwm < GLEDSTEP) {
loopsva 0:6f472b9627c7 248 gLedUp = true;
loopsva 0:6f472b9627c7 249 gLedPwm = 0.001;
loopsva 0:6f472b9627c7 250 }
loopsva 0:6f472b9627c7 251 }
loopsva 0:6f472b9627c7 252 gled = 1.0 - gLedPwm;
loopsva 0:6f472b9627c7 253 }
loopsva 0:6f472b9627c7 254 }
loopsva 0:6f472b9627c7 255
loopsva 0:6f472b9627c7 256 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 257 // Slowly rise and lower blue LED's brightness
loopsva 0:6f472b9627c7 258
loopsva 0:6f472b9627c7 259 const float BLEDMAX = 0.500;
loopsva 0:6f472b9627c7 260 const float BLEDSTEP = (BLEDMAX / ALLLEDSTEPS);
loopsva 0:6f472b9627c7 261
loopsva 0:6f472b9627c7 262 void bWinkLed() {
loopsva 0:6f472b9627c7 263 bLedDelay++;
loopsva 0:6f472b9627c7 264 // pc.printf("%c%c%c%c%c%c%5.3f ", BS, BS, BS, BS, BS, BS, bLedPwm);
loopsva 0:6f472b9627c7 265 if(bLedDelay >= 1) {
loopsva 0:6f472b9627c7 266 bLedDelay = 0;
loopsva 0:6f472b9627c7 267 if(bLedUp == true) {
loopsva 0:6f472b9627c7 268 bLedPwm = bLedPwm + BLEDSTEP;
loopsva 0:6f472b9627c7 269 if(bLedPwm > BLEDMAX) {
loopsva 0:6f472b9627c7 270 bLedUp = false;
loopsva 0:6f472b9627c7 271 bLedPwm = BLEDMAX;
loopsva 0:6f472b9627c7 272 }
loopsva 0:6f472b9627c7 273 } else {
loopsva 0:6f472b9627c7 274 bLedPwm = bLedPwm - BLEDSTEP;
loopsva 0:6f472b9627c7 275 if(bLedPwm < BLEDSTEP) {
loopsva 0:6f472b9627c7 276 bLedUp = true;
loopsva 0:6f472b9627c7 277 bLedPwm = 0.001;
loopsva 0:6f472b9627c7 278 }
loopsva 0:6f472b9627c7 279 }
loopsva 0:6f472b9627c7 280 bled = 1.0 - bLedPwm;
loopsva 0:6f472b9627c7 281 }
loopsva 0:6f472b9627c7 282 }
loopsva 0:6f472b9627c7 283
loopsva 0:6f472b9627c7 284 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 285 // moving RGB LED display. Hacked from: david dicarlo / FRDM_RGBLED
loopsva 0:6f472b9627c7 286
loopsva 0:6f472b9627c7 287 const float pi = 3.1415927;
loopsva 0:6f472b9627c7 288 float iLeds = 0.0;
loopsva 0:6f472b9627c7 289
loopsva 0:6f472b9627c7 290 void sinLEDs() {
loopsva 0:6f472b9627c7 291 iLeds += 0.02; // was 0.001 in original code
loopsva 0:6f472b9627c7 292 if(iLeds > (60.0 * pi)) iLeds = 0.0;
loopsva 0:6f472b9627c7 293 rLedPwm = (1 + sin(2 * iLeds)) / 2; // calculate values for RGB based on different
loopsva 0:6f472b9627c7 294 gLedPwm = (1 + sin(3 * iLeds)) / 2; // frequency sin waves. This should give a nice
loopsva 0:6f472b9627c7 295 bLedPwm = (1 + sin(5 * iLeds)) / 2; // smooth transistion between colors and a
loopsva 0:6f472b9627c7 296 rled = rLedPwm; // send RGB values to LED PWMs
loopsva 0:6f472b9627c7 297 gled = gLedPwm;
loopsva 0:6f472b9627c7 298 bled = bLedPwm;
loopsva 0:6f472b9627c7 299 }
loopsva 0:6f472b9627c7 300
loopsva 0:6f472b9627c7 301 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 302 // See if new temperature in array is higher then the current hottest or colder then the current coldest
loopsva 0:6f472b9627c7 303
loopsva 0:6f472b9627c7 304 void CheckNewExtreme() {
loopsva 0:6f472b9627c7 305 if(TempPxl > HotPxl) {
loopsva 0:6f472b9627c7 306 HotPxl = TempPxl;
loopsva 0:6f472b9627c7 307 HottestX = pixX / 4;
loopsva 0:6f472b9627c7 308 HottestY = pixY;
loopsva 0:6f472b9627c7 309 }
loopsva 0:6f472b9627c7 310 if(TempPxl < ColdPxl) {
loopsva 0:6f472b9627c7 311 ColdPxl = TempPxl;
loopsva 0:6f472b9627c7 312 ColdestX = pixX / 4;
loopsva 0:6f472b9627c7 313 ColdestY = pixY;
loopsva 0:6f472b9627c7 314 }
loopsva 0:6f472b9627c7 315 }
loopsva 0:6f472b9627c7 316
loopsva 0:6f472b9627c7 317 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 318 // Change color of extreme tempeature values on PC using VT100 escape sequences
loopsva 0:6f472b9627c7 319
loopsva 0:6f472b9627c7 320 bool PCdeftFlag = true;
loopsva 0:6f472b9627c7 321
loopsva 0:6f472b9627c7 322 void PCExtreme() {
loopsva 0:6f472b9627c7 323 if((HottestX == (pixX / 4)) && (HottestY == pixY)) {
loopsva 0:6f472b9627c7 324 PCdeftFlag = false;
loopsva 0:6f472b9627c7 325 pc.printf("%c[8;31;2m", ESC);
loopsva 0:6f472b9627c7 326 return;
loopsva 0:6f472b9627c7 327 } else
loopsva 0:6f472b9627c7 328 if((ColdestX == (pixX / 4)) && (ColdestY == pixY)) {
loopsva 0:6f472b9627c7 329 PCdeftFlag = false;
loopsva 0:6f472b9627c7 330 pc.printf("%c[8;34;2m", ESC);
loopsva 0:6f472b9627c7 331 return;
loopsva 0:6f472b9627c7 332 } else
loopsva 0:6f472b9627c7 333 if(PCdeftFlag == false) {
loopsva 0:6f472b9627c7 334 PCdeftFlag = true;
loopsva 0:6f472b9627c7 335 pc.printf("%c[8;30m", ESC);
loopsva 0:6f472b9627c7 336 }
loopsva 0:6f472b9627c7 337 }
loopsva 0:6f472b9627c7 338
loopsva 0:6f472b9627c7 339 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 340 // Pick a pixel to print out temperature. X = column 0 - 15, Y = row 0 - 3
loopsva 0:6f472b9627c7 341
loopsva 0:6f472b9627c7 342 void PickaPixel(int pX, int pY) {
loopsva 0:6f472b9627c7 343 TempPxl = mlx.CalcPixel(pX + pY);
loopsva 0:6f472b9627c7 344 if ((TempC == 'c') || (TempC == 'C')) {
loopsva 0:6f472b9627c7 345 pc.printf("Pixel X:%d Y:%d Temp: %.2f degC\n", pX / 4, pY, TempPxl);
loopsva 0:6f472b9627c7 346 } else {
loopsva 0:6f472b9627c7 347 pc.printf("Pixel X:%d Y:%d Temp: %.2f degF\n", pX / 4, pY, TempPxl * 9.0 / 5.0 + 32.0);
loopsva 0:6f472b9627c7 348 }
loopsva 0:6f472b9627c7 349 }
loopsva 0:6f472b9627c7 350
loopsva 0:6f472b9627c7 351 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 352 // Display on PC using VT100 escape codes
loopsva 0:6f472b9627c7 353
loopsva 0:6f472b9627c7 354 const int TTX = 45;
loopsva 0:6f472b9627c7 355 const int TTY = 120;
loopsva 0:6f472b9627c7 356 int tX = TTX;
loopsva 0:6f472b9627c7 357 int tY = TTY;;
loopsva 0:6f472b9627c7 358
loopsva 0:6f472b9627c7 359 int AllowVT100 = 0;
loopsva 0:6f472b9627c7 360
loopsva 0:6f472b9627c7 361 void ShowTempsVT100() {
loopsva 0:6f472b9627c7 362 if(AllowVT100 <= 3) { //update PC display every 4th TFT pixel update
loopsva 0:6f472b9627c7 363 return;
loopsva 0:6f472b9627c7 364 }
loopsva 0:6f472b9627c7 365 AllowVT100 = 0;
loopsva 0:6f472b9627c7 366 double HoldTemp = TempPxl;
loopsva 0:6f472b9627c7 367 if(SensFacingAway == 1) {
loopsva 0:6f472b9627c7 368 pc.printf("%c[8;30m%c[6AArray Temperature deg%c \\\\ ^ // \n F E D C B A 9 8 7 6 5 4 3 2 1 0 \n", ESC, ESC, (TempC & 0x5f));
loopsva 0:6f472b9627c7 369 for(pixY = 0; pixY <= 3; pixY++) {
loopsva 0:6f472b9627c7 370 for(pixX = 60; pixX >= 0; pixX = pixX - 4) {
loopsva 0:6f472b9627c7 371 TempPxl = mlx.CalcPixel(pixX + pixY);
loopsva 0:6f472b9627c7 372 if ((TempC == 'c') || (TempC == 'C')) {
loopsva 0:6f472b9627c7 373 HoldTemp = TempPxl;
loopsva 0:6f472b9627c7 374 } else {
loopsva 0:6f472b9627c7 375 HoldTemp = TempPxl * 9.0 / 5.0 + 32.0;
loopsva 0:6f472b9627c7 376 }
loopsva 0:6f472b9627c7 377 PCExtreme();
loopsva 0:6f472b9627c7 378 if(HoldTemp >= 100.0) {
loopsva 0:6f472b9627c7 379 pc.printf(" %.1f ", HoldTemp);
loopsva 0:6f472b9627c7 380 } else
loopsva 0:6f472b9627c7 381 if((HoldTemp <= 10.0) && (HoldTemp >= 0.0)) {
loopsva 0:6f472b9627c7 382 pc.printf(" %.2f ", HoldTemp);
loopsva 0:6f472b9627c7 383 } else
loopsva 0:6f472b9627c7 384 if((HoldTemp >= -10.0) && (HoldTemp < 0.0)) {
loopsva 0:6f472b9627c7 385 pc.printf(" %.2f ", HoldTemp);
loopsva 0:6f472b9627c7 386 } else
loopsva 0:6f472b9627c7 387 if(HoldTemp < -10.0) {
loopsva 0:6f472b9627c7 388 pc.printf("%.2f ", HoldTemp);
loopsva 0:6f472b9627c7 389 } else {
loopsva 0:6f472b9627c7 390 pc.printf(" %.2f ", HoldTemp);
loopsva 0:6f472b9627c7 391 }
loopsva 0:6f472b9627c7 392 }
loopsva 0:6f472b9627c7 393 PCdeftFlag = true;
loopsva 0:6f472b9627c7 394 pc.printf("%c[8;30m%2d \n", ESC, pixY);
loopsva 0:6f472b9627c7 395 // pc.printf("%2d \n", pixY);
loopsva 0:6f472b9627c7 396 }
loopsva 0:6f472b9627c7 397 } else {
loopsva 0:6f472b9627c7 398 pc.printf("%c[8;30m%c[6AArray Temperature deg%c // v \\\\ \n 0 1 2 3 4 5 6 7 8 9 A B C D E F \n", ESC, ESC, (TempC & 0x5f));
loopsva 0:6f472b9627c7 399 for(pixY = 0; pixY <= 3; pixY++) {
loopsva 0:6f472b9627c7 400 for(pixX = 0; pixX < 64; pixX = pixX + 4) {
loopsva 0:6f472b9627c7 401 TempPxl = mlx.CalcPixel(pixX + pixY);
loopsva 0:6f472b9627c7 402 if ((TempC == 'c') || (TempC == 'C')) {
loopsva 0:6f472b9627c7 403 HoldTemp = TempPxl;
loopsva 0:6f472b9627c7 404 } else {
loopsva 0:6f472b9627c7 405 HoldTemp = TempPxl * 9.0 / 5.0 + 32.0;
loopsva 0:6f472b9627c7 406 }
loopsva 0:6f472b9627c7 407 PCExtreme();
loopsva 0:6f472b9627c7 408 if(HoldTemp >= 100.0) {
loopsva 0:6f472b9627c7 409 pc.printf(" %.1f ", HoldTemp);
loopsva 0:6f472b9627c7 410 } else
loopsva 0:6f472b9627c7 411 if((HoldTemp <= 10.0) && (HoldTemp >= 0.0)) {
loopsva 0:6f472b9627c7 412 pc.printf(" %.2f ", HoldTemp);
loopsva 0:6f472b9627c7 413 } else
loopsva 0:6f472b9627c7 414 if((HoldTemp >= -10.0) && (HoldTemp < 0.0)) {
loopsva 0:6f472b9627c7 415 pc.printf(" %.2f ", HoldTemp);
loopsva 0:6f472b9627c7 416 } else
loopsva 0:6f472b9627c7 417 if(HoldTemp < -10.0) {
loopsva 0:6f472b9627c7 418 pc.printf("%.2f ", HoldTemp);
loopsva 0:6f472b9627c7 419 } else {
loopsva 0:6f472b9627c7 420 pc.printf(" %.2f ", HoldTemp);
loopsva 0:6f472b9627c7 421 }
loopsva 0:6f472b9627c7 422 }
loopsva 0:6f472b9627c7 423 pc.printf("%c[8;30m%2d \n", ESC, pixY);
loopsva 0:6f472b9627c7 424 }
loopsva 0:6f472b9627c7 425 }
loopsva 0:6f472b9627c7 426 }
loopsva 0:6f472b9627c7 427
loopsva 0:6f472b9627c7 428 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 429 // Display Pixels in color
loopsva 0:6f472b9627c7 430
loopsva 0:6f472b9627c7 431 int loop = 0;
loopsva 0:6f472b9627c7 432 bool GotAmbient = false;
loopsva 0:6f472b9627c7 433 bool FirstRamDump = true;
loopsva 0:6f472b9627c7 434
loopsva 0:6f472b9627c7 435 int ShowTempsColor() {
loopsva 0:6f472b9627c7 436 ConfigReg = mlx.GetConfigReg();
loopsva 0:6f472b9627c7 437 if(GotAmbient == false) {
loopsva 0:6f472b9627c7 438 if((ConfigReg & 0x0100) == 0) {
loopsva 0:6f472b9627c7 439 Ta = mlx.GetDieTemp();
loopsva 0:6f472b9627c7 440 // pc.printf("Ta = %f\n\n\n\n\n\n\n", Ta);
loopsva 0:6f472b9627c7 441 GotAmbient = true;
loopsva 0:6f472b9627c7 442 } else {
loopsva 0:6f472b9627c7 443 return(ConfigReg & 0x0100);
loopsva 0:6f472b9627c7 444 }
loopsva 0:6f472b9627c7 445 }
loopsva 0:6f472b9627c7 446 if((ConfigReg & 0x0200) == 0) {
loopsva 0:6f472b9627c7 447 loop++;
loopsva 0:6f472b9627c7 448 GotAmbient = false;
loopsva 0:6f472b9627c7 449 if(ReFrame == true) {
loopsva 0:6f472b9627c7 450 if(gDebug > 2) pc.printf("AutoScale Update, lowEnd: %4.0fC hiEnd: %4.0fC\n", lowEnd, hiEnd);
loopsva 0:6f472b9627c7 451 ReFrame = false;
loopsva 0:6f472b9627c7 452 }
loopsva 0:6f472b9627c7 453 AllowVT100++;
loopsva 0:6f472b9627c7 454 HotPxl = -40.0;
loopsva 0:6f472b9627c7 455 ColdPxl = 200.0;
loopsva 0:6f472b9627c7 456 mlx.LoadMLXRam();
loopsva 0:6f472b9627c7 457 if((gDebug > 1) && (FirstRamDump == true)) {
loopsva 0:6f472b9627c7 458 FirstRamDump = false;
loopsva 0:6f472b9627c7 459 pc.printf("First RAM dump");
loopsva 0:6f472b9627c7 460 pb.dump("Ram Buffer:", 8, 0, RamBuf);
loopsva 0:6f472b9627c7 461 if(PutOnPC == 1) {
loopsva 0:6f472b9627c7 462 //pc.printf("\n\n\n\n\n\n\n");
loopsva 0:6f472b9627c7 463 }
loopsva 0:6f472b9627c7 464 } else
loopsva 0:6f472b9627c7 465 if((PutOnPC == 1) && (FirstRamDump == true)) {
loopsva 0:6f472b9627c7 466 FirstRamDump = false;
loopsva 0:6f472b9627c7 467 pc.printf("\n\n\n\n\n\n\n");
loopsva 0:6f472b9627c7 468 }
loopsva 0:6f472b9627c7 469
loopsva 0:6f472b9627c7 470 tX = TTX;
loopsva 0:6f472b9627c7 471 tY = TTY;
loopsva 0:6f472b9627c7 472 mlx.StartMeasurement();
loopsva 0:6f472b9627c7 473 if(gDebug > 3) pc.printf("Array Temperature degC\n 3 2 1 0\n");
loopsva 0:6f472b9627c7 474 if(SensFacingAway == 1) {
loopsva 0:6f472b9627c7 475 for(pixX = 60; pixX >= 0; pixX = pixX - 4) {
loopsva 0:6f472b9627c7 476 for(pixY = 3; pixY >= 0; pixY--) {
loopsva 0:6f472b9627c7 477 if((pixX == 16 * 4) && (pixY == 2)) {
loopsva 0:6f472b9627c7 478 PickaPixel(pixX, pixY);
loopsva 0:6f472b9627c7 479 PickPix = true;
loopsva 0:6f472b9627c7 480 } else {
loopsva 0:6f472b9627c7 481 PickPix = false;
loopsva 0:6f472b9627c7 482 }
loopsva 0:6f472b9627c7 483 TempPxl = mlx.CalcPixel(pixX + pixY);
loopsva 0:6f472b9627c7 484 CheckNewExtreme();
loopsva 0:6f472b9627c7 485 if(gDebug > 3) pc.printf("%4.2f ", TempPxl);
loopsva 0:6f472b9627c7 486 }
loopsva 0:6f472b9627c7 487 if(gDebug > 3) pc.printf("%2d\n", (pixX / 4));
loopsva 0:6f472b9627c7 488 }
loopsva 0:6f472b9627c7 489 } else {
loopsva 0:6f472b9627c7 490 for(pixX = 0; pixX < 64; pixX = pixX + 4) {
loopsva 0:6f472b9627c7 491 for(pixY = 3; pixY >= 0; pixY--) {
loopsva 0:6f472b9627c7 492 if((pixX == 16 * 4) && (pixY == 1)) { //0-15 and 0-3
loopsva 0:6f472b9627c7 493 PickaPixel(pixX, pixY);
loopsva 0:6f472b9627c7 494 PickPix = true;
loopsva 0:6f472b9627c7 495 } else {
loopsva 0:6f472b9627c7 496 PickPix = false;
loopsva 0:6f472b9627c7 497 }
loopsva 0:6f472b9627c7 498 TempPxl = mlx.CalcPixel(pixX + pixY);
loopsva 0:6f472b9627c7 499 CheckNewExtreme();
loopsva 0:6f472b9627c7 500 if(gDebug > 3) pc.printf("%4.2f ", TempPxl);
loopsva 0:6f472b9627c7 501 }
loopsva 0:6f472b9627c7 502 if(gDebug > 3) pc.printf("%2d\n", (pixX / 4));
loopsva 0:6f472b9627c7 503 }
loopsva 0:6f472b9627c7 504 }
loopsva 0:6f472b9627c7 505 if(gDebug > 3) pc.printf("\nloop: %d\n", loop);
loopsva 0:6f472b9627c7 506 }
loopsva 0:6f472b9627c7 507 return(0);
loopsva 0:6f472b9627c7 508 }
loopsva 0:6f472b9627c7 509
loopsva 0:6f472b9627c7 510 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 511 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 512
loopsva 0:6f472b9627c7 513 int main(void) {
loopsva 0:6f472b9627c7 514 rled.period_us(1000);
loopsva 0:6f472b9627c7 515 gled.period_us(1000);
loopsva 0:6f472b9627c7 516 bled.period_us(1000);
loopsva 0:6f472b9627c7 517 gLedUp = false;
loopsva 0:6f472b9627c7 518 rLedPwm = 0.001;
loopsva 0:6f472b9627c7 519 gLedPwm = GLEDSTEP * 14.0;
loopsva 0:6f472b9627c7 520 bLedPwm = BLEDSTEP * 14.0;
loopsva 0:6f472b9627c7 521 rled = 1.0 - rLedPwm;
loopsva 0:6f472b9627c7 522 gled = 1.0 - gLedPwm;
loopsva 0:6f472b9627c7 523 bled = 1.0 - bLedPwm;
loopsva 0:6f472b9627c7 524 pc.baud(115200);
loopsva 0:6f472b9627c7 525 GotAmbient = false;
loopsva 0:6f472b9627c7 526 i2c1.frequency(400000); //set up i2c speed
loopsva 0:6f472b9627c7 527 i2c1.stop();
loopsva 0:6f472b9627c7 528 pc.printf("\n\n--------------------------------------------\n");
loopsva 0:6f472b9627c7 529 pc.printf("FRDM-KL25Z MLX90620 Tests v%d\n", revision);
loopsva 0:6f472b9627c7 530
loopsva 0:6f472b9627c7 531 //initialize the USB serial port interrupt
loopsva 0:6f472b9627c7 532 pc.printf("Initializing Serial Port Rx Interrupt... \n");
loopsva 0:6f472b9627c7 533 pc.attach(&PcRxIRQ, pc.RxIrq);
loopsva 0:6f472b9627c7 534
loopsva 0:6f472b9627c7 535 find_i2c1();
loopsva 0:6f472b9627c7 536 find_i2c2();
loopsva 0:6f472b9627c7 537 /*
loopsva 0:6f472b9627c7 538 if (ReloadEEP()) {
loopsva 0:6f472b9627c7 539 if(gDebug > 1) {
loopsva 0:6f472b9627c7 540 pc.printf("\nCVS file dump");
loopsva 0:6f472b9627c7 541 pb.dump(16, 0, EEbuf);
loopsva 0:6f472b9627c7 542 }
loopsva 0:6f472b9627c7 543 // } else {
loopsva 0:6f472b9627c7 544 // pc.printf("*** file /local/EEP.CSV does not exist\n");
loopsva 0:6f472b9627c7 545 }
loopsva 0:6f472b9627c7 546
loopsva 0:6f472b9627c7 547 // FixEEP();
loopsva 0:6f472b9627c7 548 */
loopsva 0:6f472b9627c7 549 int initFail = 0;
loopsva 0:6f472b9627c7 550 //load up eeprom into buffer
loopsva 0:6f472b9627c7 551 if((mlx.LoadEEPROM())) {
loopsva 0:6f472b9627c7 552 pc.printf("*** MLX90620 dump failed!!!\n");
loopsva 0:6f472b9627c7 553 initFail++;
loopsva 0:6f472b9627c7 554 } else {
loopsva 0:6f472b9627c7 555 if(gDebug > 1) {
loopsva 0:6f472b9627c7 556 //pc.printf("\nEEPROM array");
loopsva 0:6f472b9627c7 557 pb.dump("EEPROM Array:", 16, 0, EEbuf);
loopsva 0:6f472b9627c7 558 }
loopsva 0:6f472b9627c7 559 }
loopsva 0:6f472b9627c7 560
loopsva 0:6f472b9627c7 561 //Init MLX90620
loopsva 0:6f472b9627c7 562 unsigned short x = 0;
loopsva 0:6f472b9627c7 563 if((mlx.SetOscTrimReg())) {
loopsva 0:6f472b9627c7 564 pc.printf("*** set osc trim failed!!!\n");
loopsva 0:6f472b9627c7 565 initFail++;
loopsva 0:6f472b9627c7 566 } else {
loopsva 0:6f472b9627c7 567 x = mlx.GetOscTrimReg();
loopsva 0:6f472b9627c7 568 pc.printf("Osc Trim Value: 0x%04x\n", x);
loopsva 0:6f472b9627c7 569 }
loopsva 0:6f472b9627c7 570
loopsva 0:6f472b9627c7 571 if((mlx.SetConfigReg())) {
loopsva 0:6f472b9627c7 572 pc.printf("*** set MLX config failed!!!\n");
loopsva 0:6f472b9627c7 573 initFail++;
loopsva 0:6f472b9627c7 574 } else {
loopsva 0:6f472b9627c7 575 x = mlx.GetConfigReg();
loopsva 0:6f472b9627c7 576 pc.printf("Config Register: 0x%04x\n", x);
loopsva 0:6f472b9627c7 577 x = mlx.GetPTATReg();
loopsva 0:6f472b9627c7 578 pc.printf("PTAT Register: 0x%04x\n", x);
loopsva 0:6f472b9627c7 579 }
loopsva 0:6f472b9627c7 580
loopsva 0:6f472b9627c7 581 if((mlx.StartMeasurement())) {
loopsva 0:6f472b9627c7 582 pc.printf("*** Start Measurement failed!!!\n");
loopsva 0:6f472b9627c7 583 initFail++;
loopsva 0:6f472b9627c7 584 }
loopsva 0:6f472b9627c7 585 wait_ms(300);
loopsva 0:6f472b9627c7 586
loopsva 0:6f472b9627c7 587 if(initFail == 0) {
loopsva 0:6f472b9627c7 588 pc.printf("Calculating Ta...\n");
loopsva 0:6f472b9627c7 589 mlx.CalcTa_To();
loopsva 0:6f472b9627c7 590 pc.printf("Getting die temperature...\n");
loopsva 0:6f472b9627c7 591 Ta = mlx.GetDieTemp();
loopsva 0:6f472b9627c7 592 pc.printf("Ta = %f\n\n", Ta);
loopsva 0:6f472b9627c7 593 } else {
loopsva 0:6f472b9627c7 594 pc.printf("*** MLX90620 non operational!!!\n");
loopsva 0:6f472b9627c7 595 }
loopsva 0:6f472b9627c7 596 ShowTempsColor();
loopsva 1:9d7894633924 597 //no s/w reset on KL25Z mbed
loopsva 1:9d7894633924 598 //pc.printf("At any time, type:\n O = Pointing Outward\n I = Pointing Inward\n C = Temp Degrees C\n F = Temp Degrees F\n^C = reboot\n\n");
loopsva 1:9d7894633924 599 pc.printf("At any time, type:\n O = Pointing Outward\n I = Pointing Inward\n C = Temp Degrees C\n F = Temp Degrees F\n\n");
loopsva 0:6f472b9627c7 600 pc.printf("Ready...\n");
loopsva 0:6f472b9627c7 601 pc.printf("\n\n\n\n\n\n\n");
loopsva 0:6f472b9627c7 602
loopsva 0:6f472b9627c7 603 while (true) {
loopsva 0:6f472b9627c7 604
loopsva 0:6f472b9627c7 605
loopsva 0:6f472b9627c7 606 int lc = 0;
loopsva 0:6f472b9627c7 607 if(!(ShowTempsColor())) {
loopsva 0:6f472b9627c7 608 do {
loopsva 0:6f472b9627c7 609 lc++;
loopsva 0:6f472b9627c7 610 //pc.printf("waiting... %d\n", lc);
loopsva 0:6f472b9627c7 611 wait_ms(1);
loopsva 0:6f472b9627c7 612 } while(ShowTempsColor() != 0);
loopsva 0:6f472b9627c7 613 //rWinkLed();
loopsva 0:6f472b9627c7 614 //gWinkLed();
loopsva 0:6f472b9627c7 615 //bWinkLed();
loopsva 0:6f472b9627c7 616 sinLEDs();
loopsva 0:6f472b9627c7 617 if(gDebug > 2) {
loopsva 0:6f472b9627c7 618 pc.printf("rls: %f rlw: %f\n", RLEDSTEP, rLedPwm);
loopsva 0:6f472b9627c7 619 pc.printf("gls: %f glw: %f\n", GLEDSTEP, gLedPwm);
loopsva 0:6f472b9627c7 620 pc.printf("bls: %f blw: %f\n\n", BLEDSTEP, bLedPwm);
loopsva 0:6f472b9627c7 621 }
loopsva 0:6f472b9627c7 622 }
loopsva 0:6f472b9627c7 623 if(PutOnPC == 1) {
loopsva 0:6f472b9627c7 624 ShowTempsVT100();
loopsva 0:6f472b9627c7 625 }
loopsva 0:6f472b9627c7 626 }
loopsva 0:6f472b9627c7 627 }