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:
Mon Jul 29 23:58:54 2013 +0000
Revision:
0:6f472b9627c7
Child:
1:9d7894633924
Program to display contents of MLX90620 to USB console once a second. Can be in DegC or DegF, pointing toward or away.  Requites, wide-screen (132) VT100 terminal

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 0:6f472b9627c7 99 } else if(inchar == ticC) {
loopsva 0:6f472b9627c7 100 pc.printf("\n\n*** Control C detected, Resetting ***\n");
loopsva 0:6f472b9627c7 101 mbed_reset();
loopsva 0:6f472b9627c7 102 } else if((inchar == 'C') || (inchar == 'c')) {
loopsva 0:6f472b9627c7 103 TempC = inchar;
loopsva 0:6f472b9627c7 104 } else if((inchar == 'F') || (inchar == 'f')) {
loopsva 0:6f472b9627c7 105 TempC = inchar;
loopsva 0:6f472b9627c7 106 } else if((inchar == 'I') || (inchar == 'i')) {
loopsva 0:6f472b9627c7 107 SensFacingAway = 0;
loopsva 0:6f472b9627c7 108 } else if((inchar == 'O') || (inchar == 'o')) {
loopsva 0:6f472b9627c7 109 SensFacingAway = 1;
loopsva 0:6f472b9627c7 110 } else {
loopsva 0:6f472b9627c7 111 if(pcRxQty < sizeof(pcRxBuffer)) {
loopsva 0:6f472b9627c7 112 pcRxBuffer[pcRxQty] = inchar;
loopsva 0:6f472b9627c7 113 pcRxQty++;
loopsva 0:6f472b9627c7 114 if(LocalEcho) pc.putc(inchar);
loopsva 0:6f472b9627c7 115 } else {
loopsva 0:6f472b9627c7 116 pc.printf ("\n*** pcRxBuffer is full!!\n");
loopsva 0:6f472b9627c7 117 pcRxEOB = true;
loopsva 0:6f472b9627c7 118 }
loopsva 0:6f472b9627c7 119 }
loopsva 0:6f472b9627c7 120
loopsva 0:6f472b9627c7 121 bool oneDot = false;
loopsva 0:6f472b9627c7 122 pcRxIsNumb = true;
loopsva 0:6f472b9627c7 123 for(int i = 0; i < pcRxQty; i++) {
loopsva 0:6f472b9627c7 124 if(pcRxBuffer[i] == '.') {
loopsva 0:6f472b9627c7 125 if(oneDot == true) {
loopsva 0:6f472b9627c7 126 pcRxIsNumb = false;
loopsva 0:6f472b9627c7 127 break;
loopsva 0:6f472b9627c7 128 } else {
loopsva 0:6f472b9627c7 129 oneDot = true;
loopsva 0:6f472b9627c7 130 }
loopsva 0:6f472b9627c7 131 }
loopsva 0:6f472b9627c7 132 else if((pcRxBuffer[i] < '0') || (pcRxBuffer[i] > '9')) {
loopsva 0:6f472b9627c7 133 if(!((i == 0) && (pcRxBuffer[i] == '-'))) {
loopsva 0:6f472b9627c7 134 pcRxIsNumb = false;
loopsva 0:6f472b9627c7 135 break;
loopsva 0:6f472b9627c7 136 }
loopsva 0:6f472b9627c7 137 }
loopsva 0:6f472b9627c7 138 }
loopsva 0:6f472b9627c7 139 }
loopsva 0:6f472b9627c7 140
loopsva 0:6f472b9627c7 141 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 142 // Read received chars from USB UART
loopsva 0:6f472b9627c7 143
loopsva 0:6f472b9627c7 144 void PcRxIRQ(void){
loopsva 0:6f472b9627c7 145 pcRxIRQCnt++;
loopsva 0:6f472b9627c7 146 // LPC_UART0->IER = 0; //Disable Rx interrupt
loopsva 0:6f472b9627c7 147 while (pc.readable()) {
loopsva 0:6f472b9627c7 148 inchar = pc.getc(); //read data from USB
loopsva 0:6f472b9627c7 149 PcRxChar(); //go process char
loopsva 0:6f472b9627c7 150 }
loopsva 0:6f472b9627c7 151 // LPC_UART0->IER = 1; //re-enable Rx interrupt
loopsva 0:6f472b9627c7 152 }
loopsva 0:6f472b9627c7 153
loopsva 0:6f472b9627c7 154 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 155 //Detect I2C device chain
loopsva 0:6f472b9627c7 156
loopsva 0:6f472b9627c7 157 int i2cQty = 16; //number of bytes to get
loopsva 0:6f472b9627c7 158 char i2cData[32]; //i2c buffer data
loopsva 0:6f472b9627c7 159
loopsva 0:6f472b9627c7 160 void find_i2c1() {
loopsva 0:6f472b9627c7 161 if(gDebug > 1) pc.printf("Searching for I2C devices on bus 1...\n");
loopsva 0:6f472b9627c7 162
loopsva 0:6f472b9627c7 163 int count = 0;
loopsva 0:6f472b9627c7 164 for (int address = 2; address < 256; address +=2) {
loopsva 0:6f472b9627c7 165 if (!i2c1.write(address, NULL, 0)) { // 0 returned is ok
loopsva 0:6f472b9627c7 166 wait_ms(5);
loopsva 0:6f472b9627c7 167 if(gDebug > 1) pc.printf(" - I2C device found at address 0x%02X\n", address);
loopsva 0:6f472b9627c7 168 for (int clrb = 0; clrb < i2cQty; clrb +=1) { //clear out i2c buffer before reading in data
loopsva 0:6f472b9627c7 169 i2cData[clrb] = 0;
loopsva 0:6f472b9627c7 170 }
loopsva 0:6f472b9627c7 171 count++;
loopsva 0:6f472b9627c7 172 }
loopsva 0:6f472b9627c7 173 }
loopsva 0:6f472b9627c7 174 if(gDebug > 1) pc.printf(" - I2seeU! %d devices found\n", count);
loopsva 0:6f472b9627c7 175 }
loopsva 0:6f472b9627c7 176
loopsva 0:6f472b9627c7 177 //---------
loopsva 0:6f472b9627c7 178
loopsva 0:6f472b9627c7 179 void find_i2c2() {
loopsva 0:6f472b9627c7 180 if(gDebug > 1) pc.printf("Searching for I2C devices on bus 2...\n");
loopsva 0:6f472b9627c7 181
loopsva 0:6f472b9627c7 182 int count = 0;
loopsva 0:6f472b9627c7 183 for (int address = 2; address < 256; address +=2) {
loopsva 0:6f472b9627c7 184 if (!i2c2.write(address, NULL, 0)) { // 0 returned is ok
loopsva 0:6f472b9627c7 185 wait_ms(5);
loopsva 0:6f472b9627c7 186 if(gDebug > 1) pc.printf(" - I2C device found at address 0x%02X\n", address);
loopsva 0:6f472b9627c7 187 for (int clrb = 0; clrb < i2cQty; clrb +=1) { //clear out i2c buffer before reading in data
loopsva 0:6f472b9627c7 188 i2cData[clrb] = 0;
loopsva 0:6f472b9627c7 189 }
loopsva 0:6f472b9627c7 190 count++;
loopsva 0:6f472b9627c7 191 }
loopsva 0:6f472b9627c7 192 }
loopsva 0:6f472b9627c7 193 if(gDebug > 1) pc.printf(" - I2seeU! %d devices found\n", count);
loopsva 0:6f472b9627c7 194 }
loopsva 0:6f472b9627c7 195
loopsva 0:6f472b9627c7 196 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 197 // Slowly rise and lower red LED's brightness
loopsva 0:6f472b9627c7 198
loopsva 0:6f472b9627c7 199 const float ALLLEDSTEPS = 21.0;
loopsva 0:6f472b9627c7 200
loopsva 0:6f472b9627c7 201 const float RLEDMAX = 0.150;
loopsva 0:6f472b9627c7 202 const float RLEDSTEP = (RLEDMAX / ALLLEDSTEPS);
loopsva 0:6f472b9627c7 203
loopsva 0:6f472b9627c7 204 void rWinkLed() {
loopsva 0:6f472b9627c7 205 rLedDelay++;
loopsva 0:6f472b9627c7 206 if(rLedDelay >= 1) {
loopsva 0:6f472b9627c7 207 rLedDelay = 0;
loopsva 0:6f472b9627c7 208 if(rLedUp == true) {
loopsva 0:6f472b9627c7 209 rLedPwm = rLedPwm + RLEDSTEP;
loopsva 0:6f472b9627c7 210 if(rLedPwm > RLEDMAX) {
loopsva 0:6f472b9627c7 211 rLedUp = false;
loopsva 0:6f472b9627c7 212 rLedPwm = RLEDMAX;
loopsva 0:6f472b9627c7 213 }
loopsva 0:6f472b9627c7 214 } else {
loopsva 0:6f472b9627c7 215 rLedPwm = rLedPwm - RLEDSTEP;
loopsva 0:6f472b9627c7 216 if(rLedPwm < RLEDSTEP) {
loopsva 0:6f472b9627c7 217 rLedUp = true;
loopsva 0:6f472b9627c7 218 rLedPwm = 0.001;
loopsva 0:6f472b9627c7 219 }
loopsva 0:6f472b9627c7 220 }
loopsva 0:6f472b9627c7 221 rled = 1.0 - rLedPwm;
loopsva 0:6f472b9627c7 222 }
loopsva 0:6f472b9627c7 223 }
loopsva 0:6f472b9627c7 224
loopsva 0:6f472b9627c7 225 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 226 // Slowly rise and lower green LED's brightness
loopsva 0:6f472b9627c7 227
loopsva 0:6f472b9627c7 228 const float GLEDMAX = 0.970;
loopsva 0:6f472b9627c7 229 const float GLEDSTEP = (GLEDMAX / ALLLEDSTEPS);
loopsva 0:6f472b9627c7 230
loopsva 0:6f472b9627c7 231 void gWinkLed() {
loopsva 0:6f472b9627c7 232 gLedDelay++;
loopsva 0:6f472b9627c7 233 if(gLedDelay >= 1) {
loopsva 0:6f472b9627c7 234 gLedDelay = 0;
loopsva 0:6f472b9627c7 235 if(gLedUp == true) {
loopsva 0:6f472b9627c7 236 gLedPwm = gLedPwm + GLEDSTEP;
loopsva 0:6f472b9627c7 237 if(gLedPwm > GLEDMAX) {
loopsva 0:6f472b9627c7 238 gLedUp = false;
loopsva 0:6f472b9627c7 239 gLedPwm = GLEDMAX;
loopsva 0:6f472b9627c7 240 }
loopsva 0:6f472b9627c7 241 } else {
loopsva 0:6f472b9627c7 242 gLedPwm = gLedPwm - GLEDSTEP;
loopsva 0:6f472b9627c7 243 if(gLedPwm < GLEDSTEP) {
loopsva 0:6f472b9627c7 244 gLedUp = true;
loopsva 0:6f472b9627c7 245 gLedPwm = 0.001;
loopsva 0:6f472b9627c7 246 }
loopsva 0:6f472b9627c7 247 }
loopsva 0:6f472b9627c7 248 gled = 1.0 - gLedPwm;
loopsva 0:6f472b9627c7 249 }
loopsva 0:6f472b9627c7 250 }
loopsva 0:6f472b9627c7 251
loopsva 0:6f472b9627c7 252 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 253 // Slowly rise and lower blue LED's brightness
loopsva 0:6f472b9627c7 254
loopsva 0:6f472b9627c7 255 const float BLEDMAX = 0.500;
loopsva 0:6f472b9627c7 256 const float BLEDSTEP = (BLEDMAX / ALLLEDSTEPS);
loopsva 0:6f472b9627c7 257
loopsva 0:6f472b9627c7 258 void bWinkLed() {
loopsva 0:6f472b9627c7 259 bLedDelay++;
loopsva 0:6f472b9627c7 260 // pc.printf("%c%c%c%c%c%c%5.3f ", BS, BS, BS, BS, BS, BS, bLedPwm);
loopsva 0:6f472b9627c7 261 if(bLedDelay >= 1) {
loopsva 0:6f472b9627c7 262 bLedDelay = 0;
loopsva 0:6f472b9627c7 263 if(bLedUp == true) {
loopsva 0:6f472b9627c7 264 bLedPwm = bLedPwm + BLEDSTEP;
loopsva 0:6f472b9627c7 265 if(bLedPwm > BLEDMAX) {
loopsva 0:6f472b9627c7 266 bLedUp = false;
loopsva 0:6f472b9627c7 267 bLedPwm = BLEDMAX;
loopsva 0:6f472b9627c7 268 }
loopsva 0:6f472b9627c7 269 } else {
loopsva 0:6f472b9627c7 270 bLedPwm = bLedPwm - BLEDSTEP;
loopsva 0:6f472b9627c7 271 if(bLedPwm < BLEDSTEP) {
loopsva 0:6f472b9627c7 272 bLedUp = true;
loopsva 0:6f472b9627c7 273 bLedPwm = 0.001;
loopsva 0:6f472b9627c7 274 }
loopsva 0:6f472b9627c7 275 }
loopsva 0:6f472b9627c7 276 bled = 1.0 - bLedPwm;
loopsva 0:6f472b9627c7 277 }
loopsva 0:6f472b9627c7 278 }
loopsva 0:6f472b9627c7 279
loopsva 0:6f472b9627c7 280 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 281 // moving RGB LED display. Hacked from: david dicarlo / FRDM_RGBLED
loopsva 0:6f472b9627c7 282
loopsva 0:6f472b9627c7 283 const float pi = 3.1415927;
loopsva 0:6f472b9627c7 284 float iLeds = 0.0;
loopsva 0:6f472b9627c7 285
loopsva 0:6f472b9627c7 286 void sinLEDs() {
loopsva 0:6f472b9627c7 287 iLeds += 0.02; // was 0.001 in original code
loopsva 0:6f472b9627c7 288 if(iLeds > (60.0 * pi)) iLeds = 0.0;
loopsva 0:6f472b9627c7 289 rLedPwm = (1 + sin(2 * iLeds)) / 2; // calculate values for RGB based on different
loopsva 0:6f472b9627c7 290 gLedPwm = (1 + sin(3 * iLeds)) / 2; // frequency sin waves. This should give a nice
loopsva 0:6f472b9627c7 291 bLedPwm = (1 + sin(5 * iLeds)) / 2; // smooth transistion between colors and a
loopsva 0:6f472b9627c7 292 rled = rLedPwm; // send RGB values to LED PWMs
loopsva 0:6f472b9627c7 293 gled = gLedPwm;
loopsva 0:6f472b9627c7 294 bled = bLedPwm;
loopsva 0:6f472b9627c7 295 }
loopsva 0:6f472b9627c7 296
loopsva 0:6f472b9627c7 297 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 298 // See if new temperature in array is higher then the current hottest or colder then the current coldest
loopsva 0:6f472b9627c7 299
loopsva 0:6f472b9627c7 300 void CheckNewExtreme() {
loopsva 0:6f472b9627c7 301 if(TempPxl > HotPxl) {
loopsva 0:6f472b9627c7 302 HotPxl = TempPxl;
loopsva 0:6f472b9627c7 303 HottestX = pixX / 4;
loopsva 0:6f472b9627c7 304 HottestY = pixY;
loopsva 0:6f472b9627c7 305 }
loopsva 0:6f472b9627c7 306 if(TempPxl < ColdPxl) {
loopsva 0:6f472b9627c7 307 ColdPxl = TempPxl;
loopsva 0:6f472b9627c7 308 ColdestX = pixX / 4;
loopsva 0:6f472b9627c7 309 ColdestY = pixY;
loopsva 0:6f472b9627c7 310 }
loopsva 0:6f472b9627c7 311 }
loopsva 0:6f472b9627c7 312
loopsva 0:6f472b9627c7 313 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 314 // Change color of extreme tempeature values on PC using VT100 escape sequences
loopsva 0:6f472b9627c7 315
loopsva 0:6f472b9627c7 316 bool PCdeftFlag = true;
loopsva 0:6f472b9627c7 317
loopsva 0:6f472b9627c7 318 void PCExtreme() {
loopsva 0:6f472b9627c7 319 if((HottestX == (pixX / 4)) && (HottestY == pixY)) {
loopsva 0:6f472b9627c7 320 PCdeftFlag = false;
loopsva 0:6f472b9627c7 321 pc.printf("%c[8;31;2m", ESC);
loopsva 0:6f472b9627c7 322 return;
loopsva 0:6f472b9627c7 323 } else
loopsva 0:6f472b9627c7 324 if((ColdestX == (pixX / 4)) && (ColdestY == pixY)) {
loopsva 0:6f472b9627c7 325 PCdeftFlag = false;
loopsva 0:6f472b9627c7 326 pc.printf("%c[8;34;2m", ESC);
loopsva 0:6f472b9627c7 327 return;
loopsva 0:6f472b9627c7 328 } else
loopsva 0:6f472b9627c7 329 if(PCdeftFlag == false) {
loopsva 0:6f472b9627c7 330 PCdeftFlag = true;
loopsva 0:6f472b9627c7 331 pc.printf("%c[8;30m", ESC);
loopsva 0:6f472b9627c7 332 }
loopsva 0:6f472b9627c7 333 }
loopsva 0:6f472b9627c7 334
loopsva 0:6f472b9627c7 335 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 336 // Pick a pixel to print out temperature. X = column 0 - 15, Y = row 0 - 3
loopsva 0:6f472b9627c7 337
loopsva 0:6f472b9627c7 338 void PickaPixel(int pX, int pY) {
loopsva 0:6f472b9627c7 339 TempPxl = mlx.CalcPixel(pX + pY);
loopsva 0:6f472b9627c7 340 if ((TempC == 'c') || (TempC == 'C')) {
loopsva 0:6f472b9627c7 341 pc.printf("Pixel X:%d Y:%d Temp: %.2f degC\n", pX / 4, pY, TempPxl);
loopsva 0:6f472b9627c7 342 } else {
loopsva 0:6f472b9627c7 343 pc.printf("Pixel X:%d Y:%d Temp: %.2f degF\n", pX / 4, pY, TempPxl * 9.0 / 5.0 + 32.0);
loopsva 0:6f472b9627c7 344 }
loopsva 0:6f472b9627c7 345 }
loopsva 0:6f472b9627c7 346
loopsva 0:6f472b9627c7 347 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 348 // Display on PC using VT100 escape codes
loopsva 0:6f472b9627c7 349
loopsva 0:6f472b9627c7 350 const int TTX = 45;
loopsva 0:6f472b9627c7 351 const int TTY = 120;
loopsva 0:6f472b9627c7 352 int tX = TTX;
loopsva 0:6f472b9627c7 353 int tY = TTY;;
loopsva 0:6f472b9627c7 354
loopsva 0:6f472b9627c7 355 int AllowVT100 = 0;
loopsva 0:6f472b9627c7 356
loopsva 0:6f472b9627c7 357 void ShowTempsVT100() {
loopsva 0:6f472b9627c7 358 if(AllowVT100 <= 3) { //update PC display every 4th TFT pixel update
loopsva 0:6f472b9627c7 359 return;
loopsva 0:6f472b9627c7 360 }
loopsva 0:6f472b9627c7 361 AllowVT100 = 0;
loopsva 0:6f472b9627c7 362 double HoldTemp = TempPxl;
loopsva 0:6f472b9627c7 363 if(SensFacingAway == 1) {
loopsva 0:6f472b9627c7 364 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 365 for(pixY = 0; pixY <= 3; pixY++) {
loopsva 0:6f472b9627c7 366 for(pixX = 60; pixX >= 0; pixX = pixX - 4) {
loopsva 0:6f472b9627c7 367 TempPxl = mlx.CalcPixel(pixX + pixY);
loopsva 0:6f472b9627c7 368 if ((TempC == 'c') || (TempC == 'C')) {
loopsva 0:6f472b9627c7 369 HoldTemp = TempPxl;
loopsva 0:6f472b9627c7 370 } else {
loopsva 0:6f472b9627c7 371 HoldTemp = TempPxl * 9.0 / 5.0 + 32.0;
loopsva 0:6f472b9627c7 372 }
loopsva 0:6f472b9627c7 373 PCExtreme();
loopsva 0:6f472b9627c7 374 if(HoldTemp >= 100.0) {
loopsva 0:6f472b9627c7 375 pc.printf(" %.1f ", HoldTemp);
loopsva 0:6f472b9627c7 376 } else
loopsva 0:6f472b9627c7 377 if((HoldTemp <= 10.0) && (HoldTemp >= 0.0)) {
loopsva 0:6f472b9627c7 378 pc.printf(" %.2f ", HoldTemp);
loopsva 0:6f472b9627c7 379 } else
loopsva 0:6f472b9627c7 380 if((HoldTemp >= -10.0) && (HoldTemp < 0.0)) {
loopsva 0:6f472b9627c7 381 pc.printf(" %.2f ", HoldTemp);
loopsva 0:6f472b9627c7 382 } else
loopsva 0:6f472b9627c7 383 if(HoldTemp < -10.0) {
loopsva 0:6f472b9627c7 384 pc.printf("%.2f ", HoldTemp);
loopsva 0:6f472b9627c7 385 } else {
loopsva 0:6f472b9627c7 386 pc.printf(" %.2f ", HoldTemp);
loopsva 0:6f472b9627c7 387 }
loopsva 0:6f472b9627c7 388 }
loopsva 0:6f472b9627c7 389 PCdeftFlag = true;
loopsva 0:6f472b9627c7 390 pc.printf("%c[8;30m%2d \n", ESC, pixY);
loopsva 0:6f472b9627c7 391 // pc.printf("%2d \n", pixY);
loopsva 0:6f472b9627c7 392 }
loopsva 0:6f472b9627c7 393 } else {
loopsva 0:6f472b9627c7 394 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 395 for(pixY = 0; pixY <= 3; pixY++) {
loopsva 0:6f472b9627c7 396 for(pixX = 0; pixX < 64; pixX = pixX + 4) {
loopsva 0:6f472b9627c7 397 TempPxl = mlx.CalcPixel(pixX + pixY);
loopsva 0:6f472b9627c7 398 if ((TempC == 'c') || (TempC == 'C')) {
loopsva 0:6f472b9627c7 399 HoldTemp = TempPxl;
loopsva 0:6f472b9627c7 400 } else {
loopsva 0:6f472b9627c7 401 HoldTemp = TempPxl * 9.0 / 5.0 + 32.0;
loopsva 0:6f472b9627c7 402 }
loopsva 0:6f472b9627c7 403 PCExtreme();
loopsva 0:6f472b9627c7 404 if(HoldTemp >= 100.0) {
loopsva 0:6f472b9627c7 405 pc.printf(" %.1f ", HoldTemp);
loopsva 0:6f472b9627c7 406 } else
loopsva 0:6f472b9627c7 407 if((HoldTemp <= 10.0) && (HoldTemp >= 0.0)) {
loopsva 0:6f472b9627c7 408 pc.printf(" %.2f ", HoldTemp);
loopsva 0:6f472b9627c7 409 } else
loopsva 0:6f472b9627c7 410 if((HoldTemp >= -10.0) && (HoldTemp < 0.0)) {
loopsva 0:6f472b9627c7 411 pc.printf(" %.2f ", HoldTemp);
loopsva 0:6f472b9627c7 412 } else
loopsva 0:6f472b9627c7 413 if(HoldTemp < -10.0) {
loopsva 0:6f472b9627c7 414 pc.printf("%.2f ", HoldTemp);
loopsva 0:6f472b9627c7 415 } else {
loopsva 0:6f472b9627c7 416 pc.printf(" %.2f ", HoldTemp);
loopsva 0:6f472b9627c7 417 }
loopsva 0:6f472b9627c7 418 }
loopsva 0:6f472b9627c7 419 pc.printf("%c[8;30m%2d \n", ESC, pixY);
loopsva 0:6f472b9627c7 420 }
loopsva 0:6f472b9627c7 421 }
loopsva 0:6f472b9627c7 422 }
loopsva 0:6f472b9627c7 423
loopsva 0:6f472b9627c7 424 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 425 // Display Pixels in color
loopsva 0:6f472b9627c7 426
loopsva 0:6f472b9627c7 427 int loop = 0;
loopsva 0:6f472b9627c7 428 bool GotAmbient = false;
loopsva 0:6f472b9627c7 429 bool FirstRamDump = true;
loopsva 0:6f472b9627c7 430
loopsva 0:6f472b9627c7 431 int ShowTempsColor() {
loopsva 0:6f472b9627c7 432 ConfigReg = mlx.GetConfigReg();
loopsva 0:6f472b9627c7 433 if(GotAmbient == false) {
loopsva 0:6f472b9627c7 434 if((ConfigReg & 0x0100) == 0) {
loopsva 0:6f472b9627c7 435 Ta = mlx.GetDieTemp();
loopsva 0:6f472b9627c7 436 // pc.printf("Ta = %f\n\n\n\n\n\n\n", Ta);
loopsva 0:6f472b9627c7 437 GotAmbient = true;
loopsva 0:6f472b9627c7 438 } else {
loopsva 0:6f472b9627c7 439 return(ConfigReg & 0x0100);
loopsva 0:6f472b9627c7 440 }
loopsva 0:6f472b9627c7 441 }
loopsva 0:6f472b9627c7 442 if((ConfigReg & 0x0200) == 0) {
loopsva 0:6f472b9627c7 443 loop++;
loopsva 0:6f472b9627c7 444 GotAmbient = false;
loopsva 0:6f472b9627c7 445 if(ReFrame == true) {
loopsva 0:6f472b9627c7 446 if(gDebug > 2) pc.printf("AutoScale Update, lowEnd: %4.0fC hiEnd: %4.0fC\n", lowEnd, hiEnd);
loopsva 0:6f472b9627c7 447 ReFrame = false;
loopsva 0:6f472b9627c7 448 }
loopsva 0:6f472b9627c7 449 AllowVT100++;
loopsva 0:6f472b9627c7 450 HotPxl = -40.0;
loopsva 0:6f472b9627c7 451 ColdPxl = 200.0;
loopsva 0:6f472b9627c7 452 mlx.LoadMLXRam();
loopsva 0:6f472b9627c7 453 if((gDebug > 1) && (FirstRamDump == true)) {
loopsva 0:6f472b9627c7 454 FirstRamDump = false;
loopsva 0:6f472b9627c7 455 pc.printf("First RAM dump");
loopsva 0:6f472b9627c7 456 pb.dump("Ram Buffer:", 8, 0, RamBuf);
loopsva 0:6f472b9627c7 457 if(PutOnPC == 1) {
loopsva 0:6f472b9627c7 458 //pc.printf("\n\n\n\n\n\n\n");
loopsva 0:6f472b9627c7 459 }
loopsva 0:6f472b9627c7 460 } else
loopsva 0:6f472b9627c7 461 if((PutOnPC == 1) && (FirstRamDump == true)) {
loopsva 0:6f472b9627c7 462 FirstRamDump = false;
loopsva 0:6f472b9627c7 463 pc.printf("\n\n\n\n\n\n\n");
loopsva 0:6f472b9627c7 464 }
loopsva 0:6f472b9627c7 465
loopsva 0:6f472b9627c7 466 tX = TTX;
loopsva 0:6f472b9627c7 467 tY = TTY;
loopsva 0:6f472b9627c7 468 mlx.StartMeasurement();
loopsva 0:6f472b9627c7 469 if(gDebug > 3) pc.printf("Array Temperature degC\n 3 2 1 0\n");
loopsva 0:6f472b9627c7 470 if(SensFacingAway == 1) {
loopsva 0:6f472b9627c7 471 for(pixX = 60; pixX >= 0; pixX = pixX - 4) {
loopsva 0:6f472b9627c7 472 for(pixY = 3; pixY >= 0; pixY--) {
loopsva 0:6f472b9627c7 473 if((pixX == 16 * 4) && (pixY == 2)) {
loopsva 0:6f472b9627c7 474 PickaPixel(pixX, pixY);
loopsva 0:6f472b9627c7 475 PickPix = true;
loopsva 0:6f472b9627c7 476 } else {
loopsva 0:6f472b9627c7 477 PickPix = false;
loopsva 0:6f472b9627c7 478 }
loopsva 0:6f472b9627c7 479 TempPxl = mlx.CalcPixel(pixX + pixY);
loopsva 0:6f472b9627c7 480 CheckNewExtreme();
loopsva 0:6f472b9627c7 481 if(gDebug > 3) pc.printf("%4.2f ", TempPxl);
loopsva 0:6f472b9627c7 482 }
loopsva 0:6f472b9627c7 483 if(gDebug > 3) pc.printf("%2d\n", (pixX / 4));
loopsva 0:6f472b9627c7 484 }
loopsva 0:6f472b9627c7 485 } else {
loopsva 0:6f472b9627c7 486 for(pixX = 0; pixX < 64; pixX = pixX + 4) {
loopsva 0:6f472b9627c7 487 for(pixY = 3; pixY >= 0; pixY--) {
loopsva 0:6f472b9627c7 488 if((pixX == 16 * 4) && (pixY == 1)) { //0-15 and 0-3
loopsva 0:6f472b9627c7 489 PickaPixel(pixX, pixY);
loopsva 0:6f472b9627c7 490 PickPix = true;
loopsva 0:6f472b9627c7 491 } else {
loopsva 0:6f472b9627c7 492 PickPix = false;
loopsva 0:6f472b9627c7 493 }
loopsva 0:6f472b9627c7 494 TempPxl = mlx.CalcPixel(pixX + pixY);
loopsva 0:6f472b9627c7 495 CheckNewExtreme();
loopsva 0:6f472b9627c7 496 if(gDebug > 3) pc.printf("%4.2f ", TempPxl);
loopsva 0:6f472b9627c7 497 }
loopsva 0:6f472b9627c7 498 if(gDebug > 3) pc.printf("%2d\n", (pixX / 4));
loopsva 0:6f472b9627c7 499 }
loopsva 0:6f472b9627c7 500 }
loopsva 0:6f472b9627c7 501 if(gDebug > 3) pc.printf("\nloop: %d\n", loop);
loopsva 0:6f472b9627c7 502 }
loopsva 0:6f472b9627c7 503 return(0);
loopsva 0:6f472b9627c7 504 }
loopsva 0:6f472b9627c7 505
loopsva 0:6f472b9627c7 506 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 507 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:6f472b9627c7 508
loopsva 0:6f472b9627c7 509 int main(void) {
loopsva 0:6f472b9627c7 510 rled.period_us(1000);
loopsva 0:6f472b9627c7 511 gled.period_us(1000);
loopsva 0:6f472b9627c7 512 bled.period_us(1000);
loopsva 0:6f472b9627c7 513 gLedUp = false;
loopsva 0:6f472b9627c7 514 rLedPwm = 0.001;
loopsva 0:6f472b9627c7 515 gLedPwm = GLEDSTEP * 14.0;
loopsva 0:6f472b9627c7 516 bLedPwm = BLEDSTEP * 14.0;
loopsva 0:6f472b9627c7 517 rled = 1.0 - rLedPwm;
loopsva 0:6f472b9627c7 518 gled = 1.0 - gLedPwm;
loopsva 0:6f472b9627c7 519 bled = 1.0 - bLedPwm;
loopsva 0:6f472b9627c7 520 pc.baud(115200);
loopsva 0:6f472b9627c7 521 GotAmbient = false;
loopsva 0:6f472b9627c7 522 i2c1.frequency(400000); //set up i2c speed
loopsva 0:6f472b9627c7 523 i2c1.stop();
loopsva 0:6f472b9627c7 524 pc.printf("\n\n--------------------------------------------\n");
loopsva 0:6f472b9627c7 525 pc.printf("FRDM-KL25Z MLX90620 Tests v%d\n", revision);
loopsva 0:6f472b9627c7 526
loopsva 0:6f472b9627c7 527 //initialize the USB serial port interrupt
loopsva 0:6f472b9627c7 528 pc.printf("Initializing Serial Port Rx Interrupt... \n");
loopsva 0:6f472b9627c7 529 pc.attach(&PcRxIRQ, pc.RxIrq);
loopsva 0:6f472b9627c7 530
loopsva 0:6f472b9627c7 531 find_i2c1();
loopsva 0:6f472b9627c7 532 find_i2c2();
loopsva 0:6f472b9627c7 533 /*
loopsva 0:6f472b9627c7 534 if (ReloadEEP()) {
loopsva 0:6f472b9627c7 535 if(gDebug > 1) {
loopsva 0:6f472b9627c7 536 pc.printf("\nCVS file dump");
loopsva 0:6f472b9627c7 537 pb.dump(16, 0, EEbuf);
loopsva 0:6f472b9627c7 538 }
loopsva 0:6f472b9627c7 539 // } else {
loopsva 0:6f472b9627c7 540 // pc.printf("*** file /local/EEP.CSV does not exist\n");
loopsva 0:6f472b9627c7 541 }
loopsva 0:6f472b9627c7 542
loopsva 0:6f472b9627c7 543 // FixEEP();
loopsva 0:6f472b9627c7 544 */
loopsva 0:6f472b9627c7 545 int initFail = 0;
loopsva 0:6f472b9627c7 546 //load up eeprom into buffer
loopsva 0:6f472b9627c7 547 if((mlx.LoadEEPROM())) {
loopsva 0:6f472b9627c7 548 pc.printf("*** MLX90620 dump failed!!!\n");
loopsva 0:6f472b9627c7 549 initFail++;
loopsva 0:6f472b9627c7 550 } else {
loopsva 0:6f472b9627c7 551 if(gDebug > 1) {
loopsva 0:6f472b9627c7 552 //pc.printf("\nEEPROM array");
loopsva 0:6f472b9627c7 553 pb.dump("EEPROM Array:", 16, 0, EEbuf);
loopsva 0:6f472b9627c7 554 }
loopsva 0:6f472b9627c7 555 }
loopsva 0:6f472b9627c7 556
loopsva 0:6f472b9627c7 557 //Init MLX90620
loopsva 0:6f472b9627c7 558 unsigned short x = 0;
loopsva 0:6f472b9627c7 559 if((mlx.SetOscTrimReg())) {
loopsva 0:6f472b9627c7 560 pc.printf("*** set osc trim failed!!!\n");
loopsva 0:6f472b9627c7 561 initFail++;
loopsva 0:6f472b9627c7 562 } else {
loopsva 0:6f472b9627c7 563 x = mlx.GetOscTrimReg();
loopsva 0:6f472b9627c7 564 pc.printf("Osc Trim Value: 0x%04x\n", x);
loopsva 0:6f472b9627c7 565 }
loopsva 0:6f472b9627c7 566
loopsva 0:6f472b9627c7 567 if((mlx.SetConfigReg())) {
loopsva 0:6f472b9627c7 568 pc.printf("*** set MLX config failed!!!\n");
loopsva 0:6f472b9627c7 569 initFail++;
loopsva 0:6f472b9627c7 570 } else {
loopsva 0:6f472b9627c7 571 x = mlx.GetConfigReg();
loopsva 0:6f472b9627c7 572 pc.printf("Config Register: 0x%04x\n", x);
loopsva 0:6f472b9627c7 573 x = mlx.GetPTATReg();
loopsva 0:6f472b9627c7 574 pc.printf("PTAT Register: 0x%04x\n", x);
loopsva 0:6f472b9627c7 575 }
loopsva 0:6f472b9627c7 576
loopsva 0:6f472b9627c7 577 if((mlx.StartMeasurement())) {
loopsva 0:6f472b9627c7 578 pc.printf("*** Start Measurement failed!!!\n");
loopsva 0:6f472b9627c7 579 initFail++;
loopsva 0:6f472b9627c7 580 }
loopsva 0:6f472b9627c7 581 wait_ms(300);
loopsva 0:6f472b9627c7 582
loopsva 0:6f472b9627c7 583 if(initFail == 0) {
loopsva 0:6f472b9627c7 584 pc.printf("Calculating Ta...\n");
loopsva 0:6f472b9627c7 585 mlx.CalcTa_To();
loopsva 0:6f472b9627c7 586 pc.printf("Getting die temperature...\n");
loopsva 0:6f472b9627c7 587 Ta = mlx.GetDieTemp();
loopsva 0:6f472b9627c7 588 pc.printf("Ta = %f\n\n", Ta);
loopsva 0:6f472b9627c7 589 } else {
loopsva 0:6f472b9627c7 590 pc.printf("*** MLX90620 non operational!!!\n");
loopsva 0:6f472b9627c7 591 }
loopsva 0:6f472b9627c7 592 ShowTempsColor();
loopsva 0:6f472b9627c7 593 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 0:6f472b9627c7 594 pc.printf("Ready...\n");
loopsva 0:6f472b9627c7 595 pc.printf("\n\n\n\n\n\n\n");
loopsva 0:6f472b9627c7 596
loopsva 0:6f472b9627c7 597 while (true) {
loopsva 0:6f472b9627c7 598
loopsva 0:6f472b9627c7 599
loopsva 0:6f472b9627c7 600 int lc = 0;
loopsva 0:6f472b9627c7 601 if(!(ShowTempsColor())) {
loopsva 0:6f472b9627c7 602 do {
loopsva 0:6f472b9627c7 603 lc++;
loopsva 0:6f472b9627c7 604 //pc.printf("waiting... %d\n", lc);
loopsva 0:6f472b9627c7 605 wait_ms(1);
loopsva 0:6f472b9627c7 606 } while(ShowTempsColor() != 0);
loopsva 0:6f472b9627c7 607 //rWinkLed();
loopsva 0:6f472b9627c7 608 //gWinkLed();
loopsva 0:6f472b9627c7 609 //bWinkLed();
loopsva 0:6f472b9627c7 610 sinLEDs();
loopsva 0:6f472b9627c7 611 if(gDebug > 2) {
loopsva 0:6f472b9627c7 612 pc.printf("rls: %f rlw: %f\n", RLEDSTEP, rLedPwm);
loopsva 0:6f472b9627c7 613 pc.printf("gls: %f glw: %f\n", GLEDSTEP, gLedPwm);
loopsva 0:6f472b9627c7 614 pc.printf("bls: %f blw: %f\n\n", BLEDSTEP, bLedPwm);
loopsva 0:6f472b9627c7 615 }
loopsva 0:6f472b9627c7 616 }
loopsva 0:6f472b9627c7 617 if(PutOnPC == 1) {
loopsva 0:6f472b9627c7 618 ShowTempsVT100();
loopsva 0:6f472b9627c7 619 }
loopsva 0:6f472b9627c7 620 }
loopsva 0:6f472b9627c7 621 }