Я обычно перед началом пакета отправляю идентификатор из 3-х символов
Например: "cm="
Так как пакет может покалечится в силу разных причин и последовательность данных нарушится
Выглядит примерно вот так:
Код:
void loop()
{
if (UART_ReadByte(inByte))
{
if ( packid == 16 ) // контрольная сумма команды cm=
{
packid=0;
switch (inByte) // Смотрим какая команда пришла
{
case 'U': // Серва поднимается
if(i > min_pos) myservo1.write(i -= step_servo);
break;
case 'J': // Серва опускается
if(i < max_pos) myservo1.write(i += step_servo);
break;
case 'K': // Серва поворачивается вправо
if(i2 > min_pos) myservo2.write(i2 -= step_servo);
break;
case 'H': // Серва поворачивается влево
if(i2 < max_pos) myservo2.write(i2 += step_servo);
break;
case 'C': // Клаксон
horn();
break;
case ']': // запрос состояния аналоговых датчиков
byte2char(A6_Read,A7_Read);
break;
case 'V': // Включить/Выключить фары
D9_Low;
break;
} else packet_id(inByte);
//**************************************************
void packet_id(uint8_t inbyte) //проверяем идентификатор пакета "cm="
{
switch (inbyte)
{
case 'c':
packid=2;
break;
case 'm':
packid*=2;
//packid=packid<<1;
break;
case '=':
packid*=4;
//packid=packid<<2;
break;
default:
packid=0;
}
}
Код взял здесь
Работает безотказно, проверенно мной