Korisnički alati

Site alati


2018:karlo_siladi:projektni_zadatak

Razlike

Slijede razlike između dviju inačica stranice

Poveznica na ovu usporedbu

Starije izmjene na obje strane Starija izmjena
Novija izmjena
Starija izmjena
Novija izmjena Novije izmjene na obje strane
2018:karlo_siladi:projektni_zadatak [2018/05/21 22:57]
ksiladi [= mp3 modul DFPlayer YX5200]
2018:karlo_siladi:projektni_zadatak [2018/06/14 00:54]
ksiladi kod android aplikacije
Redak 14: Redak 14:
   * <font 14px/​Arial,​Helvetica,​sans-serif;;#​333333;;​white>​Očitavati RFID oznake na proizvodima i policama.</​font>​   * <font 14px/​Arial,​Helvetica,​sans-serif;;#​333333;;​white>​Očitavati RFID oznake na proizvodima i policama.</​font>​
   * <font 14px/​Arial,​Helvetica,​sans-serif;;#​333333;;​white>​Sustav vraća glasovne upute koje sadrže lokaciju i informacije o proizvodu.</​font>​   * <font 14px/​Arial,​Helvetica,​sans-serif;;#​333333;;​white>​Sustav vraća glasovne upute koje sadrže lokaciju i informacije o proizvodu.</​font>​
-  * <font 14px/​Arial,​Helvetica,​sans-serif;;#​333333;;​white>​Povezati sustav s Android aplikacijom ​Bluetoothom V06.</​font>​+  * <font 14px/​Arial,​Helvetica,​sans-serif;;#​333333;;​white>​Povezati sustav s Android aplikacijom ​Bluetooth modulom HC-06.</​font>​
   * <font 14px/​Arial,​Helvetica,​sans-serif;;#​333333;;​white>​Unos glasovnih naredbi, prikaz cijene i proizvođača.</​font>​   * <font 14px/​Arial,​Helvetica,​sans-serif;;#​333333;;​white>​Unos glasovnih naredbi, prikaz cijene i proizvođača.</​font>​
  
Redak 35: Redak 35:
 <font 14px/​Calibri,​sans-serif;;​inherit;;​inherit>​Glasnoća zvučnih zapisa može oštetiti sluh.</​font>​ <font 14px/​Calibri,​sans-serif;;​inherit;;​inherit>​Glasnoća zvučnih zapisa može oštetiti sluh.</​font>​
  
-====== ​Projektiranje sustava ​======+====== ​Ciljana skupina ​======
  
 +Provedeno je malo istraživanje potencijalnih korisnika našeg sustava.
 +
 +Prema podacima iz izvješća o osobama s invaliditetom u Hrvatskoj 2016. godine od oštećenja vida pati 17 377 ljudi, odnosno svaki 250. stanovnik Hrvatske od čega je 3326 osoba slijepo na oba oka. Prezbiopija ili starosna dalekovidnost dio je prirodnog procesa starenja oka. Počinje se javljati u ranim četrdesetim godinama. Prema popisu stanovništva iz 2011. godine je u Hrvatskoj bilo 4 284 889 stanovnika od čega čak 2 258 187 stariji od 40 godina što čini 52.7% stanovništva koji podliježu starosnoj dalekovidnosti. Upravo osobe koje imaju problema s vidom prilikom svakodnevne kupovine u dućanima teško ili nikako ne mogu pročitati cijenu proizvoda, informacije s deklaracije ili čak prepoznati o kojem se proizvodu radi. Cilj ovog projekta je projektirati sustav koji će slijepim, slabovidnim te osobama sa slabijim vidom pomoći prilikom kupovine. Ideja je da se na police gdje se sada nalaze papirići s cijenama i barkodovima doda RFID (Radio-frequency identification) oznaka koja sadrži jedinstveni broj proizvoda. Uređajem koji je projektiran moguće je takvu oznaku očitati nakon čega se na slušalice reproducira glasovna poruka koja sadrži osnovne informacije o proizvodu te lokaciju proizvoda. Uređaj se može bluetooth komunikacijom spojiti s pametnim telefonom pa se glasovna poruka reproducira i na njemu te se preko cijelog zaslona velikim fontom ispisuju osnovne informacije o proizvodu i cijena. Iz ranije navedenih podatak vidi se da je broj potencijalnih korisnika velik, a važno je naglasiti da sustav mogu koristi svi.
 +
 +====== Projektiranje sustava ======
  
-====   ​Ideja   ​====+==== Ideja ====
  
 Svaki proizvod i police imaju jedinstvene RFID pasivne oznake. Prilikom očitavanja RFID oznake na proizvodu uređaj započne reprodukciju glasovne poruke koja sadrži lokaciju proizvoda, ime proizvoda, ime proizvođača te cijenu samog proizvoda. Prilikom očitavanja RFID oznake na polici uređaj započne reprodukciju glasovne poruke koja sadrži lokaciju odnosno redni broj police. Svaki proizvod je jedinstven pa tako ima i jedinstven RFID identifikacijski broj zapisan na RFID oznaci. Uređaj ima mogućnost spajanja sa pametnim telefonom ili tabletom pomoću Android aplikacije. Prilikom očitanja RFID oznake prozivoda na zaslonu mobilnog uređaja se velikim fontom prikaže cijena proizvoda. Svaki proizvod i police imaju jedinstvene RFID pasivne oznake. Prilikom očitavanja RFID oznake na proizvodu uređaj započne reprodukciju glasovne poruke koja sadrži lokaciju proizvoda, ime proizvoda, ime proizvođača te cijenu samog proizvoda. Prilikom očitavanja RFID oznake na polici uređaj započne reprodukciju glasovne poruke koja sadrži lokaciju odnosno redni broj police. Svaki proizvod je jedinstven pa tako ima i jedinstven RFID identifikacijski broj zapisan na RFID oznaci. Uređaj ima mogućnost spajanja sa pametnim telefonom ili tabletom pomoću Android aplikacije. Prilikom očitanja RFID oznake prozivoda na zaslonu mobilnog uređaja se velikim fontom prikaže cijena proizvoda.
Redak 57: Redak 62:
 {{:​2018:​karlo_siladi:​uno_specifications.png?​nolink&​436x500|Arduino Uno specifications}} {{:​2018:​karlo_siladi:​uno_specifications.png?​nolink&​436x500|Arduino Uno specifications}}
  
-U našem sustavu Arduino Uno je centralna jedinica koja je zadužena za komunikaciju s ostalim podsustavima.+U našem sustavu Arduino Uno je centralna jedinica koja je zadužena za komunikaciju s ostalim podsustavima. Odabrana je zbog svoje pristupačnosti,​ cijene, kratkog vremena razvoja, jednostavnosti korištenja te cijene.
  
 ====== mp3 modul DFPlayer YX5200 ====== ====== mp3 modul DFPlayer YX5200 ======
Redak 63: Redak 68:
 ====   ==== ====   ====
  
 +==== Komunikacija ====
  
-====   ​Komunikacija ​  ​==== +Komunikacija s modulom se ostvaruje asinkronom serijskom UART komunikacijom. Potrebne su dva digitalna izvoda: Tx i Rx na Arduinu koji se spajaju na Rx i Tx izvode (UOČI: RxTx; TxRx) na mp3 modulu. Za rad mp3 modula potrebno je dovesti i napajanje (GND i +5V, može i 3v3) s Arduino Uno razvojne platforme. Na Arduino Uno razvojnoj platformi odnosno na ATmega328p mikrokontroleru postoji sklopovlje za asinkronu serijsku komunikaciju koje je spojeno na USB kako bi se mogla ostvariti komunikacija s računalom. Zbog uhodavanja i nadogradnje sustava asinkrona serijska komunikacija sa mp3 modulom ostvarit će se programski. Pritom će se koristiti ugrađena biblioteka [[https://​www.arduino.cc/​en/​Reference/​SoftwareSerial|SoftwareSerial]] koja se već nalazi u Arduino IDE.
- +
-Komunikacija s modulom se ostvaruje asinkronom serijskom UART komunikacijom. Potrebne su dva digitalna izvoda: Tx i Rx na Arduinu koji se spajaju na Rx i Tx izvode (UOČI: Rx->Tx; Tx->Rx) na mp3 modulu. Za rad mp3 modula potrebno je dovesti i napajanje (GND i +5V) s Arduino Uno razvojne platforme. Na Arduino Uno razvojnoj platformi odnosno na ATmega328p mikrokontroleru postoji sklopovlje za asinkronu serijsku komunikaciju koje je spojeno na USB kako bi se mogla ostvariti komunikacija s računalom. Zbog uhodavanja i nadogradnje sustava asinkrona serijska komunikacija sa mp3 modulom ostvarit će se programski. Pritom će se koristiti ugrađena biblioteka [[https://​www.arduino.cc/​en/​Reference/​SoftwareSerial|SoftwareSerial]] koja se već nalazi u Arduino IDE.+
  
 ===== RFID čitač ===== ===== RFID čitač =====
Redak 75: Redak 79:
  
 ==== MFRC522 ==== ==== MFRC522 ====
 +
 +MFRC522 modul je RFID čitač/​pisač proizvođača NXP Semiconductors koji je namijenjen za očitavanje pasivnih RFID oznaka propisanih ISO/IEC 14443 protokolom. Komunikacija između modula i RFID oznaka se odvija na 13.56 MHz. Komunikacija je ostvarena SPI komunikacijom linijama: MISO, MOSI, SS, CLK. Nedostatak: mali domet. Napredak: Zapis info o proizvodima na RFID oznaku (engl. //tag//). Napajanje 5V ili 3v3. S 5V ostvaren nešto veći domet.
 +
 +===== Bluetooth modul =====
 +
 +Bluetooth modul HC-06. Odabran zbog jednostavnog rukovanja. Serijska komunikacija izvedena softverski. Jednostavno spajanje na Android mobilnoj aplikaciji.
 +
 +===== Shema spajanja sustava =====
 +
 +{{:​2018:​karlo_siladi:​shema_sustava2.png?​nolink&​400x285}}
 +
 +====== Prototipno kućište ======
 +
 +Uređaj je prenosiv pa je napajanje izvedeno baterijom nazivnog napona 9V. Napredak: punjive baterije, prekidač
 +
 +Za lakše rukovanje sustav je smješten u plastično kućište. Zbog malog dometa RFID čitača isti je postavljen izvan kućišta. Također izvan se nalaze i slušalice.
 +
 +{{:​2018:​karlo_siladi:​kuciste.jpg?​nolink&​300x400}}
  
 ====== Komunikacija s vanjskim sustavima ====== ====== Komunikacija s vanjskim sustavima ======
  
-Ako dođe do greške prilikom povezivanja preko bluetooth veze, sustav može komunicirati izravno nakon očitavanja jedinstvenog koda proizvoda preko .mp3 modula.+Uređaj se povezuje s mobilnom aplikacijom pomoću Bluetooth komunikacije. Napredak: koristiti BLE zbog manje potrođnje 
 + 
 +Ako dođe do greške prilikom povezivanja preko bluetooth veze, sustav može komunicirati izravno nakon očitavanja jedinstvenog koda proizvoda preko .mp3 modula ​odnosno reproducirati glasovni zapis s informacijama o proizvoduNapredak: baza glasovnih zapisa na vanjskom poslužitelju. Snimanje zapisa na samom uređaju. 
 + 
 +====== Android aplikacija ====== 
 + 
 +Struktura aplikacije je prikazana na slici: 
 + 
 +{{:​2018:​karlo_siladi:​struktura_apk.png?​nolink&​500x384}} 
 + 
 +===== Android Studio ===== 
 + 
 +[[https://​developer.android.com/​studio/​|Za izradu Android aplikacije potrebno je instalirati razvojni alat Android Studio. Najnovija verzija trenutno je 3.1.3. a dostupna je za preuzimanje na sljedećoj poveznici: https://​developer.android.com/​studio/​]] ​ . 
 + 
 +<font 12pt/​inherit;;​blue;;​inherit>​Detaljne upute za instalaciju razvojnog alata Android Studio</​font>​ 
 + 
 +[[https://​developer.android.com/​studio/​install|https://​developer.android.com/​studio/​install]] 
 + 
 +==== Kreiranje projekta ==== 
 + 
 +<font 12pt/​inherit;;​blue;;​inherit>​Nakon uspješne instalacije razvojnog alata potrebno je kreirati novi Android projekt. Kod stvaranja projekta potrebno je unijeti proizvoljno ime projekta. Korišteno ime je  CKGE_TMP_i SPVP_projekt CKGE_TMP_i . Stvara se novi direktorij istog imena u kojeg se spremaju programski kodovi, biblioteke te resursi potrebni za aplikaciju. Nakon toga potrebno je unijeti verziju platforme za koju se projekt izrađuje. Odabrana je verzija ​ CKGE_TMP_i API: 19 Android 4.4 (KitKat) CKGE_TMP_i ​ što je relativno stara verzija Android operacijskog sustava, ali je time omogućeno da se aplikacija može pokretati na većini mobilnih uređaja jer je pokretanje moguće i na svim novijim verzijama Androida.</​font>​ 
 + 
 +<font 12.0pt/​inherit;;​inherit;;​inherit>​Pri kreiranju novog projekta, stvoren je novi  CKGE_TMP_i Activity CKGE_TMP_i ​ koji prikazuje grafičko sučelje koje vidi korisnik pri pokretanju aplikacije. Potrebno je odabrati ​ CKGE_TMP_i Empty Activity CKGE_TMP_i ​ i dodijeliti mu naziv  CKGE_TMP_i MainActivity. CKGE_TMP_i</​font>​ 
 + 
 +===  AndroidManifest.xml ​ === 
 + 
 +<font 12pt/​inherit;;​inherit;;​inherit>​Kako bi aplikacija ispravno radila potrebno je u datoteku ​ CKGE_TMP_i AndroidManifest.xml CKGE_TMP_i ​ dodati potrebne dozvole za korištenjem ​ CKGE_TMP_i Bluetooth CKGE_TMP_i ​ sučelja.</​font>​ 
 + 
 +<font 9pt/​inherit;;​inherit;;​inherit><​uses-permission android:​name="​android.permission.BLUETOOTH"​ /></​font>​ 
 + 
 +<font 9pt/​inherit;;​inherit;;​inherit><​uses-permission android:​name="​android.permission.BLUETOOTH_ADMIN"​ /></​font>​ 
 + 
 +<font 12.0pt/​inherit;;​inherit;;​inherit>​Potrebno je i navesti sve  CKGE_TMP_i Activity CKGE_TMP_i ​ java razrede koji se koriste u aplikaciji. Korišteni su  CKGE_TMP_i MainActivity CKGE_TMP_i ,  CKGE_TMP_i ProductInfoActivity CKGE_TMP_i ​ i  CKGE_TMP_i ProjectAboutActivity. CKGE_TMP_i</​font>​ 
 + 
 +<font 12.0pt/​inherit;;​inherit;;​inherit>​Oznakom ​ CKGE_TMP_i intent-filter ​ CKGE_TMP_i daje se do znanja Androd OS-u koju Activity treba pokrenuti prilikom pokretanja aplikacije. U manifestu se još navode i korištene ikone.</​font>​ 
 + 
 +<​code><​font inherit/​inherit;;#​e8bf6a;;​inherit><?</​font><​font inherit/​inherit;;#​bababa;;​inherit>​xml version=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​1.0"</​font><​font inherit/​inherit;;#​bababa;;​inherit>​encoding=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​utf-8"</​font><​font inherit/​inherit;;#​e8bf6a;;​inherit>?></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit><​manifest</​font><​font inherit/​inherit;;#​bababa;;​inherit>​xmlns:</​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>​=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​http://​schemas.android.com/​apk/​res/​android"</​font><​font inherit/​inherit;;#​6a8759;;​inherit></​font><​font inherit/​inherit;;#​bababa;;​inherit>​package=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​com.example.karlosiladi.bazapodataka"</​font><​font inherit/​inherit;;#​e8bf6a;;​inherit>></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit><​uses-permission</​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​name=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​android.permission.BLUETOOTH_ADMIN"</​font><​font inherit/​inherit;;#​e8bf6a;;​inherit>/></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit><​uses-permission</​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​name=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​android.permission.BLUETOOTH"</​font><​font inherit/​inherit;;#​e8bf6a;;​inherit>/></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit><​application</​font><​font inherit/​inherit;;#​e8bf6a;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​allowBackup=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​true"</​font><​font inherit/​inherit;;#​6a8759;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​icon=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​@mipmap/​ic_launcher_spvp"</​font><​font inherit/​inherit;;#​6a8759;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​label=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​@string/​app_name"</​font><​font inherit/​inherit;;#​6a8759;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​roundIcon=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​@mipmap/​ic_launcher_spvp_round"</​font><​font inherit/​inherit;;#​6a8759;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​supportsRtl=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​true"</​font><​font inherit/​inherit;;#​6a8759;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​theme=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​@style/​AppTheme"</​font><​font inherit/​inherit;;#​e8bf6a;;​inherit>></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit><​activity</​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​name=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​.ProductInfoActivity"</​font><​font inherit/​inherit;;#​e8bf6a;;​inherit>/></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit><​activity</​font><​font inherit/​inherit;;#​e8bf6a;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​name=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​.MainActivity"</​font><​font inherit/​inherit;;#​6a8759;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​label=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​@string/​title_activity_main"</​font><​font inherit/​inherit;;#​6a8759;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​screenOrientation=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​landscape"</​font><​font inherit/​inherit;;#​6a8759;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​theme=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​@style/​AppTheme.NoActionBar"</​font><​font inherit/​inherit;;#​e8bf6a;;​inherit>></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit><​intent-filter></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit><​action</​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​name=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​android.intent.action.MAIN"</​font><​font inherit/​inherit;;#​e8bf6a;;​inherit>/></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit><​category</​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​name=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​android.intent.category.LAUNCHER"</​font><​font inherit/​inherit;;#​e8bf6a;;​inherit>/></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit></​intent-filter></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit></​activity></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit><​activity</​font><​font inherit/​inherit;;#​9876aa;;​inherit>​android</​font><​font inherit/​inherit;;#​bababa;;​inherit>:​name=</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​.ProjectAboutActivity"</​font><​font inherit/​inherit;;#​e8bf6a;;​inherit>/></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit></​application></​font><​font inherit/​inherit;;#​e8bf6a;;​inherit></​manifest></​font></​code>​ 
 + 
 +=== Struktura proizvoda === 
 + 
 +<​code><​font inherit/​inherit;;#​cc7832;;​inherit>​public class</​font>​Products { 
 +    <font inherit/​inherit;;#​bbb529;;​inherit>​@NonNull</​font><​font inherit/​inherit;;#​bbb529;;​inherit>​@PrimaryKey</​font><​font inherit/​inherit;;#​bbb529;;​inherit></​font><​font inherit/​inherit;;#​cc7832;;​inherit>​private</​font>​String <font inherit/​inherit;;#​9876aa;;​inherit>​productId</​font><​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit>​private</​font>​String <font inherit/​inherit;;#​9876aa;;​inherit>​productName</​font><​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit>​private</​font>​String <font inherit/​inherit;;#​9876aa;;​inherit>​productPrice</​font><​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit>​public</​font><​font inherit/​inherit;;#​ffc66d;;​inherit>​Products</​font>​() { 
 +    } 
 +    <font inherit/​inherit;;#​cc7832;;​inherit>​public</​font>​String <font inherit/​inherit;;#​ffc66d;;​inherit>​getProductId</​font>​() { <font inherit/​inherit;;#​cc7832;;​inherit>​return</​font><​font inherit/​inherit;;#​9876aa;;​inherit>​productId</​font><​font inherit/​inherit;;#​cc7832;;​inherit>;</​font>​} 
 +    <font inherit/​inherit;;#​cc7832;;​inherit>​public void</​font><​font inherit/​inherit;;#​ffc66d;;​inherit>​setProductId</​font>​(String productId) { <font inherit/​inherit;;#​cc7832;;​inherit>​this</​font>​.<​font inherit/​inherit;;#​9876aa;;​inherit>​productId</​font>​= productId<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font>​} 
 +    <font inherit/​inherit;;#​cc7832;;​inherit>​public</​font>​String <font inherit/​inherit;;#​ffc66d;;​inherit>​getProductName</​font>​() { <font inherit/​inherit;;#​cc7832;;​inherit>​return</​font><​font inherit/​inherit;;#​9876aa;;​inherit>​productName</​font><​font inherit/​inherit;;#​cc7832;;​inherit>;</​font>​} 
 +    <font inherit/​inherit;;#​cc7832;;​inherit>​public void</​font><​font inherit/​inherit;;#​ffc66d;;​inherit>​setProductName</​font>​(String productName) { <font inherit/​inherit;;#​cc7832;;​inherit>​this</​font>​.<​font inherit/​inherit;;#​9876aa;;​inherit>​productName</​font>​= productName<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font>​} 
 +    <font inherit/​inherit;;#​cc7832;;​inherit>​public</​font>​String <font inherit/​inherit;;#​ffc66d;;​inherit>​getProductPrice</​font>​() { <font inherit/​inherit;;#​cc7832;;​inherit>​return</​font><​font inherit/​inherit;;#​9876aa;;​inherit>​productPrice</​font><​font inherit/​inherit;;#​cc7832;;​inherit>;</​font>​} 
 +    <font inherit/​inherit;;#​cc7832;;​inherit>​public void</​font><​font inherit/​inherit;;#​ffc66d;;​inherit>​setProductPrice</​font>​(String productPrice) {<font inherit/​inherit;;#​cc7832;;​inherit>​this</​font>​.<​font inherit/​inherit;;#​9876aa;;​inherit>​productPrice</​font>​= productPrice<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font>​} 
 + 
 +
 +</​code>​ 
 +=== Baza podataka === 
 + 
 +<​code><​font inherit/​inherit;;#​bbb529;;​inherit>​@Database</​font>​(<​font inherit/​inherit;;#​d0d0ff;;​inherit>​entities</​font>​= {Products.<​font inherit/​inherit;;#​cc7832;;​inherit>​class</​font>​}<​font inherit/​inherit;;#​cc7832;;​inherit>,</​font><​font inherit/​inherit;;#​d0d0ff;;​inherit>​version</​font>​= <font inherit/​inherit;;#​6897bb;;​inherit>​1</​font><​font inherit/​inherit;;#​cc7832;;​inherit>,</​font><​font inherit/​inherit;;#​d0d0ff;;​inherit>​exportSchema</​font>​= <font inherit/​inherit;;#​cc7832;;​inherit>​false</​font>​) 
 +<font inherit/​inherit;;#​cc7832;;​inherit>​public abstract class</​font>​ProductDatabase <font inherit/​inherit;;#​cc7832;;​inherit>​extends</​font>​RoomDatabase { 
 +    <font inherit/​inherit;;#​cc7832;;​inherit>​private static final</​font>​String <font inherit/​inherit;;#​9876aafont-style:​italic;;;​inherit>​DATABASE_NAME</​font>​= <font inherit/​inherit;;#​6a8759;;​inherit>"​products_db"</​font><​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit>​private static</​font>​ProductDatabase <font inherit/​inherit;;#​9876aafont-style:​italic;;;​inherit>​INSTANCE</​font><​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit>​public abstract</​font>​DaoAccess <font inherit/​inherit;;#​ffc66d;;​inherit>​daoAccess</​font>​() <font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit>​public static</​font>​ProductDatabase <font inherit/​inherit;;#​ffc66d;;​inherit>​getProductDatabase</​font>​(Context context) { 
 +   <​font inherit/​inherit;;#​cc7832;;​inherit>​if</​font>​(<​font inherit/​inherit;;#​9876aafont-style:​italic;;;​inherit>​INSTANCE</​font>​== <font inherit/​inherit;;#​cc7832;;​inherit>​null</​font>​) { 
 +   <​font inherit/​inherit;;#​9876aafont-style:​italic;;;​inherit>​INSTANCE</​font>​= 
 +   ​Room.<​font inherit/​inherit;;​inherit;;​inherit>​databaseBuilder</​font>​(context.getApplicationContext()<​font inherit/​inherit;;#​cc7832;;​inherit>,</​font>​ProductDatabase.<​font inherit/​inherit;;#​cc7832;;​inherit>​class,</​font><​font inherit/​inherit;;#​9876aafont-style:​italic;;;​inherit>​DATABASE_NAME</​font>​) 
 +   ​.allowMainThreadQueries() 
 +                            .build()<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font>​} 
 +   <​font inherit/​inherit;;#​cc7832;;​inherit>​return</​font><​font inherit/​inherit;;#​9876aafont-style:​italic;;;​inherit>​INSTANCE</​font><​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font>​} 
 +    <font inherit/​inherit;;#​cc7832;;​inherit>​public static void</​font><​font inherit/​inherit;;#​ffc66d;;​inherit>​destroyInstance</​font>​() { 
 +   <​font inherit/​inherit;;#​9876aafont-style:​italic;;;​inherit>​INSTANCE</​font>​= <font inherit/​inherit;;#​cc7832;;​inherit>​null;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font>​} 
 +
 +</​code>​ 
 +=== Sučelje za slanje upita na bazu ===
  
-======   ======+<​code><​font inherit/​inherit;;#​cc7832;;​inherit>​public interface</​font>​DaoAccess { 
 +    <font inherit/​inherit;;#​bbb529;;​inherit>​@Insert</​font><​font inherit/​inherit;;#​bbb529;;​inherit></​font><​font inherit/​inherit;;#​cc7832;;​inherit>​void</​font><​font inherit/​inherit;;#​ffc66d;;​inherit>​insertSingleProduct</​font>​(Products product)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​bbb529;;​inherit>​@Insert</​font><​font inherit/​inherit;;#​bbb529;;​inherit></​font><​font inherit/​inherit;;#​cc7832;;​inherit>​void</​font><​font inherit/​inherit;;#​ffc66d;;​inherit>​insertMultipleProducts</​font>​(List<​Products>​ productsList)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​bbb529;;​inherit>​@Query</​font>​(<​font inherit/​inherit;;#​6a8759;;​inherit>"​SELECT * FROM Products WHERE productId ​:​productId"</​font>​) 
 +    Products <font inherit/​inherit;;#​ffc66d;;​inherit>​fetchProductByProductId</​font>​(String productId)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​bbb529;;​inherit>​@Query</​font>​(<​font inherit/​inherit;;#​6a8759;;​inherit>"​SELECT * FROM Products"</​font>​) 
 +    List<​Products>​ <font inherit/​inherit;;#​ffc66d;;​inherit>​getProducts</​font>​()<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​bbb529;;​inherit>​@Update</​font><​font inherit/​inherit;;#​bbb529;;​inherit></​font><​font inherit/​inherit;;#​cc7832;;​inherit>​void</​font><​font inherit/​inherit;;#​ffc66d;;​inherit>​updateProduct</​font>​(Products product)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​bbb529;;​inherit>​@Delete</​font><​font inherit/​inherit;;#​bbb529;;​inherit></​font><​font inherit/​inherit;;#​cc7832;;​inherit>​void</​font><​font inherit/​inherit;;#​ffc66d;;​inherit>​deleteProduct</​font>​(Products product)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font>​} 
 +</​code>​ 
 +=== Bluetooth handler i reprodukcija zapisa ​===
  
-====== ​Plan projekta ​======+<​code><​font inherit/​inherit;;#​9876aa;;​inherit>​h</​font>​<font inherit/​inherit;;#​cc7832;;​inherit>​new</​font>​Handler() { 
 +    <font inherit/​inherit;;#​cc7832;;​inherit>​public void</​font><​font inherit/​inherit;;#​ffc66d;;​inherit>​handleMessage</​font>​(android.os.Message msg) { 
 +   <​font inherit/​inherit;;#​cc7832;;​inherit>​switch</​font>​(msg.<​font inherit/​inherit;;#​9876aa;;​inherit>​what</​font>​) { 
 +   <​font inherit/​inherit;;#​cc7832;;​inherit>​case</​font><​font inherit/​inherit;;#​9876aa;;​inherit>​RECIEVE_MESSAGE</​font>:​ 
 +   <​font inherit/​inherit;;#​cc7832;;​inherit>​byte</​font>​[] readBuf ​(<font inherit/​inherit;;#​cc7832;;​inherit>​byte</​font>​[]) msg.<​font inherit/​inherit;;#​9876aa;;​inherit>​obj</​font><​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font>​String strIncom ​<font inherit/​inherit;;#​cc7832;;​inherit>​new</​font>​String(readBuf<​font inherit/​inherit;;#​cc7832;;​inherit>,</​font><​font inherit/​inherit;;#​6897bb;;​inherit>​0</​font><​font inherit/​inherit;;#​cc7832;;​inherit>,</​font>​msg.<​font inherit/​inherit;;#​9876aa;;​inherit>​arg1</​font>​)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​sb</​font>​.append(strIncom)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit>​int</​font>​endOfLineIndex ​<font inherit/​inherit;;#​9876aa;;​inherit>​sb</​font>​.indexOf(<​font inherit/​inherit;;#​6a8759;;​inherit>"</​font><​font inherit/​inherit;;#​cc7832;;​inherit>​\r\n</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"</​font>​)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit>​if</​font>​(endOfLineIndex > <font inherit/​inherit;;#​6897bb;;​inherit>​0</​font>​) { 
 +   ​String sbprint ​<font inherit/​inherit;;#​9876aa;;​inherit>​sb</​font>​.substring(<​font inherit/​inherit;;#​6897bb;;​inherit>​0</​font><​font inherit/​inherit;;#​cc7832;;​inherit>,</​font>​endOfLineIndex)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​sb</​font>​.delete(<​font inherit/​inherit;;#​6897bb;;​inherit>​0</​font><​font inherit/​inherit;;#​cc7832;;​inherit>,</​font><​font inherit/​inherit;;#​9876aa;;​inherit>​sb</​font>​.length())<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​808080;;​inherit>//​Toast.makeText(MainActivity.this,​ "From Arduino: " + sbprint, Toast.LENGTH_SHORT).show();</​font><​font inherit/​inherit;;#​808080;;​inherit></​font><​font inherit/​inherit;;#​cc7832;;​inherit>​if</​font>​(<​font inherit/​inherit;;#​9876aa;;​inherit>​mPlayer</​font>​!<font inherit/​inherit;;#​cc7832;;​inherit>​null</​font>​) { 
 +   <​font inherit/​inherit;;#​9876aa;;​inherit>​mPlayer</​font>​.stop()<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font>​} 
 +   ​Products product ​<font inherit/​inherit;;#​9876aa;;​inherit>​db</​font>​.daoAccess().fetchProductByProductId(sbprint)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit>​if</​font>​(product ​== <font inherit/​inherit;;#​cc7832;;​inherit>​null</​font>​){ 
 +   ​Toast.<​font inherit/​inherit;;​inherit;;​inherit>​makeText</​font>​(MainActivity.<​font inherit/​inherit;;#​cc7832;;​inherit>​this,</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​Ne postoji proizvod s ID: "</​font>​+ sbprint +<font inherit/​inherit;;#​6a8759;;​inherit>"​ u bazi proizvoda!"</​font><​font inherit/​inherit;;#​cc7832;;​inherit>,</​font>​Toast.<​font inherit/​inherit;;#​9876aafont-style:​italic;;;​inherit>​LENGTH_SHORT</​font>​).show()<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​808080;;​inherit>//​ mPlayer ​MediaPlayer.create(MainActivity.this,​ R.raw.error_sound);</​font><​font inherit/​inherit;;#​808080;;​inherit>//​ mPlayer.start();</​font><​font inherit/​inherit;;#​808080;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​mPlayer</​font>​MediaPlayer.<​font inherit/​inherit;;​inherit;;​inherit>​create</​font>​(MainActivity.<​font inherit/​inherit;;#​cc7832;;​inherit>​this,</​font>​R.raw.<​font inherit/​inherit;;#​9876aafont-style:​italic;;;​inherit>​nemaubazi</​font>​)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​mPlayer</​font>​.start()<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​productNameTextView</​font>​.setText(<​font inherit/​inherit;;#​6a8759;;​inherit>"​Skeniraj sljedeći proizvod..."</​font>​)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​productPriceTextView</​font>​.setText(<​font inherit/​inherit;;#​6a8759;;​inherit>""</​font>​)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font>​} <font inherit/​inherit;;#​cc7832;;​inherit>​else</​font>​{ 
 +   <​font inherit/​inherit;;#​9876aa;;​inherit>​productNameTextView</​font>​.setText(product.getProductName())<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​productPriceTextView</​font>​.setText(product.getProductPrice())<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font>​String id product.getProductId()<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit>​int</​font>​res = MainActivity.<​font inherit/​inherit;;#​cc7832;;​inherit>​this</​font>​.getResources().getIdentifier(<​font inherit/​inherit;;#​6a8759;;​inherit>"​t"</​font>​+id<​font inherit/​inherit;;#​cc7832;;​inherit>,</​font><​font inherit/​inherit;;#​6a8759;;​inherit>"​raw"</​font><​font inherit/​inherit;;#​cc7832;;​inherit>,</​font>​MainActivity.<​font inherit/​inherit;;#​cc7832;;​inherit>​this</​font>​.getPackageName())<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit>​if</​font>​(res != <font inherit/​inherit;;#​6897bb;;​inherit>​0</​font>​) { 
 +   <​font inherit/​inherit;;#​9876aa;;​inherit>​mPlayer</​font>​= MediaPlayer.<​font inherit/​inherit;;​inherit;;​inherit>​create</​font>​(MainActivity.<​font inherit/​inherit;;#​cc7832;;​inherit>​this,</​font>​res)<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font><​font inherit/​inherit;;#​9876aa;;​inherit>​mPlayer</​font>​.start()<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font>​} 
 +   } 
 +                } 
 +                <font inherit/​inherit;;#​cc7832;;​inherit>​break;</​font><​font inherit/​inherit;;#​cc7832;;​inherit></​font>​} 
 +    }<font inherit/​inherit;;#​cc7832;;​inherit>;</​font>​}<​font inherit/​inherit;;#​cc7832;;​inherit>;</​font></​code>​
  
  
2018/karlo_siladi/projektni_zadatak.txt · Zadnja izmjena: 2023/06/19 18:11 (vanjsko uređivanje)