Arduino Polska Forum

Pełna wersja: Bluetooth - przesyłanie komunikacji zwrotnej do aplikacji APP Inventor 2
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam
Ostatnio kupiłam do swojego Arduino UNO moduł bluetooth HC05. Na necie jest wiele przykładów z zapalaniem się diody led i jej gaszeniem.
Korzystając z aplikacji APP Inventor 2 zrobiłem, (a raczej przepisałem) program jak poniżej
[Obrazek: 8887424600_1472981245.jpg]




[Obrazek: 3410244900_1472981266.jpg]

Kod programu arduino również poniżej

Kod:
int ledpin = 2;
int state = 0;  
int tx = 1;
int rx = 0;
int flag = 0;


void setup() {
pinMode(ledpin, OUTPUT);
digitalWrite(ledpin, LOW);
pinMode(tx, OUTPUT);
pinMode(rx, INPUT);
Serial.begin(9600);  
}

void loop() {
 delay(50);
if(Serial.available() > 0){  
 state = Serial.read();    
 flag = 0;
}
if(state == '0'){             //jak w zmiennej state bedzie 0 to ma zgasic led
 digitalWrite(ledpin, LOW);  
 Serial.println("0"); // i wyslac wiadomosc zwrotna, że led jest wylaczony
 state = 0;                  // zerujemy zmienna state
}
else if(state == '1'){
 digitalWrite(ledpin, HIGH);
 Serial.println("1");
 state = 0;
}
}

Program napisany w standardowy sposób jak większość przykładów (dziwne bo bez określenia w setup RX/TX jako wy/we nie działało), czyli jeżeli serial available to zapisz przesyłaną daną do zmiennej "state". Jak wartość state=0 to zgaś led i wyślij do aplikacji "0" w odpowiedzi. Jak wartość state inne niż 0 to zapal led i wyślij do aplikacji "1".
Problem polega na wysyłaniu informacji zwrotnej z Arduino do telefonu. Nagrałęm filmik opisujący ten problem:

http://filmy.elektroda.net/3_1472982036.mp4


Zastanawiam się czy to nie jest tak, że np. LED się zapala i zostaje wysłane do aplikacji "1", ale w bloku aplikacji jest tak, że wyślij do arduino "1", a zaraz pod spodem wstaw jako led_status to co odebrane i może aplikacja wstawia tekst jeszcze przezd odczytem? Hmmm
bo źle zdefiniowałeś uart .
Kod:
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX
int ledpin = 2;
int state = 0;  

int flag = 0;


void setup() {
pinMode(ledpin, OUTPUT);
digitalWrite(ledpin, LOW);
  mySerial.begin(9600);
  while (!Serial) {
  }
Serial.begin(9600);  
}

void loop() {
delay(50);
if(mySerial.available() > 0){  
state = Serial.read();    
flag = 0;
}
if(state == '0'){             //jak w zmiennej state bedzie 0 to ma zgasic led
digitalWrite(ledpin, LOW);  
Serial.println("0"); // i wyslac wiadomosc zwrotna, że led jest wylaczony
state = 0;                  // zerujemy zmienna state
}
else if(state == '1'){
digitalWrite(ledpin, HIGH);
Serial.println("1");
state = 0;
}
}

blu... podłącz do 10 i 11 będzie działał uzar 1 jest zarezerwowany dla bootlegera nie należny go używać.
Niestety, spróbowałem to wgrać i sytuacja podobna jak często miałem. Po kliknięciu TURN_ON dla przykładu aplikacja mi się zawiesza i dalej już nic nie mogę zrobić. Rozumiem, że RX to pin 10 i podłączam go do TX bluetootha i odwrotnie z pinem 11, także o błędnym połączeniu chyba nie ma mowy. Już wcześniej też na tym SoftwareSerial próbowałem i był ten sam efekt, czyli zawieszenie aplikacji
(04-09-2016, 14:26)Krisvann napisał(a): [ -> ][Obrazek: 4782075200_1473271915.jpg]
Trochę na około ale udało mi się uzyskać ten efekt wprowadzając pętlę for wykonywaną dwukrotnie, czyli tak jakbym dwa razy kliknął.

A czy ktoś mógłby mi podpowiedzieć w sprawie wysyłania co jakiś czas zawartości zmiennej do aplikacji na androidzie. Np. mam licznik na arduino którego wartość przechowywana jest w zmiennej int i chciałbym powiedzmy co kilka sekund na przerwaniu timera wysyłać zawartość stanu licznika do telefonu. Czy mogę przesyłać zawartość zmiennej typu int czy powinno to być przekonwertowane na zmienną typu char?