• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Bluetooth - przesyłanie komunikacji zwrotnej do aplikacji APP Inventor 2
#1
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
 
Odpowiedź
#2
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ć.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
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
 
Odpowiedź
#4
(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?
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości