Boas pessoal tenho dois arduinos e dois moduloes bluetooth hc-05 e consigo fazer o envio/receçao de dados entre eles.Tenho o master e o slave defenidos.
Contudo estou com dificuldade em fazer a separaçao de dados pois quero enviar valores que estao entre 0 e 180 para cinco motores diferentes dado que estes valores entre 0 e 180 serao diferentes para cada um dos motores.
Consigo fazer este processo com um so motor pois nao ha problema no tratamneto de dados alguem sabe como posso tratar estes dados sem que esteja a controlar o motor errado com o valor errado.
Para alem de fazer este processo em "real time" o meu objetivo seria estar a ver o movimento e quando carrega-se num botao guardar esse valores num array que ja o consegui fazer, mas novamente queria sair do modo "real time" onde estava e enviar as posiçoes para os 5 motores guardalas no outro lado num array e atuar nos motores com os valores guardados no array.
Para conseguir trabalhar com muitos dados, você precisa definir um protocolo, onde vai ter os cabeçalhos, os dados, e preferencialmente o controle de erro, checksum.
Geralmente se utiliza caracteres ASCII e para o caso de valores nunéricos, os valores geralmente são fracionados em dezenas ou outros valores, para se evitar usar os mesmos valores de dados que o cabeçalho usa,
Considerando que esteja usando 8 bits, podem ser utilizados os valores de 0 a 255, ou 0x00 a 0xFF
Se usar um cabeçalho de 0xFF e um terminador de 0xFE, e usar os valores de letras e números definidos na tabela ASCII, não haverá conflito, e assim, será bem eficiente a transmissão dos dados.
Por exemplo, transmitir o valor 180, se você utilizar 3 bytes, fracionando o valor em 3 números, "1" "8" e "0", a tabela ASCII tem os valores correspondentes, 49 56 e 48,
Assim, poderia enviar os dados:
255 49 56 48 254
Sendo que 255 é 0xFF e 254 é 0xFE,
Mas poderia fracionar o valor 180 em apenas 2 valores, pois em hexadecimal, cada dígito pode ter 16 valores em vez de 10. Use uma calculadora em modo de programação, e o valor 180 corresponde a 0xB4, assim poderia enviar a letra "B" e o número "4":
Na tabela ASCII, o valor da letra B é 0x42 ou 66 (em decimal), então podem ser enviados os dados:
255 66 52 254
Parece pouca redução, mas já é um tempo a menos que se salva em cada transmissão.
Depois disso, tem a verificação de erro, que ajuda a validar o valor recebido, existem diversos meios de verificação, mas para dados de 8 bits, o mais comum é utilizar a soma dos valores, e considerar apenas o 8 bits,
Por exemplo:
Os valores 49 56 48 (referente a "1" "8" "0") 49+56+48 = 153 ou "1001 1001" em binário, uma coisa que se deve evitar é a utilização do valor de checksum, com mesmo valor do cabeçalho, ou utilizar uma contagem de bytes recebidos, para ter certeza que o terminador foi recebido, em vez de reiniciar a contagem quando o checksum for recebido.
Ficando os dados para envio:
255 49 56 48 153 254
Digamos que fossem os valores "1" "8" "0" "0" "0" "0", 49+56+48+48+48+48 = 297 ou "1 0010 1001" em binário, então seriam apenas considerados os bits "0010 1001" (41 em decimal)
Ficando os dados para envio:
255 49 56 48 48 48 48 41 254
Um sistema que utiliza protocolo de dados serial é o xbee zigbee, mas em vez de 0xFF para cabeçalho, é utilizado o 0x7E: