Sterowanie diodami LED. Połączenie ArduinoUno, Androida i modułu HC-05. Część 2


 

Lekcja 2. Piszemy oprogramowanie dla Androida

Krok 1.
Naszą przygodę proponuje zacząć od instalacji Android Studio.
Ze strony https://developer.android.com/studio/index.html

Po instalacji przechodzimy do stworzenia nowego projektu uruchamiając program ANDROID STUDIO.

Krok 2.
Tworzenie początkowe naszej aplikacji.

 

Opis okna nr.1

Application Name: Nazwa naszej aplikacji – Możemy nazwać ją jak chcemy np. Ledowo
Company Domain: Nazwa domeny „naszej firmy” – to pozostawiamy bez zmian.

Project Location: lokalizacja naszego projektu – pozostawiamy bez zmian.

Naciskamy przycisk „Next” i przechodzimy do kolejnego okienka:

Opis okna nr.2
Tutaj wybieramy na jaką platformę będziemy tworzyć nasz program docelowo wybieramy

Phone and Tablet a następnie Minimum SDK, jako API 17 ( android 4.2).
( można wybrać inne API, moim założeniem jest aby aplikacja działała nawet na starszych platformach)

Naciskamy NEXT
Wybieramy Empty Activity i naciskamy NEXT

W tym oknie w miejscu:
Activity Name: wpisujemy nazwę rdzenia naszej aplikacji, miejsca gdzie będziemy pisać pierwszą część naszego programu. Najważniejsze jest, aby zaznaczona była opcja Generate Layout File. Która to z kolei utworzy nam layout – wygląd początkowy naszej aplikacji. Po wszystkim naciskamy Finish.

Krok 3.
Zaczniemy od wyglądu naszej aplikacji, czyli layoutu. Korzystajac z „drzewa” po lewej stronie interfejsu użytkownika wybieramy strzałkami res› layout› activity_lista_urzadzen i naciskamy dwukrotnie, aby otworzyłą się nam karta po prawej stronie. ( patrz rys. 5)

Naciskamy na Hello World i usuwamy. Z listy po lewej stronie z sekcji WIDGET wybieramy Large Text View. Następnie dodajemy ListView i Button. Kiedy wszystko już mamy dodane musimy nadać im nazwy, z których będziemy korzystać w programie. Na dole tego okna mamy Karty Design oraz Text. Aby uprościć procedurę kopiujemy listing nr 1 poniżej i wklejamy w miejsce naszego:

Listing activity_lista_urzadzen.xml

[pastacode lang=”markup” manual=”%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3CRelativeLayout%20xmlns%3Aandroid%3D%22http%3A%2F%2Fschemas.android.com%2Fapk%2Fres%2Fandroid%22%0Axmlns%3Atools%3D%22http%3A%2F%2Fschemas.android.com%2Ftools%22%0Aandroid%3Alayout_width%3D%22match_parent%22%0Aandroid%3Alayout_height%3D%22match_parent%22%0Aandroid%3ApaddingBottom%3D%22%40dimen%2Factivity_vertical_margin%22%0Aandroid%3ApaddingLeft%3D%22%40dimen%2Factivity_horizontal_margin%22%0Aandroid%3ApaddingRight%3D%22%40dimen%2Factivity_horizontal_margin%22%0Aandroid%3ApaddingTop%3D%22%40dimen%2Factivity_vertical_margin%22%0Atools%3Acontext%3D%22com.example.dominik.ledowo.ListaUrzadzen%22%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22Parowanie%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fprzycisk1%22%0Aandroid%3Alayout_alignParentBottom%3D%22true%22%0Aandroid%3Alayout_alignParentStart%3D%22true%22%0Aandroid%3Alayout_alignParentEnd%3D%22true%22%20%2F%3E%0A%3CTextView%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3AtextAppearance%3D%22%3Fandroid%3Aattr%2FtextAppearanceLarge%22%0Aandroid%3Atext%3D%22LISTA%20URZ%C4%84DZE%C5%83%20BLUETOOTH%22%0Aandroid%3Aid%3D%22%40%2Bid%2FtextView%22%0Aandroid%3Alayout_alignParentTop%3D%22true%22%0Aandroid%3Alayout_alignParentStart%3D%22true%22%0Aandroid%3Alayout_alignEnd%3D%22%40%2Bid%2Fprzycisk1%22%20%2F%3E%0A%3CListView%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Aid%3D%22%40%2Bid%2Flista%22%0Aandroid%3Alayout_below%3D%22%40%2Bid%2FtextView%22%0Aandroid%3Alayout_alignParentStart%3D%22true%22%0Aandroid%3Alayout_above%3D%22%40%2Bid%2Fprzycisk1%22%20%2F%3E%0A%3C%2FRelativeLayout%3E” message=”activity_listaurzadzen.xml” highlight=”” provider=”manual”/] Następnie po prawej stronie na naszym drzewku klikamy prawym przyciskiem myszy na layout. Wybieramy New > Layout resource file i wpisujemy kontrola, po czym naciskamy enter. W ten sposob utworzyliśmy wyglad dla naszego drugiego okna, w którym będziemy sterować naszymi ledami za pomocą przycisków. Analogicznie, klikamy dwukrotnie na napisie kontrola.xml i przechodzimy w zakładkę TEXT oraz wklejamy listing drugi

Listing kontrola.xml

[pastacode lang=”markup” manual=”%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3CGridLayout%20xmlns%3Aandroid%3D%22http%3A%2F%2Fschemas.android.com%2Fapk%2Fres%2Fandroid%22%0Aandroid%3Aorientation%3D%22vertical%22%20android%3Alayout_width%3D%22match_parent%22%0Aandroid%3Alayout_height%3D%22match_parent%22%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22LED%201%20W%C5%81%C4%84CZ%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn1%22%20%2F%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22LED%201%20WY%C5%81%C4%84CZ%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn2%22%0Aandroid%3Alayout_row%3D%220%22%0Aandroid%3Alayout_column%3D%221%22%20%2F%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22LED%202%20W%C5%81%C4%84CZ%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn3%22%0Aandroid%3Alayout_row%3D%221%22%0Aandroid%3Alayout_column%3D%220%22%20%2F%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22LED%202%20WY%C5%81%C4%84CZ%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn4%22%0Aandroid%3Alayout_row%3D%221%22%0Aandroid%3Alayout_column%3D%221%22%20%2F%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22110dp%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22FADE%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn5%22%0Aandroid%3Alayout_row%3D%222%22%0Aandroid%3Alayout_column%3D%220%22%20%2F%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22110dp%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22POLICJA%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn6%22%0Aandroid%3Alayout_row%3D%222%22%0Aandroid%3Alayout_column%3D%221%22%20%2F%3E%0A%3CToggleButton%0Aandroid%3Alayout_width%3D%22108dp%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22W%C5%82%C4%85cz%22%0Aandroid%3Aid%3D%22%40%2Bid%2FbtnWL%22%0Aandroid%3Alayout_row%3D%223%22%0Aandroid%3Alayout_column%3D%220%22%0Aandroid%3Achecked%3D%22false%22%20%2F%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22Roz%C5%82%C4%85cz%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn7%22%0Aandroid%3Alayout_row%3D%2225%22%0Aandroid%3Alayout_column%3D%220%22%20%2F%3E%0A%3C%2FGridLayout%3E” message=”kontrola.xml” highlight=”” provider=”manual”/]

Krok 4.
Po ustawieniu wyglądu naszego programu czas na napisanie kilku linijek kodu. Na naszym drzewku przechodzimy java>com.example(naszadomena).ledowo i wybieramy Lista_urzadzen.
Naszym oczom ukaże się trzon naszego programu.

Na samej górze musimy zaimportować rzeczy, które zostaną wykorzystane w naszym programie :

[pastacode lang=”markup” manual=”import%20android.support.v7.app.AppCompatActivity%3B%0Aimport%20android.os.Bundle%3B%0Aimport%20android.view.View%3B%0Aimport%20android.widget.Button%3B%0Aimport%20android.widget.ListView%3B%0Aimport%20java.util.Set%3B%0Aimport%20java.util.ArrayList%3B%0Aimport%20android.widget.Toast%3B%0Aimport%20android.widget.ArrayAdapter%3B%0Aimport%20android.widget.AdapterView%3B%0Aimport%20android.widget.TextView%3B%0Aimport%20android.content.Intent%3B%0Aimport%20android.bluetooth.BluetoothAdapter%3B%0Aimport%20android.bluetooth.BluetoothDevice%3B%0A%0A” message=”” highlight=”” provider=”manual”/]

I tu zaczynamy nasz program właściwy:

a) deklaracja rzeczy z których będziemy korzystać:

[pastacode lang=”markup” manual=”public%20class%20ListaUrzadzen%20extends%20AppCompatActivity%20%7B%0A%0A%2F%2FDeklarujemy%20rzeczy%2C%20z%20kt%C3%B3rych%20b%C4%99dziemy%20korzysta%C4%87%20w%20programie%0AButton%20Parowanie%3B%0AListView%20ListaUrz%3B%0A%0A%2F%2FDeklarujemy%20modu%C5%82%20BT%0Aprivate%20BluetoothAdapter%20mojBT%20%3D%20null%3B%0Aprivate%20Set%3CBluetoothDevice%3E%20sparowaneUrzadzenia%3B%0Apublic%20static%20String%20EXTRA_ADDRESS%20%3D%20%22device_address%22%3B” message=”” highlight=”” provider=”manual”/] b) instrukcja co ma zrobić na początku nasz program – po Override ma utworzyć wygląd:

[pastacode lang=”markup” manual=”%40Override%0Aprotected%20void%20onCreate(Bundle%20savedInstanceState)%20%7B%0Asuper.onCreate(savedInstanceState)%3B%0AsetContentView(R.layout.activity_lista_urzadzen)%3B” message=”” highlight=”” provider=”manual”/] c) wczytanie i przypisanie naszych widgetów ( przyciski, text i listę urzadzen):

[pastacode lang=”markup” manual=”%2F%2FWczytanie%20widget%C3%B3w%20z%20wygl%C4%85du%20i%20przypisanie%0AParowanie%20%3D%20(Button)findViewById(R.id.przycisk1)%3B%0AListaUrz%20%3D%20(ListView)findViewById(R.id.lista)%3B%0A%2F%2FSprawdz%20czy%20urz%C4%85dzenie%20ma%20modu%C5%82%20BT%0AmojBT%20%3D%20BluetoothAdapter.getDefaultAdapter()%3B%0Ad)%20instrukcje%20sprawdzenia%20modu%C5%82u%20BT%20oraz%20pr%C3%B3ba%20sparowania%20z%20naszym%20HC-05%3A%0A%0Aif(mojBT%20%3D%3D%20null)%20%2F%2FJezeli%20nie%20ma%20to%3A%0A%7B%0A%2F%2FPoka%C5%BC%20informacje%2C%20%C5%BCe%20urzadzenie%20nie%20posiada%20modu%C5%82u%20BT%0AToast.makeText(getApplicationContext()%2C%20%22Nie%20widzi%20urz%C4%85dzenia%20BT%22%2C%20Toast.LENGTH_LONG).show()%3B%0A%2F%2F%20i%20zako%C5%84cz%20aplikacj%C4%99%0Afinish()%3B%0A%7D%0Aelse%20if(!mojBT.isEnabled())%20%2F%2F%20Jezeli%20ma%0A%7B%0A%2F%2FZapytaj%20u%C5%BCytkownia%20o%20w%C5%82%C4%85czenie%20modu%C5%82u%20BT%0AIntent%20turnBTon%20%3D%20new%20Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)%3B%0AstartActivityForResult(turnBTon%2C1)%3B%0A%7D%0A%2F%2F%20Parowanie%20urzadzen%0AParowanie.setOnClickListener(new%20View.OnClickListener()%20%7B%0A%40Override%0Apublic%20void%20onClick(View%20v)%0A%7B%0AListaUrzadzenSparowanych()%3B%20%2F%2F%20Odwolaj%20sie%20do%20instrukcji%20ListaUrzadzenSparowanych%0A%7D%0A%7D)%3B%0A%7D” message=”” highlight=”” provider=”manual”/] d) Jeśli wszystko pójdzie ok ma wyświetlić nasze urządzenie na liście:

[pastacode lang=”markup” manual=”%2F%2F%20Wyswietlenie%20urzadzen%20na%20liscie%0Aprivate%20void%20ListaUrzadzenSparowanych()%0A%7B%0AsparowaneUrzadzenia%20%3D%20mojBT.getBondedDevices()%3B%20%2F%2F%20Pokazuje%20wszystkie%20sparowane%20urzadzenia%20BT%0AArrayList%20list%20%3D%20new%20ArrayList()%3B%0Aif%20(sparowaneUrzadzenia.size()%3E0)%0A%7B%0Afor(BluetoothDevice%20bt%20%3A%20sparowaneUrzadzenia)%0A%7B%0Alist.add(bt.getName()%20%2B%20%22%5Cn%22%20%2B%20bt.getAddress())%3B%20%2F%2FNazwa%20i%20adres%20MAC%20urz%C4%85dzenia%0A%7D%0A%7D%0Aelse%0A%7B%0AToast.makeText(getApplicationContext()%2C%20%22Nieznaleziono%20sparowanych%20urzadze%C5%84%22%2C%20Toast.LENGTH_LONG).show()%3B%0A%7D%0Afinal%20ArrayAdapter%20adapter%20%3D%20new%20ArrayAdapter(this%2Candroid.R.layout.simple_list_item_1%2C%20list)%3B%0AListaUrz.setAdapter(adapter)%3B%0AListaUrz.setOnItemClickListener(myListClickListener)%3B%20%2F%2FWywo%C5%82anie%20metody%20po%20nacisnieciu%20elementu%20na%20li%C5%9Bcie%20urzadze%C5%84%0A%7D” message=”” highlight=”” provider=”manual”/] e) co ma zrobić, jeżeli użytkownik naciśnie na listę

[pastacode lang=”markup” manual=”private%20AdapterView.OnItemClickListener%20myListClickListener%20%3D%20new%20AdapterView.OnItemClickListener()%0A%7B%0Apublic%20void%20onItemClick%20(AdapterView%3C%3F%3E%20av%2C%20View%20v%2C%20int%20arg2%2C%20long%20arg3)%0A%7B%0A%2F%2F%20Poka%C5%BC%20MAC%20adres%20urz%C4%85dzenia%20z%20modu%C5%82em%20BT%0AString%20info%20%3D%20((TextView)%20v).getText().toString()%3B%0AString%20address%20%3D%20info.substring(info.length()%20-%2017)%3B%0A%2F%2F%20Otworz%20nowe%20okno%20-%20KontrolaLED%20-%3E%20do%20kontrolowania%20urzadzen%20przez%20BT%20(%20w%20tym%20wypadku%20LED)%0AIntent%20i%20%3D%20new%20Intent(ListaUrzadzen.this%2C%20KontrolaLED.class)%3B%0Ai.putExtra(EXTRA_ADDRESS%2C%20address)%3B%20%2F%2FPrzekazanie%20informacji%20z%20adresem%20MAC%20modulu%20BT%20do%20okna%20KontrolaLED%0AstartActivity(i)%3B%2F%2FRozpoczyna%20dzialanie%20okna%20Kontrola%20LED%0A%7D%0A%7D%3B%0A%7D” message=”” highlight=”” provider=”manual”/]

Krok 5.
Nasza aplikacja jest w stanie się już połączyć z BT i powinna wywalić błąd, ponieważ ostatnia instrukcja odwołuje się do programu kontroli którego jeszcze nie stworzyliśmy. A zatem w miejscu gdzie mamy nasza ListaUrzadzen.java musimy dodać nową klasę KontrolaLED.java.
Dodajemy ją analogicznie jak layout z tą zmianą że robimy to na pliku ListaUrzadzen prawym przyciskiem myszy – New > Java class i podajemy nazwę KontrolaLED i naciskamy ENTER.

Wchodzimy do tego pliku i tak jak wyżej importujemy, deklarujemy i dajemy instrukcje do wykonania:

a)impotujemy:

[pastacode lang=”markup” manual=”import%20android.support.v7.app.ActionBarActivity%3B%0Aimport%20android.os.Bundle%3B%0Aimport%20android.view.Menu%3B%0Aimport%20android.view.MenuItem%3B%0Aimport%20android.bluetooth.BluetoothSocket%3B%0Aimport%20android.content.Intent%3B%0Aimport%20android.view.View%3B%0Aimport%20android.widget.Button%3B%0Aimport%20android.widget.CompoundButton%3B%0Aimport%20android.widget.Toast%3B%0Aimport%20android.app.ProgressDialog%3B%0Aimport%20android.bluetooth.BluetoothAdapter%3B%0Aimport%20android.bluetooth.BluetoothDevice%3B%0Aimport%20android.os.AsyncTask%3B%0Aimport%20android.widget.ToggleButton%3B%0Aimport%20java.io.IOException%3B%0Aimport%20java.util.UUID%3B” message=”” highlight=”” provider=”manual”/] b) deklarujemy z czego będziemy korzystać

[pastacode lang=”markup” manual=”public%20class%20KontrolaLED%20extends%20ActionBarActivity%20%7B%0AButton%20btnOn%2C%20btnOff%2C%20btnDis%2CbtnOn2%2C%20btnOff2%2CbtnFade%2CbtnPolicja%3B%0AToggleButton%20btnWla%3B%0AString%20address%20%3D%20null%3B%0Aprivate%20ProgressDialog%20progress%3B%0ABluetoothAdapter%20myBluetooth%20%3D%20null%3B%0ABluetoothSocket%20btSocket%20%3D%20null%3B%0Aprivate%20boolean%20isBtConnected%20%3D%20false%3B%0A%2F%2FSPP%20UUID.%20Look%20for%20it%0Astatic%20final%20UUID%20myUUID%20%3D%20UUID.fromString(%2200001101-0000-1000-8000-00805F9B34FB%22)%3B” message=”” highlight=”” provider=”manual”/] c) Tworzymy nasz wygląd w oparciu o kontrola.xml

[pastacode lang=”markup” manual=”%40Override%0Aprotected%20void%20onCreate(Bundle%20savedInstanceState)%0A%7B%0Asuper.onCreate(savedInstanceState)%3B%0AsetContentView(R.layout.kontrola)%3B” message=”” highlight=”” provider=”manual”/] d) otrzymnujemy adres naszego BT z poprzedniej części programu ( aby nadal wiedziałz czym jest połączony)

[pastacode lang=”markup” manual=”Intent%20newint%20%3D%20getIntent()%3B%0Aaddress%20%3D%20newint.getStringExtra(ListaUrzadzen.EXTRA_ADDRESS)%3B%20%2F%2FOtrzymanie%20adresu%20z%20Listy%20urzadze%C5%84″ message=”” highlight=”” provider=”manual”/] e) wczytanie i przypisanie naszych widgetów ( przyciski, text i listę urzadzen):

[pastacode lang=”markup” manual=”%2F%2FWywo%C5%82anie%20przycisk%C3%B3w%0AbtnOn%20%3D%20(Button)findViewById(R.id.btn1)%3B%0AbtnOff%20%3D%20(Button)findViewById(R.id.btn2)%3B%0AbtnOn2%20%3D%20(Button)findViewById(R.id.btn3)%3B%0AbtnOff2%20%3D%20(Button)findViewById(R.id.btn4)%3B%0AbtnFade%20%3D%20(Button)findViewById(R.id.btn5)%3B%0AbtnPolicja%20%3D(Button)findViewById(R.id.btn6)%3B%0AbtnDis%20%3D%20(Button)findViewById(R.id.btn7)%3B%0AbtnWla%20%3D%20(ToggleButton)findViewById(R.id.btnWL)%3B%0Anew%20ConnectBT().execute()%3B%20%2F%2FWywo%C5%82anie%20klasy%20od%20po%C5%82%C4%85czenia” message=”” highlight=”” provider=”manual”/] f) Instrukcje do wykonania po nacisnieciu przycisku:

[pastacode lang=”markup” manual=”%2F%2Fkomendy%20kt%C3%B3re%20wysy%C5%82amy%20do%20BT%0AbtnOn.setOnClickListener(new%20View.OnClickListener()%0A%7B%0A%40Override%0Apublic%20void%20onClick(View%20v)%0A%7B%0AturnOnLed()%3B%20%2F%2FW%C5%82%C4%85czanie%20LED%0A%7D%0A%7D)%3B%0AbtnOff.setOnClickListener(new%20View.OnClickListener()%20%7B%0A%40Override%0Apublic%20void%20onClick(View%20v)%0A%7B%0AturnOffLed()%3B%20%2F%2FWy%C5%82%C4%85czanie%20LED%0A%7D%0A%7D)%3B” message=”” highlight=”” provider=”manual”/]

g) Instrukcje zrozumiałem dla naszego arduino co ma zrobić po naciśnięciu danego przycisku
na przykładzie turnOnLed() – Program dostaje sygnał o wciśnięciu następnie wysyła do BT zapytanie o literkę a w arduino – co dla nas oznacza zaświecenia pierwszej diody led na pinie 10.

[pastacode lang=”markup” manual=”private%20void%20turnOnLed()%0A%7B%0Aif%20(btSocket!%3Dnull)%0A%7B%0Atry%0A%7B%0AbtSocket.getOutputStream().write(%22a%22.toString().getBytes())%3B%0A%7D%0Acatch%20(IOException%20e)%0A%7B%0Amsg(%22B%C5%82%C4%85d%22)%3B%0A%7D%0A%7D%0A%7D” message=”” highlight=”” provider=”manual”/] h) a na samym końcu nasze połączenie z BT :

[pastacode lang=”markup” manual=”private%20class%20ConnectBT%20extends%20AsyncTask%3CVoid%2C%20Void%2C%20Void%3E%20%2F%2F%20w%C4%85tek%20UI%0A%7B%0Aprivate%20boolean%20ConnectSuccess%20%3D%20true%3B%20%2F%2Fkiedy%20ju%C5%BC%20jest%20prawie%20pol%C4%85czony%0A%40Override%0Aprotected%20void%20onPreExecute()%0A%7B%0Aprogress%20%3D%20ProgressDialog.show(KontrolaLED.this%2C%20%22%C5%81%C4%85czenie…%22%2C%20%22Prosz%C4%99%20czeka%C4%87!!!%22)%3B%20%2F%2Fpoka%C5%BC%20motyw%20%C5%82adowania%0A%7D%0A%40Override%0Aprotected%20Void%20doInBackground(Void…%20devices)%20%2F%2Fkiedy%20pokazuje%20%C5%82%C4%85dowanie%2C%20w%20tle%20%C5%82%C4%85czy%20si%C4%99%20nasze%20BT%0A%7B%0Atry%0A%7B%0Aif%20(btSocket%20%3D%3D%20null%20%7C%7C%20!isBtConnected)%0A%7B%0AmyBluetooth%20%3D%20BluetoothAdapter.getDefaultAdapter()%3B%2F%2F%20polacz%20z%20modulem%20BT%0ABluetoothDevice%20dispositivo%20%3D%20myBluetooth.getRemoteDevice(address)%3B%2F%2FSprawdzenie%20adresu%20BT%0AbtSocket%20%3D%20dispositivo.createInsecureRfcommSocketToServiceRecord(myUUID)%3B%2F%2FTworzenie%20polaczenia%20po%20sprawdzeniu%20adresu%20UUID%0ABluetoothAdapter.getDefaultAdapter().cancelDiscovery()%3B%0AbtSocket.connect()%3B%2F%2Fzaczyna%20polaczenie%0A%7D%0A%7D%0Acatch%20(IOException%20e)%0A%7B%0AConnectSuccess%20%3D%20false%3B%2F%2Fjezeli%20si%C4%99%20nie%20po%C5%82aczy%20wy%C5%9Bwietli%20b%C5%82%C4%85d%0A%7D%0Areturn%20null%3B%0A%7D%0A%40Override%0Aprotected%20void%20onPostExecute(Void%20result)%20%2F%2Fsprawdza%20czy%20napewno%20jest%20polaczony%0A%7B%0Asuper.onPostExecute(result)%3B%0Aif%20(!ConnectSuccess)%0A%7B%0Amsg(%22B%C5%82%C4%85d%20po%C5%82%C4%85czenia%2C%20spr%C3%B3buj%20jeszcze%20raz…%22)%3B%0Afinish()%3B%0A%7D%0Aelse%0A%7B%0Amsg(%22Po%C5%82%C4%85czono.%22)%3B%0AisBtConnected%20%3D%20true%3B%0A%7D%0Aprogress.dismiss()%3B%0A%7D%0A%7D%0A%7D%0A%0A” message=”” highlight=”” provider=”manual”/] Jeżeli wszystko napiszemy/ skopiujemy poprawnie mozemy nacisnac przycisk play na samej górze i odpalić nasz program na maszynie wirtualnej, urzadzeniu w sesji ADB lub Make app i skopiować go na nasze urządzenie z androidem i sprawdzić działanie.
Listingi po kolei w całości

Listing activity_lista_urzadzen.xml

[pastacode lang=”markup” manual=”%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3CRelativeLayout%20xmlns%3Aandroid%3D%22http%3A%2F%2Fschemas.android.com%2Fapk%2Fres%2Fandroid%22%0Axmlns%3Atools%3D%22http%3A%2F%2Fschemas.android.com%2Ftools%22%0Aandroid%3Alayout_width%3D%22match_parent%22%0Aandroid%3Alayout_height%3D%22match_parent%22%0Aandroid%3ApaddingBottom%3D%22%40dimen%2Factivity_vertical_margin%22%0Aandroid%3ApaddingLeft%3D%22%40dimen%2Factivity_horizontal_margin%22%0Aandroid%3ApaddingRight%3D%22%40dimen%2Factivity_horizontal_margin%22%0Aandroid%3ApaddingTop%3D%22%40dimen%2Factivity_vertical_margin%22%0Atools%3Acontext%3D%22com.example.dominik.ledowo.ListaUrzadzen%22%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22Parowanie%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fprzycisk1%22%0Aandroid%3Alayout_alignParentBottom%3D%22true%22%0Aandroid%3Alayout_alignParentStart%3D%22true%22%0Aandroid%3Alayout_alignParentEnd%3D%22true%22%20%2F%3E%0A%3CTextView%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3AtextAppearance%3D%22%3Fandroid%3Aattr%2FtextAppearanceLarge%22%0Aandroid%3Atext%3D%22LISTA%20URZ%C4%84DZE%C5%83%20BLUETOOTH%22%0Aandroid%3Aid%3D%22%40%2Bid%2FtextView%22%0Aandroid%3Alayout_alignParentTop%3D%22true%22%0Aandroid%3Alayout_alignParentStart%3D%22true%22%0Aandroid%3Alayout_alignEnd%3D%22%40%2Bid%2Fprzycisk1%22%20%2F%3E%0A%3CListView%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Aid%3D%22%40%2Bid%2Flista%22%0Aandroid%3Alayout_below%3D%22%40%2Bid%2FtextView%22%0Aandroid%3Alayout_alignParentStart%3D%22true%22%0Aandroid%3Alayout_above%3D%22%40%2Bid%2Fprzycisk1%22%20%2F%3E%0A%3C%2FRelativeLayout%3E” message=”activity_lista_urzadzen” highlight=”” provider=”manual”/]

Listing kontrola.xml

[pastacode lang=”markup” manual=”%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3CGridLayout%20xmlns%3Aandroid%3D%22http%3A%2F%2Fschemas.android.com%2Fapk%2Fres%2Fandroid%22%0Aandroid%3Aorientation%3D%22vertical%22%20android%3Alayout_width%3D%22match_parent%22%0Aandroid%3Alayout_height%3D%22match_parent%22%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22LED%201%20W%C5%81%C4%84CZ%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn1%22%20%2F%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22LED%201%20WY%C5%81%C4%84CZ%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn2%22%0Aandroid%3Alayout_row%3D%220%22%0Aandroid%3Alayout_column%3D%221%22%20%2F%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22LED%202%20W%C5%81%C4%84CZ%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn3%22%0Aandroid%3Alayout_row%3D%221%22%0Aandroid%3Alayout_column%3D%220%22%20%2F%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22LED%202%20WY%C5%81%C4%84CZ%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn4%22%0Aandroid%3Alayout_row%3D%221%22%0Aandroid%3Alayout_column%3D%221%22%20%2F%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22110dp%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22FADE%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn5%22%0Aandroid%3Alayout_row%3D%222%22%0Aandroid%3Alayout_column%3D%220%22%20%2F%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22110dp%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22POLICJA%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn6%22%0Aandroid%3Alayout_row%3D%222%22%0Aandroid%3Alayout_column%3D%221%22%20%2F%3E%0A%3CToggleButton%0Aandroid%3Alayout_width%3D%22108dp%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22W%C5%82%C4%85cz%22%0Aandroid%3Aid%3D%22%40%2Bid%2FbtnWL%22%0Aandroid%3Alayout_row%3D%223%22%0Aandroid%3Alayout_column%3D%220%22%0Aandroid%3Achecked%3D%22false%22%20%2F%3E%0A%3CButton%0Aandroid%3Alayout_width%3D%22wrap_content%22%0Aandroid%3Alayout_height%3D%22wrap_content%22%0Aandroid%3Atext%3D%22Roz%C5%82%C4%85cz%22%0Aandroid%3Aid%3D%22%40%2Bid%2Fbtn7%22%0Aandroid%3Alayout_row%3D%2225%22%0Aandroid%3Alayout_column%3D%220%22%20%2F%3E%0A%3C%2FGridLayout%3E” message=”kontrola.xml” highlight=”” provider=”manual”/] Listing ListaUrzadzen.java

[pastacode lang=”markup” manual=”import%20android.support.v7.app.AppCompatActivity%3B%0Aimport%20android.os.Bundle%3B%0Aimport%20android.view.View%3B%0Aimport%20android.widget.Button%3B%0Aimport%20android.widget.ListView%3B%0Aimport%20java.util.Set%3B%0Aimport%20java.util.ArrayList%3B%0Aimport%20android.widget.Toast%3B%0Aimport%20android.widget.ArrayAdapter%3B%0Aimport%20android.widget.AdapterView%3B%0Aimport%20android.widget.TextView%3B%0Aimport%20android.content.Intent%3B%0Aimport%20android.bluetooth.BluetoothAdapter%3B%0Aimport%20android.bluetooth.BluetoothDevice%3B%0Apublic%20class%20ListaUrzadzen%20extends%20AppCompatActivity%20%7B%0A%2F%2FDeklarujemy%20rzeczy%2C%20z%20kt%C3%B3rych%20b%C4%99dziemy%20korzysta%C4%87%20w%20programie%0AButton%20Parowanie%3B%0AListView%20ListaUrz%3B%0A%2F%2FDeklarujemy%20modu%C5%82%20BT%0Aprivate%20BluetoothAdapter%20mojBT%20%3D%20null%3B%0Aprivate%20Set%3CBluetoothDevice%3E%20sparowaneUrzadzenia%3B%0Apublic%20static%20String%20EXTRA_ADDRESS%20%3D%20%22device_address%22%3B%0A%40Override%0Aprotected%20void%20onCreate(Bundle%20savedInstanceState)%20%7B%0Asuper.onCreate(savedInstanceState)%3B%0AsetContentView(R.layout.activity_lista_urzadzen)%3B%0A%2F%2FWczytanie%20widget%C3%B3w%20z%20wygl%C4%85du%20i%20przypisanie%0AParowanie%20%3D%20(Button)findViewById(R.id.przycisk1)%3B%0AListaUrz%20%3D%20(ListView)findViewById(R.id.lista)%3B%0A%2F%2FSprawdz%20czy%20urz%C4%85dzenie%20ma%20modu%C5%82%20BT%0AmojBT%20%3D%20BluetoothAdapter.getDefaultAdapter()%3B%0Aif(mojBT%20%3D%3D%20null)%20%2F%2FJezeli%20nie%20ma%20to%3A%0A%7B%0A%2F%2FPoka%C5%BC%20informacje%2C%20%C5%BCe%20urzadzenie%20nie%20posiada%20modu%C5%82u%20BT%0AToast.makeText(getApplicationContext()%2C%20%22Nie%20widzi%20urz%C4%85dzenia%20BT%22%2C%20Toast.LENGTH_LONG).show()%3B%0A%2F%2F%20i%20zako%C5%84cz%20aplikacj%C4%99%0Afinish()%3B%0A%7D%0Aelse%20if(!mojBT.isEnabled())%20%2F%2F%20Jezeli%20ma%0A%7B%0A%2F%2FZapytaj%20u%C5%BCytkownia%20o%20w%C5%82%C4%85czenie%20modu%C5%82u%20BT%0AIntent%20turnBTon%20%3D%20new%20Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)%3B%0AstartActivityForResult(turnBTon%2C1)%3B%0A%7D%0A%2F%2F%20Parowanie%20urzadzen%0AParowanie.setOnClickListener(new%20View.OnClickListener()%20%7B%0A%40Override%0Apublic%20void%20onClick(View%20v)%0A%7B%0AListaUrzadzenSparowanych()%3B%20%2F%2F%20Odwolaj%20sie%20do%20instrukcji%20ListaUrzadzenSparowanych%0A%7D%0A%7D)%3B%0A%7D%0A%2F%2F%20Wyswietlenie%20urzadzen%20na%20liscie%0Aprivate%20void%20ListaUrzadzenSparowanych()%0A%7B%0AsparowaneUrzadzenia%20%3D%20mojBT.getBondedDevices()%3B%20%2F%2F%20Pokazuje%20wszystkie%20sparowane%20urzadzenia%20BT%0AArrayList%20list%20%3D%20new%20ArrayList()%3B%0Aif%20(sparowaneUrzadzenia.size()%3E0)%0A%7B%0Afor(BluetoothDevice%20bt%20%3A%20sparowaneUrzadzenia)%0A%7B%0Alist.add(bt.getName()%20%2B%20%22%5Cn%22%20%2B%20bt.getAddress())%3B%20%2F%2FNsazwa%20i%20adres%20MAC%20urzadzenia%0A%7D%0A%7D%0Aelse%0A%7B%0AToast.makeText(getApplicationContext()%2C%20%22Nieznaleziono%20sparowanych%20urzadze%C5%84%22%2C%20Toast.LENGTH_LONG).show()%3B%0A%7D%0Afinal%20ArrayAdapter%20adapter%20%3D%20new%20ArrayAdapter(this%2Candroid.R.layout.simple_list_item_1%2C%20list)%3B%0AListaUrz.setAdapter(adapter)%3B%0AListaUrz.setOnItemClickListener(myListClickListener)%3B%20%2F%2FWywo%C5%82anie%20metody%20po%20nacisnieciu%20elementu%20na%20li%C5%9Bcie%20urzadze%C5%84%0A%7D%0Aprivate%20AdapterView.OnItemClickListener%20myListClickListener%20%3D%20new%20AdapterView.OnItemClickListener()%0A%7B%0Apublic%20void%20onItemClick%20(AdapterView%3C%3F%3E%20av%2C%20View%20v%2C%20int%20arg2%2C%20long%20arg3)%0A%7B%0A%2F%2F%20Poka%C5%BC%20MAC%20adres%20urz%C4%85dzenia%20z%20modu%C5%82em%20BT%0AString%20info%20%3D%20((TextView)%20v).getText().toString()%3B%0AString%20address%20%3D%20info.substring(info.length()%20-%2017)%3B%0A%2F%2F%20Otworz%20nowe%20okno%20-%20KontrolaLED%20-%3E%20do%20kontrolowania%20urzadzen%20przez%20BT%20(%20w%20tym%20wypadku%20LED)%0AIntent%20i%20%3D%20new%20Intent(ListaUrzadzen.this%2C%20KontrolaLED.class)%3B%0Ai.putExtra(EXTRA_ADDRESS%2C%20address)%3B%20%2F%2FPrzekazanie%20informacji%20z%20adresem%20MAC%20modulu%20BT%20do%20okna%20KontrolaLED%0AstartActivity(i)%3B%2F%2FRozpoczyna%20dzialanie%20okna%20Kontrola%20LED%0A%7D%0A%7D%3B%0A%7D” message=”ListaUrzadzen.java” highlight=”” provider=”manual”/] Listing KontrolaLED.java

[pastacode lang=”markup” manual=”package%20com.example.dominik.ledowo%3B%0Aimport%20android.support.v7.app.ActionBarActivity%3B%0Aimport%20android.os.Bundle%3B%0Aimport%20android.view.Menu%3B%0Aimport%20android.view.MenuItem%3B%0Aimport%20android.bluetooth.BluetoothSocket%3B%0Aimport%20android.content.Intent%3B%0Aimport%20android.view.View%3B%0Aimport%20android.widget.Button%3B%0Aimport%20android.widget.CompoundButton%3B%0Aimport%20android.widget.Toast%3B%0Aimport%20android.app.ProgressDialog%3B%0Aimport%20android.bluetooth.BluetoothAdapter%3B%0Aimport%20android.bluetooth.BluetoothDevice%3B%0Aimport%20android.os.AsyncTask%3B%0Aimport%20android.widget.ToggleButton%3B%0Aimport%20java.io.IOException%3B%0Aimport%20java.util.UUID%3B%0Apublic%20class%20KontrolaLED%20extends%20ActionBarActivity%20%7B%0AButton%20btnOn%2C%20btnOff%2C%20btnDis%2CbtnOn2%2C%20btnOff2%2CbtnFade%2CbtnPolicja%3B%0AToggleButton%20btnWla%3B%0AString%20address%20%3D%20null%3B%0Aprivate%20ProgressDialog%20progress%3B%0ABluetoothAdapter%20myBluetooth%20%3D%20null%3B%0ABluetoothSocket%20btSocket%20%3D%20null%3B%0Aprivate%20boolean%20isBtConnected%20%3D%20false%3B%0A%2F%2FSPP%20UUID.%20Look%20for%20it%0Astatic%20final%20UUID%20myUUID%20%3D%20UUID.fromString(%2200001101-0000-1000-8000-00805F9B34FB%22)%3B%0A%40Override%0Aprotected%20void%20onCreate(Bundle%20savedInstanceState)%0A%7B%0Asuper.onCreate(savedInstanceState)%3B%0A%2F%2Fwidok%20wygladu%20KontrolaLED%0AsetContentView(R.layout.kontrola)%3B%0AIntent%20newint%20%3D%20getIntent()%3B%0Aaddress%20%3D%20newint.getStringExtra(ListaUrzadzen.EXTRA_ADDRESS)%3B%20%2F%2FOtrzymanie%20adresu%20z%20Listy%20urzadze%C5%84%0A%2F%2FWywo%C5%82anie%20przycisk%C3%B3w%0AbtnOn%20%3D%20(Button)findViewById(R.id.btn1)%3B%0AbtnOff%20%3D%20(Button)findViewById(R.id.btn2)%3B%0AbtnOn2%20%3D%20(Button)findViewById(R.id.btn3)%3B%0AbtnOff2%20%3D%20(Button)findViewById(R.id.btn4)%3B%0AbtnFade%20%3D%20(Button)findViewById(R.id.btn5)%3B%0AbtnPolicja%20%3D(Button)findViewById(R.id.btn6)%3B%0AbtnDis%20%3D%20(Button)findViewById(R.id.btn7)%3B%0AbtnWla%20%3D%20(ToggleButton)findViewById(R.id.btnWL)%3B%0Anew%20ConnectBT().execute()%3B%20%2F%2FWywo%C5%82anie%20klasy%20od%20po%C5%82%C4%85czenia%0AToggleButton%20toggle%20%3D%20(ToggleButton)%20findViewById(R.id.btnWL)%3B%0Atoggle.setOnCheckedChangeListener(new%20CompoundButton.OnCheckedChangeListener()%20%7B%0Apublic%20void%20onCheckedChanged(CompoundButton%20buttonView%2C%20boolean%20isChecked)%20%7B%0Aif%20(isChecked)%20%7B%0AturnOnLed()%3B%0A%7D%20else%20%7B%0AturnOffLed()%3B%0A%7D%0A%7D%0A%7D)%3B%0A%2F%2Fkomendy%20kt%C3%B3re%20wysy%C5%82amy%20do%20BT%0AbtnOn.setOnClickListener(new%20View.OnClickListener()%0A%7B%0A%40Override%0Apublic%20void%20onClick(View%20v)%0A%7B%0AturnOnLed()%3B%20%2F%2FW%C5%82%C4%85czanie%20LED%0A%7D%0A%7D)%3B%0AbtnOff.setOnClickListener(new%20View.OnClickListener()%20%7B%0A%40Override%0Apublic%20void%20onClick(View%20v)%0A%7B%0AturnOffLed()%3B%20%2F%2FWy%C5%82%C4%85czanie%20LED%0A%7D%0A%7D)%3B%0AbtnOn2.setOnClickListener(new%20View.OnClickListener()%0A%7B%0A%40Override%0Apublic%20void%20onClick(View%20v)%0A%7B%0AturnOnLed2()%3B%20%2F%2Fw%C5%82%C4%85czanie%20LED%0A%7D%0A%7D)%3B%0AbtnOff2.setOnClickListener(new%20View.OnClickListener()%20%7B%0A%40Override%0Apublic%20void%20onClick(View%20v)%0A%7B%0AturnOffLed2()%3B%20%2F%2FWy%C5%82%C4%85czanie%20LED%0A%7D%0A%7D)%3B%0AbtnOff2.setOnClickListener(new%20View.OnClickListener()%20%7B%0A%40Override%0Apublic%20void%20onClick(View%20v)%0A%7B%0AturnOffLed2()%3B%20%2F%2FWy%C5%82%C4%85czanie%20LED%0A%7D%0A%7D)%3B%0AbtnFade.setOnClickListener(new%20View.OnClickListener()%20%7B%0A%40Override%0Apublic%20void%20onClick(View%20v)%0A%7B%0Afade()%3B%20%2F%2F%20Przenikanie%0A%7D%0A%7D)%3B%0AbtnPolicja.setOnClickListener(new%20View.OnClickListener()%20%7B%0A%40Override%0Apublic%20void%20onClick(View%20v)%0A%7B%0Abagiety()%3B%20%2F%2F%20sygnal%0A%7D%0A%7D)%3B%0AbtnDis.setOnClickListener(new%20View.OnClickListener()%0A%7B%0A%40Override%0Apublic%20void%20onClick(View%20v)%0A%7B%0ADisconnect()%3B%20%2F%2FRoz%C5%82%C4%85czenie%0A%7D%0A%7D)%3B%0A%7D%0Aprivate%20void%20Disconnect()%0A%7B%0Aif%20(btSocket!%3Dnull)%20%2F%2FJe%C5%BCeli%20port%20jest%20zaj%C4%99ty%0A%7B%0Atry%0A%7B%0AbtSocket.close()%3B%20%2F%2Fzakmnij%20po%C5%82%C4%85czenie%0A%7D%0Acatch%20(IOException%20e)%0A%7B%20msg(%22B%C5%82%C4%85d%22)%3B%7D%0A%7D%0Afinish()%3B%20%2F%2FWr%C3%B3%C4%87%20do%201%20okna%20-%20Lista%20Urzadze%C5%84%0A%7D%0Aprivate%20void%20turnOnLed()%0A%7B%0Aif%20(btSocket!%3Dnull)%0A%7B%0Atry%0A%7B%0AbtSocket.getOutputStream().write(%22a%22.toString().getBytes())%3B%0A%7D%0Acatch%20(IOException%20e)%0A%7B%0Amsg(%22B%C5%82%C4%85d%22)%3B%0A%7D%0A%7D%0A%7D%0Aprivate%20void%20turnOffLed()%20%2F%2F%20tu%20wklepujemy%20instrukcje%20jakie%20beda%20wywo%C5%82ywane%20w%20polaczeniu%20z%20arduino%0A%7B%0Aif%20(btSocket!%3Dnull)%0A%7B%0Atry%0A%7B%0AbtSocket.getOutputStream().write(%22b%22.toString().getBytes())%3B%0A%7D%0Acatch%20(IOException%20e)%0A%7B%0Amsg(%22B%C5%82%C4%85d%22)%3B%0A%7D%0A%7D%0A%7D%0Aprivate%20void%20turnOnLed2()%0A%7B%0Aif%20(btSocket!%3Dnull)%0A%7B%0Atry%0A%7B%0AbtSocket.getOutputStream().write(%22c%22.toString().getBytes())%3B%0A%7D%0Acatch%20(IOException%20e)%0A%7B%0Amsg(%22B%C5%82%C4%85d%22)%3B%0A%7D%0A%7D%0A%7D%0Aprivate%20void%20turnOffLed2()%0A%7B%0Aif%20(btSocket!%3Dnull)%0A%7B%0Atry%0A%7B%0AbtSocket.getOutputStream().write(%22d%22.toString().getBytes())%3B%0A%7D%0Acatch%20(IOException%20e)%0A%7B%0Amsg(%22B%C5%82%C4%85d%22)%3B%0A%7D%0A%7D%0A%7D%0Aprivate%20void%20fade()%0A%7B%0Aif%20(btSocket!%3Dnull)%0A%7B%0Atry%0A%7B%0AbtSocket.getOutputStream().write(%22f%22.toString().getBytes())%3B%0A%7D%0Acatch%20(IOException%20e)%0A%7B%0Amsg(%22B%C5%82%C4%85d%22)%3B%0A%7D%0A%7D%0A%7D%0Aprivate%20void%20bagiety()%0A%7B%0Aif%20(btSocket!%3Dnull)%0A%7B%0Atry%0A%7B%0AbtSocket.getOutputStream().write(%22x%22.toString().getBytes())%3B%0A%7D%0Acatch%20(IOException%20e)%0A%7B%0Amsg(%22B%C5%82%C4%85d%22)%3B%0A%7D%0A%7D%0A%7D%0Aprivate%20void%20msg(String%20s)%0A%7B%0AToast.makeText(getApplicationContext()%2Cs%2CToast.LENGTH_LONG).show()%3B%0A%7D%0A%40Override%0Apublic%20boolean%20onCreateOptionsMenu(Menu%20menu)%20%7B%0A%2F%2F%20Inflate%20the%20menu%3B%20this%20adds%20items%20to%20the%20action%20bar%20if%20it%20is%20present.%0Areturn%20true%3B%0A%7D%0A%40Override%0Apublic%20boolean%20onOptionsItemSelected(MenuItem%20item)%20%7B%0A%2F%2F%20Handle%20action%20bar%20item%20clicks%20here.%20The%20action%20bar%20will%0A%2F%2F%20automatically%20handle%20clicks%20on%20the%20Home%2FUp%20button%2C%20so%20long%0A%2F%2F%20as%20you%20specify%20a%20parent%20activity%20in%20AndroidManifest.xml.%0Aint%20id%20%3D%20item.getItemId()%3B%0A%2F%2Fnoinspection%20SimplifiableIfStatement%0A%0Areturn%20super.onOptionsItemSelected(item)%3B%0A%7D%0Aprivate%20class%20ConnectBT%20extends%20AsyncTask%3CVoid%2C%20Void%2C%20Void%3E%20%2F%2F%20w%C4%85tek%20UI%0A%7B%0Aprivate%20boolean%20ConnectSuccess%20%3D%20true%3B%20%2F%2Fkiedy%20ju%C5%BC%20jest%20prawie%20pol%C4%85czony%0A%40Override%0Aprotected%20void%20onPreExecute()%0A%7B%0Aprogress%20%3D%20ProgressDialog.show(KontrolaLED.this%2C%20%22%C5%81%C4%85czenie…%22%2C%20%22Prosz%C4%99%20czeka%C4%87!!!%22)%3B%20%2F%2Fpoka%C5%BC%20motyw%20%C5%82adowania%0A%7D%0A%40Override%0Aprotected%20Void%20doInBackground(Void…%20devices)%20%2F%2Fkiedy%20pokazuje%20%C5%82%C4%85dowanie%2C%20w%20tle%20%C5%82%C4%85czy%20si%C4%99%20nasze%20BT%0A%7B%0Atry%0A%7B%0Aif%20(btSocket%20%3D%3D%20null%20%7C%7C%20!isBtConnected)%0A%7B%0AmyBluetooth%20%3D%20BluetoothAdapter.getDefaultAdapter()%3B%2F%2F%20polacz%20z%20modulem%20BT%0ABluetoothDevice%20dispositivo%20%3D%20myBluetooth.getRemoteDevice(address)%3B%2F%2FSprawdzenie%20adresu%20BT%0AbtSocket%20%3D%20dispositivo.createInsecureRfcommSocketToServiceRecord(myUUID)%3B%2F%2FTworzenie%20polaczenia%20po%20sprawdzeniu%20adresu%20UUID%0ABluetoothAdapter.getDefaultAdapter().cancelDiscovery()%3B%0AbtSocket.connect()%3B%2F%2Fzaczyna%20polaczenie%0A%7D%0A%7D%0Acatch%20(IOException%20e)%0A%7B%0AConnectSuccess%20%3D%20false%3B%2F%2Fjezeli%20si%C4%99%20nie%20po%C5%82aczy%20wy%C5%9Bwietli%20b%C5%82%C4%85d%0A%7D%0Areturn%20null%3B%0A%7D%0A%40Override%0Aprotected%20void%20onPostExecute(Void%20result)%20%2F%2Fsprawdza%20czy%20napewno%20jest%20polaczony%0A%7B%0Asuper.onPostExecute(result)%3B%0Aif%20(!ConnectSuccess)%0A%7B%0Amsg(%22B%C5%82%C4%85d%20po%C5%82%C4%85czenia%2C%20spr%C3%B3buj%20jeszcze%20raz…%22)%3B%0Afinish()%3B%0A%7D%0Aelse%0A%7B%0Amsg(%22Po%C5%82%C4%85czono.%22)%3B%0AisBtConnected%20%3D%20true%3B%0A%7D%0Aprogress.dismiss()%3B%0A%7D%0A%7D%0A%7D” message=”KontrolaLED.java” highlight=”” provider=”manual”/]

I należy jeszcze dodać w pliku manifestu ( nasze drzewko) App>manifests> AndroidManifest.xml linijki o dostępie programu do modulu BT na naszym urzadzeniu:

[pastacode lang=”markup” manual=”%3Cuses-permission%20android%3Aname%3D%22android.permission.BLUETOOTH_ADMIN%22%2F%3E%0A%3Cuses-permission%20android%3Aname%3D%22android.permission.BLUETOOTH%22%2F%3E” message=”” highlight=”” provider=”manual”/]

Listing AndroidManifest.xml

[pastacode lang=”markup” manual=”%3Cuses-permission%20android%3Aname%3D%22android.permission.BLUETOOTH_ADMIN%22%2F%3E%0A%3Cuses-permission%20android%3Aname%3D%22android.permission.BLUETOOTH%22%2F%3E%0A%3Capplication%0Aandroid%3AallowBackup%3D%22true%22%0Aandroid%3Aicon%3D%22%40mipmap%2Fic_launcher%22%0Aandroid%3Alabel%3D%22%40string%2Fapp_name%22%0Aandroid%3Atheme%3D%22%40style%2FAppTheme%22%20%3E%0A%3Cactivity%0Aandroid%3Aname%3D%22.ListaUrzadzen%22%0Aandroid%3Alabel%3D%22%40string%2Fapp_name%22%20%3E%0A%3Cintent-filter%3E%0A%3Caction%20android%3Aname%3D%22android.intent.action.MAIN%22%20%2F%3E%0A%3Ccategory%20android%3Aname%3D%22android.intent.category.LAUNCHER%22%20%2F%3E%0A%3C%2Fintent-filter%3E%0A%3C%2Factivity%3E%0A%3Cactivity%0Aandroid%3Aname%3D%22.KontrolaLED%22%0Aandroid%3Alabel%3D%22Panel%20kontrolny%22%20%3E%0A%3C%2Factivity%3E%0A%3C%2Fapplication%3E” message=”AndroidManifest.xml” highlight=”” provider=”manual”/]

 

Dla Learnduino Dominik Kulesza

 

Jeżeli masz trudności napisz w komentarzu lub zapraszam na FB na nasz fanpage. Learduino.

Poprzednia informacja Wyświetlacze alfanumeryczne do Arduino
Kolejna informacja Programowanie - kurs dla początkujących

Brak komentarzy

Zostaw odpowiedź

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *