 #define OLED_DRAW_HLINE 5 // followed by x y width
 #define OLED_DRAW_VLINE 6 // followed by x y height
 #define OLED_DRAW_LINE  7 // followed by x1 y1 x2 y2
+#define OLED_DRAW_CIRCLE 8 // followed by x y radius
 
 void drawOLED(void) {
   // graphic commands to redraw the complete screen should be placed here
   u8g.setFont(u8g_font_unifontr); // reduced font, only glyphs 0x20-0x7f
-  uint8_t i=0;
-  uint8_t cmd, x, y, w, h, x2, y2;
+  uint16_t i=0;
+  uint8_t cmd, x, y, w, h, x2, y2, radius;
   while ((i<OLEDBUFSIZE) && oledBuf[i]!=0) {
     cmd = oledBuf[i++];
     if (OLED_DRAW_STOP==cmd) break; // stop immediately if commanded

          oledBuf[i++] = Serial.parseInt(); // read two more bytes (one here, one below)
        case OLED_DRAW_HLINE:
        case OLED_DRAW_VLINE:
          oledBuf[i++] = Serial.parseInt(); // read one more byte
        case OLED_DRAW_STOP:
        case OLED_DRAW_PIXEL:

//          Serial.print("x2="); Serial.print(x2); Serial.print(" y2="); Serial.println(y2);
          u8g.drawLine(x,y,x2,y2);
          break;
        case OLED_DRAW_CIRCLE:
          radius = oledBuf[i++];
//          Serial.print("rad="); Serial.println(radius);
          u8g.drawCircle(x,y,radius);
          break;
    }
  }
}

// read a string of gfx commands and keep them in a buffer so drawOLED() can use them
void handleSerialInputOLED() {
  uint16_t i=0;
  uint8_t cmd, c;
//  Serial.println("OLEDstart");
  while ((i<OLEDBUFSIZE) && (Serial.available()>0) && (Serial.peek()!= '\n')) {
