Je n'ai pas lu tout le code et ne dispose pas de ce matériel mais il semble que votre souci principal soit l'intégration de différents morceaux de codes
La programmation par machine à états (cf mon tuto éventuellement) permet généralement d'aborder ce genre de code.
j'ai noté cependant ceci
je ne sais pas quel Arduino vous utilisez, sur un UNO ou Nano la formule donne 14x2+3x4= 40 ça tient dans le buffer de 64 octets mais sur une plateforme 32 bits, ce serait 14x4+3x4= 68 et ça n'arrivera jamais si le buffer de réception série est limité à 64 octets.
en pratique il vaut mieux lire les données asynchrones au fil de l'eau , quand elles arrivent et une fois que vous avez reçu tous vos octets, vous effectuez l'extraction.
d'autre part, si par hasard un octet se perd, votre mode de communication ne s'en remet pas. On utilise généralement pour un protocole binaire une trame de début ou de fin qui permet de se synchroniser