Цитата(mr_smit @ Dec 18 2011, 20:20)

А может можно как то переделать функцию
SendCommand так чтобы не дописывать
0 в комманды? Просто я с этими указателями чего то путаюсь

Переделать можно, например так:
Код
void SendCommand (unsigned char *command, unsigned char length) {
while (length--) {
while(!(UCSRA & (1<<UDRE))); // ждем окончания передачи байта
UDR = *command++;
}
}
B вызывать соотв.:
Код
SendCommand(startCommunication, 5);
Цитата(mr_smit @ Dec 18 2011, 20:20)

А вот этот кусок вообще не понимаю:
Код
while (*command) {}
каким макаром тут проверка на ноль идет
P.S. Да, не сам писАл. Нашел пример.
*command = чтение байта по указателю command и если там 0, то получается while (0) - цикл заканчивается.
Цитата(mr_smit @ Dec 18 2011, 20:20)

Это же указатель на первый элемент массива. Причем тут ноль?
На первый байт он указывал на входе в функцию.
Код:
Код
UDR = *command++;
означает, что в UDR пишется байт по указателю, затем указатель инкрементируется (++ - постинкремент).