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
2018:karlo_siladi:projektni_zadatak [2018/06/14 01:01]
ksiladi
2018:karlo_siladi:projektni_zadatak [2023/06/19 18:11] (trenutno)
Redak 54: Redak 54:
   * Bluetooth modul [[https://​www.olimex.com/​Products/​Components/​RF/​BLUETOOTH-SERIAL-HC-06/​resources/​hc06.pdf|HC-06]]   * Bluetooth modul [[https://​www.olimex.com/​Products/​Components/​RF/​BLUETOOTH-SERIAL-HC-06/​resources/​hc06.pdf|HC-06]]
  
-===== Arduino Uno - Centralna jedinica =====+===== Arduino Uno/​Duemilanove ​- Centralna jedinica =====
  
 Arduino Uno je razvojna platforma zasnovana na [[http://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf|ATmega328p]] mikrokontroleru. Ima 14 ulazno-izlaznih pinova (izvoda) od kojih 6 može biti iskorišteno za pulsno-širinsku modulaciju (engl. //​pulse-width modulation, PWM//), 6 analognih ulaza, kvarcni oscilator frekvencije 16MHz, USB konektor za spajanje s računalom, konektor za napajanje, ICSP ( In Circuit Serial Programming ) konektor te tipkalo za reset mikrokontrolera. Arduino Uno je razvojna platforma zasnovana na [[http://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf|ATmega328p]] mikrokontroleru. Ima 14 ulazno-izlaznih pinova (izvoda) od kojih 6 može biti iskorišteno za pulsno-širinsku modulaciju (engl. //​pulse-width modulation, PWM//), 6 analognih ulaza, kvarcni oscilator frekvencije 16MHz, USB konektor za spajanje s računalom, konektor za napajanje, ICSP ( In Circuit Serial Programming ) konektor te tipkalo za reset mikrokontrolera.
Redak 62: 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. Odabrana je zbog svoje pristupačnosti,​ cijene, kratkog vremena razvoja, jednostavnosti korištenja te cijene.+U našem sustavu Arduino Uno/​Duemilanove ​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 88: Redak 88:
 ===== Shema spajanja sustava ===== ===== Shema spajanja sustava =====
  
-{{:​2018:​karlo_siladi:​shema_sustava2.png?​nolink&​400x285}}+{{:​2018:​karlo_siladi:​shema_sustava2.png?​nolink&​400x285}}{{  :​2018:​karlo_siladi:​sustav_ozicenje.png?​nolink&​400x284}} 
  
 ====== Prototipno kućište ====== ====== Prototipno kućište ======
Redak 105: Redak 106:
  
 ====== Android aplikacija ====== ====== Android aplikacija ======
 +
 +Kod je dostupan na sljedećoj poveznici: http://​pametne-kuce.zesoi.fer.hr/​lib/​exe/​fetch.php?​media=2018:​karlo_siladi:​spvp_apk.zip
  
 Struktura aplikacije je prikazana na slici: Struktura aplikacije je prikazana na slici:
  
-{{:​2018:​karlo_siladi:​struktura_apk.png?​nolink&​500x384}}+{{:​2018:​karlo_siladi:​struktura_apk.png?​direct&​500x384}} 
  
 ===== Android Studio ===== ===== 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/​]] .+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/​|https://​developer.android.com/​studio/​]] .
  
-<font 12pt/​inherit;;​blue;;​inherit>​Detaljne upute za instalaciju razvojnog alata Android Studio</​font>​+Detaljne upute za instalaciju razvojnog alata Android Studio
  
 [[https://​developer.android.com/​studio/​install|https://​developer.android.com/​studio/​install]] [[https://​developer.android.com/​studio/​install|https://​developer.android.com/​studio/​install]]
 +
  
 ==== Kreiranje projekta ==== ==== Kreiranje projekta ====
  
-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  SPVP_projekt ​ . 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 ​ API: 19 Android 4.4 (KitKat) ​ š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.+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 SPVP_projekt . 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 API: 19 Android 4.4 (KitKat) š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.
  
 Pri kreiranju novog projekta, stvoren je novi Activity koji prikazuje grafičko sučelje koje vidi korisnik pri pokretanju aplikacije. Potrebno je odabrati Empty Activity i dodijeliti mu naziv MainActivity. Pri kreiranju novog projekta, stvoren je novi Activity koji prikazuje grafičko sučelje koje vidi korisnik pri pokretanju aplikacije. Potrebno je odabrati Empty Activity i dodijeliti mu naziv MainActivity.
Redak 126: Redak 131:
 === AndroidManifest.xml === === AndroidManifest.xml ===
  
-Kako bi aplikacija ispravno radila potrebno je u datoteku ​CKGE_TMP_i ​AndroidManifest.xml dodati potrebne dozvole za korištenjem Bluetooth sučelja.+Kako bi aplikacija ispravno radila potrebno je u datoteku AndroidManifest.xml dodati potrebne dozvole za korištenjem Bluetooth sučelja.
  
-<font 9pt/​inherit;;​inherit;;​inherit><​uses-permission android:​name="​android.permission.BLUETOOTH"​ /></​font+<code> 
- +<​uses-permission android:​name="​android.permission.BLUETOOTH"​ /> 
-<font 9pt/​inherit;;​inherit;;​inherit>​<​uses-permission android:​name="​android.permission.BLUETOOTH_ADMIN"​ /></font>+<​uses-permission android:​name="​android.permission.BLUETOOTH_ADMIN"​ /> 
 +</code>
  
 Potrebno je i navesti sve Activity java razrede koji se koriste u aplikaciji. Korišteni su MainActivity , ProductInfoActivity i ProjectAboutActivity. Potrebno je i navesti sve Activity java razrede koji se koriste u aplikaciji. Korišteni su MainActivity , ProductInfoActivity i ProjectAboutActivity.
Redak 169: Redak 175:
 </​manifest>​ </​manifest>​
 </​code>​ </​code>​
 +
 === Baza podataka === === Baza podataka ===
 +
 +<​code>​
 +@Database(entities = {Products.class},​ version = 1, exportSchema = false)
 +public abstract class ProductDatabase extends RoomDatabase {
 +
 +    private static final String DATABASE_NAME = "​products_db";​
 +    private static ProductDatabase INSTANCE;
 +    public abstract DaoAccess daoAccess() ;
 +
 +    public static ProductDatabase getProductDatabase(Context context) {
 +        if (INSTANCE == null) {
 +            INSTANCE =
 +                    Room.databaseBuilder(context.getApplicationContext(),​ ProductDatabase.class,​ DATABASE_NAME)
 +                            .allowMainThreadQueries()
 +                            .build();
 +        }
 +        return INSTANCE;
 +    }
 +
 +    public static void destroyInstance() {
 +        INSTANCE = null;
 +    }
 +}
 +</​code>​
  
 === Sučelje za slanje upita na bazu === === Sučelje za slanje upita na bazu ===
 +
 +<​code>​
 + ​public interface DaoAccess {
 +    @Insert
 +    void insertSingleProduct (Products product);
 +    @Insert
 +    void insertMultipleProducts (List<​Products>​ productsList);​
 +    @Query("​SELECT * FROM Products WHERE productId = :​productId"​)
 +    Products fetchProductByProductId (String productId);
 +    @Query("​SELECT * FROM Products"​)
 +    List<​Products>​ getProducts();​
 +    @Update
 +    void updateProduct (Products product);
 +    @Delete
 +    void deleteProduct (Products product);
 +}
 +</​code>​
  
 === Bluetooth handler i reprodukcija zapisa === === Bluetooth handler i reprodukcija zapisa ===
 +
 +<​code>​
 +        h = new Handler() {
 +            public void handleMessage(android.os.Message msg) {
 +                switch (msg.what) {
 +                    case RECIEVE_MESSAGE:​
 +                        byte[] readBuf = (byte[]) msg.obj;
 +                        String strIncom = new String(readBuf,​ 0, msg.arg1);
 +                        sb.append(strIncom);​
 +                        int endOfLineIndex = sb.indexOf("​\r\n"​);​
 +                        if (endOfLineIndex>​ 0) {
 +                            String sbprint = sb.substring(0,​ endOfLineIndex);​
 +                            sb.delete(0,​ sb.length());​
 +                            //​Toast.makeText(MainActivity.this,​ "From Arduino: " + sbprint, Toast.LENGTH_SHORT).show();​
 +
 +                            if(mPlayer != null) {
 +                                mPlayer.stop();​
 +                            }
 +                            Products product = db.daoAccess().fetchProductByProductId(sbprint);​
 +                            if(product == null){
 +                                Toast.makeText(MainActivity.this,​ "Ne postoji proizvod s ID: "+ sbprint +" u bazi proizvoda!",​ Toast.LENGTH_SHORT).show();​
 +                               // mPlayer = MediaPlayer.create(MainActivity.this,​ R.raw.error_sound);​
 +                               // mPlayer.start();​
 +                                mPlayer = MediaPlayer.create(MainActivity.this,​ R.raw.nemaubazi);​
 +                                mPlayer.start();​
 +                                productNameTextView.setText("​Skeniraj sljedeći proizvod..."​);​
 +                                productPriceTextView.setText(""​);​
 +                            } else {
 +                                productNameTextView.setText(product.getProductName());​
 +                                productPriceTextView.setText(product.getProductPrice());​
 +                                String id = product.getProductId();​
 +                                int res = MainActivity.this.getResources().getIdentifier("​t"​+id,​ "​raw",​ MainActivity.this.getPackageName());​
 +                                if(res != 0) {
 +                                    mPlayer = MediaPlayer.create(MainActivity.this,​ res);
 +                                    mPlayer.start();​
 +                                }
 +                            }
 +                        }
 +                        break;
 +                }
 +            };
 +        };
 +</​code>​
  
  
2018/karlo_siladi/projektni_zadatak.1528930895.txt.gz · Zadnja izmjena: 2023/06/19 18:10 (vanjsko uređivanje)