No, wait it seems ok, because if the velocity is 0, the velocity is <10 then the light is LOW.
I have no much time for this right now, but I noticed a detail:
if ( (action==1)&&(note!=0) ){ // ...and then the velocity
velocity=incomingByte;
playNote(note, velocity);
note=0;
velocity=0;
action=2; //and not "action=0;" to reinit the value
}
Otherwise, are you sure polyphony is activated in your software and you didn't miss a setting?