Tworzę sobie pewien projekt. Telefon ma za zadanie wysyłać kilka liczb, AVR poprzez moduł bluetooth i UART je odbierać, i w drugą stronę też tzn. wysyłanie kilku liczb z AVR do telefonu. Czasami te liczby będą jednocyfrowe, czasami dwu lub trzy cyfrowe. Jak to zrobić aby zapewnić poprawną komunikację?
Zrobiłem coś takiego:
Android
String s="<"; //znak < to tak początek ramki.
//Narazie dwie liczby , docelowo bedzie więcej.
x = (int) sensorEvent.values[2];
y = (int) sensorEvent.values[1];
if(x<10) s+= "00"+x;
else if(x<100) s+= "0"+x;
else s+= x+"";
if(y<10) s+= "00"+y;
else if(y<100) s+= "0"+y;
else s+= y+"";
send(s);
public void send(String s)
{
byte[] toSend = s.getBytes();
try {
mmOutputStream.write(toSend);
//Toast.makeText(this, "Data sent successfully", Toast.LENGTH_SHORT).show();
}
catch (IOException e){
Toast.makeText(this, "ERROR", Toast.LENGTH_SHORT).show();
}
}
i w mikrokontrolerze odbieram w przerwaniu:
ISR(USART0_RX_vect)
{
static int i;
znak = UDR0;
if(flag)
{
//Zapis znaków do 6 znakowej tablicy char
tab[i++] = znak;
if(i==6)
{
uart_get();
i = 0;
flag = 0;
}
}
if(znak == '<')
{
flag = 1;
}
}
void uart_get()
{
//Pierwsze 3 znaki to liczba x, kolejne trzy to liczba y;
for(int i=0; i<3; i++)
{
tab_x[i] = tab[i];
tab_y[i] = tab[i+3];
}
_x = atoi(tab_x);
_y = atoi(tab_y);
}
Nawet to działa, ale co jak będę chciał wysyłać większe ilości danych?
Jak najlepiej wysyłać i odbierać dane pomiędzy telefonem a mikrokontrolerem?