     if((t - eye[eyeIndex].blink.startTime) >= eye[eyeIndex].blink.duration) {
       // Yes -- increment blink state, unless...
       if((eye[eyeIndex].blink.state == ENBLINK) &&  // Enblinking and...
-        //((digitalRead(BLINK_PIN) == LOW) ||         // blink or wink held...
         ((force_blink) ||         // blink or wink held...
-          digitalRead(eye[eyeIndex].blink.pin) == LOW)) {
+         blink_eye[eyeIndex])) {
         // Don't advance state yet -- eye is held closed instead
-        force_blink = false;
-        blinkR = false;
-        blinkL = false;
       } else { // No buttons, or other state...
         if(++eye[eyeIndex].blink.state > DEBLINK) { // Deblinking finished?
           eye[eyeIndex].blink.state = NOBLINK;      // No longer blinking

uint16_t a2_value;
bool auto_eyes = true;
bool auto_blink = true;
bool blinkR = false;
bool blinkL = false;
bool force_blink = false;
// INITIALIZATION -- runs once at startup ----------------------------------



void frame( // Process motion for a single frame of left or right eye
  uint16_t        iScale) {     // Iris scale (0-1023) passed in
  //static uint32_t frames   = 0; // Used in frame rate calculation
  static uint8_t  eyeIndex = 0; // eye[] array counter
  int16_t         eyeX, eyeY;
  uint32_t        t = micros(); // Time at start of function
