  * This will wait for a pulse, and then display colour and height changes
  * as appropriate.
  */
-void loopSerialMode() {
+static unsigned char cmdBuffer[3] = { 0, 0, 0 };  // The command buffer.
+void screenSerialRead() {
 	
 	// Static variables for the serial mode.
 	static bool flippedRead = false;						// Are we reading in "inverted" LDR mode (ie. LDR1 <> LDR2).
 	static unsigned int bitsSeen = 0;						// The number of valid bits read.
-	static unsigned char cmdBuffer[3] = { 0, 0, 0 };		// The command buffer.
 	static int oldState = 0;								// The last 'state' symbol read by the LDR: SYMB_ZERO, SYMB_LOW, SYMB_HIGH
 	#ifdef SSMODE_8BIT
 	static uint16_t bSerialBuffer = 0x00;					// The buffer to write serial commands into. 16 bit (we need space for frame headers, parity, etc).

void loop() {
	
	// Listen for a change in mode.
	detectModeChange( 0 );
	
	// Detect which mode we are in.
	switch (eClipMode)

		delay( 1000 );
	}
	
        if( skipToMode > 0 )
        {
          eClipMode = skipToMode;
          switch( eClipMode )
          {
            case EEMODE_HEIGHTONLY:
            case EEMODE_SERIAL:
              eRGBMode  = RGBMODE_SCREEN;
              break;
            default:
              eRGBMode  = RGBMODE_NONE;
          }
        }

	// Now SWBOT has been released, flicker the colour 3 times.
	for( int i=0; i<3; i++ )
	{
