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/06/14 01:01]
ksiladi
2018:karlo_siladi:projektni_zadatak [2018/06/14 01:20]
ksiladi [Shema spajanja sustava]
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 89: Redak 89:
  
 {{:​2018:​karlo_siladi:​shema_sustava2.png?​nolink&​400x285}} {{:​2018:​karlo_siladi:​shema_sustava2.png?​nolink&​400x285}}
 +
 +{{:​2018:​karlo_siladi:​sustav_ozicenje.png?​nolink&​375x500}}
 +
  
 ====== Prototipno kućište ====== ====== Prototipno kućište ======
Redak 120: Redak 123:
 ==== 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 129:
 === 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 173:
 </​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.txt · Zadnja izmjena: 2023/06/19 18:11 (vanjsko uređivanje)