Skocz do zawartości

2 x Arduino i HC-05


KamilF

Pomocna odpowiedź

Dzień dobry,

jestem początkujący w Arduino, mam pewien cel do którego chcę dojść małymi krokami podczas których testuje różne rzeczy. Teraz jestem na etapie przesyłania danych z jednego Arduino do drugiego za pomocą połączenia Bluetooth. Z połączeniem urządzeń poradziłem sobie, udało się przesyłać wartość, która zmienia się w zakresie 0-255.

Docelowo kilka wartości odczytanych na pierwszym Arduino ma zostać przesłanych do drugiego i on na ich podstawie wykona dalsze czynności. Dane zbierane będą w sposób ciągły i od razu wysyłane. Kody wyglądają tak:

Master

#include <SoftwareSerial.h>

SoftwareSerial BTmaster (10,11);
int tabela[6]={7,8,9,10,11,12};

void setup()
{
 Serial.begin(9600);
 BTmaster.begin(9600);
}

void loop()
{
 for(int i=0;i<=5;i++)
 {
   BTmaster.write(tabela[i]);
   Serial.print(i);
   Serial.print("\t");
   Serial.print(tabela[i]);
   Serial.print("\n");
 }
}

Slave

#include <SoftwareSerial.h>

SoftwareSerial BTslave (10,11);
int tabela[6];

void setup()
{
 Serial.begin(9600);
 BTslave.begin(9600);
}

void loop()
{
 BTslave.begin(9600);
 if (BTslave.available())
 {
     for(int i=0;i<=5;i++)
     {
       tabela[i]=BTslave.read();
       Serial.print(i);
       Serial.print("\t");
       Serial.print(tabela[i]);
       Serial.print("\n");
     }
 }
}

Kolejność w jakiej dane w tabeli są wysyłane musi być taka sama po ich odebraniu przez drugie Arduino. W tej chwili odbiór danych "jest", ale po każdym restarcie, któregokolwiek Arduino trafiają one w inne miejsce tabeli, w jaki sposób zsynchronizować dane?

Pozdrawiam, Kamil

Link do komentarza
Share on other sites

Dzień dobry,

dodałem znak 'p' jako początek serii danych i przy odbiorze użyłem funkcji serial.find i odczyt serial.readBytes. Działa 😃, resetowałem Arduino master, potem slave, a i tak synchronizuje dane i trafiają w odpowiednie miejsce tabeli. Nie wiem czy to poprawnie programistycznie ale działa.

#include <SoftwareSerial.h>

SoftwareSerial BTmaster (10,11);
int tabela[6]={0,0,0,0,0,0};
char poczatek = 'p';
int osXpin=A1;
int osXpoz=0;
int osXpozmap;

void setup()
{
 Serial.begin(9600);
 BTmaster.begin(9600);
 pinMode(osXpin, INPUT);
}

void loop()
{
 osXpoz=analogRead(osXpin);
 osXpozmap=map(osXpoz,0,1023,0,255);
 tabela[2]=osXpozmap;
 tabela[5]=osXpozmap;
 BTmaster.write(poczatek);
 for(int i=0;i<=5;i++)
 {
   BTmaster.write(tabela[i]);
   Serial.print(i);
   Serial.print("\t");
   Serial.print(tabela[i]);
   Serial.print("\n");
 }
}
#include <SoftwareSerial.h>

SoftwareSerial BTslave (10,11);
byte tabela[6];
int i;
int x;
byte smiec=0;

void setup()
{
 Serial.begin(9600);
 BTslave.begin(9600);
}

void loop()
{
 BTslave.begin(9600);
 if (BTslave.available())
 {
   if(BTslave.find('p'))
   {
     //smiec=BTslave.read();
     x=BTslave.readBytes(tabela,6);
   }

 }
 else
 {
  for(i=0;i<=5;i++)
 {
   tabela[i]=0;
 } 
 }
 for(i=0;i<=5;i++)
 {
   Serial.print(i);
   Serial.print("\t");
   Serial.print(tabela[i]);
   Serial.print("\n");
 }
}

Pozdrawiam, Kamil

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.