Passo a passo, então:
char str[3];
char count = 0;
}
São definidas duas variáveis, uma cadeia de caracteres str, com espaço para guardar 3 caracteres e um contador count. A primeira vai guardar a mensagem recebida, a segunda vai guardar a posição onde deve ser guardado o próximo caracter que irá ser recebido.
void loop() {
Esta função chama-se loop (ciclo, em Português), assim ela irá ser repetida (em ciclo) para sempre.
if (Serial.available()) {
Se hover um caracter disponível para se recebido, é executado o bloco seguinte, isto é, todo o código que está entre o { }.
str[count++] = Serial.read();
Pega no caracter que está disponível na Serial para ser lido e guarda-o no espaço indicado por count. Ao mesmo tempo, incrementa a variável count, para ficar preparada para o próximo caracter que seja recebido.
if (count == 2) {
Se já recebeu 2 caracteres, é porque a mensagem já terminou, então vai ter que a "descodificar" (ver o que ele quer dizer). Isso é feito no próximo bloco, portanto entre os caracteres { }.
str[count] = '\0';
count = 0;
Estas duas instruções, finalizam o processo de recepção. A primeira acrescenta o caracter especial '\0' no fim da cadeia de caracteres. Este caracter indica em linguagem C, o fim da string. A segunda instrução, prepara o contador para a recepção da próxima mensagem.
if (strcmp(str, "A0") == 0) {
Esta instrução é a responsável pela comparação de duas cadeias de caracteres. Se duas cadeias de caracteres forem iguais, o resultado da função strcmpé 0. O nome da função é a abreviatura de "string compare".
Serial.println("code OK.");
digitalWrite(ledPin, HIGH);
}
Se as duas strings forem iguais (neste caso fiz a comparação com a string "A0"), então o programa vai fazer qualquer coisa. Neste caso (como era um exemplo simples), estou a ligar um LED e a devolver pela série uma mensagem para que se saiba que a mensagem chegou de forma correcta. E também fechado o bloco de instruções iniciado em if (strcmp(str, "A0") == 0) {.
else {
Serial.println("wrong code.");
digitalWrite(ledPin, LOW);
}
Caso a mensagem não seja a esperada, neste caso, é feita qualquer coisa também. Assim, desligo o LED, caso ele esteja aceso e envio uma mensagem indicando que a mensagem não foi a correcta. Estas duas instruções estão mais uma vez contidas num bloco, delimitado pelos caracteres { }.
}
}
}
São fechados os blocos abertos anteriormente, primeiro o que foi aberto com a instrução if (count == 2) {, seguidamente o que foi aberto na linha if (Serial.available()) { e por último o que foi aberto no início da função void loop() {.
Não sei se desta forma fica claro. Se precisar de mais alguma coisa dia.