static void LCD_thread() { byte[] oldlcdMessageLine1 = System.Text.Encoding.UTF8.GetBytes("0"); byte[] oldlcdMessageLine2 = System.Text.Encoding.UTF8.GetBytes("0"); // initialise the LCD display LCD lcd = new LCD("COM2"); // Timer turns Backlight off after 30 seconds of inactivity Timer backlightTimer = new Timer(BacklightTimerOff, lcd, 30000, 0); Thread.Sleep(2000); // Turn on Backlight for LCD, flickers due to power when only running on USB lcd.backlightOn(); lcd.clear(); while (true) { // Check if LCD data needs to be updated if (System.Convert.ToBase64String(lcdMessageLine1) != System.Convert.ToBase64String(oldlcdMessageLine1) || System.Convert.ToBase64String(lcdMessageLine2) != System.Convert.ToBase64String(oldlcdMessageLine2)) { lcd.backlightOn(); backlightTimer.Change(30000, 0); // Reset backlight timer to 30 seconds after screen change if ((lcdMessageLine1 != oldlcdMessageLine1) && (lcdMessageLine2 != oldlcdMessageLine2)) { lcd.clear(); } if (lcdMessageLine1 != oldlcdMessageLine1) { oldlcdMessageLine1 = lcdMessageLine1; lcd.setCursor(0, 0); lcd.print(lcdMessageLine1); } if (lcdMessageLine2 != oldlcdMessageLine2) { oldlcdMessageLine2 = lcdMessageLine2; lcd.setCursor(0, 1); lcd.print(lcdMessageLine2); } } Thread.Sleep(200); } }