Proto Threading 2 functions
Jot provided the answer in a comment: you are updating lastMillis in
the wrong place. The correct way is:

if (millis() - lastMillis &gt;= 1000) {
    handleFingers();
    lastMillis = millis();
}


Optionally, you can use lastMillis += 1000 instead of
lastMillis = millis() if you want to precisely control the average
(rather than minimum) update period.

Just to elaborate a bit, the idiom I like for doing this kind of stuff
is as follows:

const unsigned long FINGER_UPDATE_PERIOD = 1000;
const unsigned long WRIST_UPDATE_PERIOD  = 1000;

void loop() {
    unsigned long now = millis();

    // Handle the fingers.
    static unsigned long last_finger_update;
    if (now - last_finger_update &gt;= FINGER_UPDATE_PERIOD) {
        last_finger_update = now;
        handleFingers();
    }

    // Handle the wrist.
    static unsigned long last_wrist_update;
    if (now - last_wrist_update &gt;= WRIST_UPDATE_PERIOD) {
        last_wrist_update = now;
        handleWrist();
    }
}


Note that:


The update periods are constants defined at the top of the
program.
millis() only needs to be called once per loop iteration: if the
loop takes many milliseconds to run you would be doing something
wrong anyway.
last_finger_update and last_wrist_update stand for lastMillis
and lastMillis2, which are very poor naming choices.
These two variables are local to loop(), as they are not needed
anywhere else.
These variables are also declared static, which means they are
implicitly initialized to 0 and they preserve their values from call
to call.
I update the timing variables before doing the actual work. This
helps keeping all the timing code together, which makes the code
clearer, especially if the actual work takes many lines of code (e.g.
you do the work inline instead of having it in separate functions).


Some people prefer using libraries for this kind of proto-threading. If
you use the ArduinoThread library, the same could be written as:

const unsigned long FINGER_UPDATE_PERIOD = 1000;
const unsigned long WRIST_UPDATE_PERIOD  = 1000;

Thread updateFingers(handleFingers, FINGER_UPDATE_PERIOD);
Thread updateWrist(handleWrist, WRIST_UPDATE_PERIOD);
StaticThreadController&lt;2&gt; scheduler(&amp;updateFingers, &amp;updateWrist);

void loop() {
    scheduler.run();
}