void action() { volatile byte v; volatile int w; volatile int i; // ************************************************** // Display the address of the first displayed channel // ************************************************** w = dmxaddress - 3; // Adjust back to the true address lcd.setCursor(0,0); if (w < 10) { lcd.print(" "); } else if (w < 100) { lcd.print(" "); } lcd.print(w); lcd.print(":"); // ************************************************** // Compute the frames/sec // ************************************************** lcd.setCursor(0,1); if (deltaT > 1000) { // Less than one frame per second -> we assume no incoming data lcd.print("--- "); for (i=0; i<7; i++) { fpsArray[i] = 0; } } else { v = 1000 / deltaT; // current frames/sec -> 1 second / deltaT w = 0; for (i=7; i>0; i--) { fpsArray[i] = fpsArray[i-1]; // shift averaging array w += fpsArray[i]; // sum components for average } fpsArray[0] = v; w += v; v = w >> 3; // average = sum / 8 (probably ought to round this) if (v < 10) { lcd.print(" "); } lcd.print(v, DEC); lcd.print("/s "); } // ************************************************** // Display the 8 channels, 4 per line // ************************************************** for (i=0; i<8; i++) { lcd.setCursor(lcdCol[i],lcdRow[i]); v = dmxvalue[i]; if (v < 16) { lcd.print(" "); } lcd.print(v, HEX); } return; //go back to loop() } //end action() loop