       else {
         // Human has played correct colour. Figure out which column
         for (byte i=0; i<=6; i++) {
+          strip.setPixelColor(i, 0);
           if (bit(i) == col) {
             c = 6-i;
           }
         }
         // Drop the counter
+        strip.setPixelColor(c, humanColour);
+        strip.show();
         dropCounter(board, human, c);
         displayBoard(board);
         updateScreen();
-        
         if (score(board, human, robot) == 1000) {
           strcpy(screen[0], "You Won!");
           updateScreen();
-          while (true) {}
+          while (true) {
+          }
         }
         else {
-          
           //unsigned long t = millis();
           strcpy(screen[0], "My go:");
           updateScreen();
           currentScore = bestMove(board, robot, human, best, 4);
           digitalWrite(LED, LOW);
           //Serial.println(millis() - t);
+          for (byte i=0; i<=6; i++) {
+            strip.setPixelColor(i, 0);
+          }
+          strip.setPixelColor(best, robotColour);
+          strip.show();
           dropCounter(board, robot, best);
           displayBoard(board);
-          
           if (score(board, robot, human) == 1000) {
             strcpy(screen[0], "You Lost!");
             updateScreen();
-            while (true) {}
-          }
-          
+            while (true) {
+            }
+          }
           strcpy(screen[0], "Your go:");
           updateScreen();
         }
-      }        
+      }
     }
     btns = NO_BUTTONS;
   }
 }
 
 void displayBoard(char board[]) {
-  
   Serial.println("0123456");
-  
   byte i = 0;
-  
   for(byte row = 0; row <= 5; row++) {
     for(byte col = 0; col <= 6; col++) {
       screen[row+1][col] = board[i++];

// P Beard
// Jan 2015

#include "U8glib.h"

#define LED 13
#define NO_BUTTONS 0b11111111111111

const byte btnRow[2] = {2, 3};
const byte btnCol[7] = {4, 5, 6, 7, 8, 9, 10};

unsigned int btns = NO_BUTTONS;
unsigned int lastBtns = NO_BUTTONS;
unsigned int stableBtns = NO_BUTTONS;
unsigned long debounce;
char human = '-';
char robot = '-';

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);	// Fast I2C / TWI 

char board[42];
char screen[7][22];

// Array containing start position of each "win line"
byte lineStart[] = { 0,  7, 14, 21, 28, 35,  0,  1,  2,  3,  4,  5,  6, 14,  7,  0,  1,  2,  3,  3,  4,  5,  6, 13, 20};
// Array containing number of groups of 4 positions on each "win line"
byte lineReps[] =  { 4,  4,  4,  4,  4,  4,  3,  3,  3,  3,  3,  3,  3,  1,  2,  3,  3,  2,  1,  1,  2,  3,  3,  2,  1};
// Array containing direction offset for each "win line"
byte lineSteps[] = { 1,  1,  1,  1,  1,  1,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  6,  6,  6,  6,  6,  6};

void setup() {
  pinMode(LED, OUTPUT);


void updateScreen() {
  // U8GLIB picture loop
  u8g.firstPage();
  do {
    uint8_t i, y;
    y = 0; // reference is the top left -1 position of the string
    y--; // correct the -1 position of the drawStr
    for( i = 0; i < 7; i++ ) {
      u8g.drawStr( 0, y, (char *)(screen[i]));
      y += u8g.getFontLineSpacing();
    }
  } 
  while( u8g.nextPage() );
}

byte dropCounter(char board[], char token, byte col) {
  byte i = col;
  // Test if the position one row down is empty
  while (i < 35 && board[i+7] == '.') {
    // Move down a row
