Được tạo bởi Blogger.

Labels

Thứ Ba, 2 tháng 5, 2017

AndroidBasic - Resources Organizing & Accessing


Có rất nhiều item bạn sử dụng để xây dựng được một ứng dụng Android tốt. Ngoài coding cho ứng dụng, bạn cần quan tâm tới nhiều nguồn tài nguyên khác là các nội dung tĩnh mà code của bạn sử dụng. Như: các bitmap, color, layout,..Các nguồn tài nguyên là luôn được giữ riêng biệt trong các thư mục khác nhau trong res/directory của project.

Hướng dẫn này sẽ giải thích cho bạn cách bạn có thể tổ chức các nguồn tài nguyên của ứng dụng, định rõ các nguồn thay thế và truy cập chúng trong ứng dụng.

Organize Resources in Eclipse
Bạn nên đặt mỗi loại tài nguyên trong một thư mục riêng của res/directory của project. Ví dụ, đây là cấp bậc file cho một project đơn giản:

MyProject/
    src/  
        MyActivity.java  
    res/
        drawable/  
            icon.png  
        layout/  
            activity_main.xml
            info.xml
        values/  
            strings.xml 

res/directory chứa tất cả tài nguyên trong các thư mục con khác nhau. Ở đây chúng ta có một tài nguyên ảnh, hai tài nguyên layout, một file string. Dưới đây là bảng  chi tiết về các thư mục nguồn hỗ trợ trong project res/directory.

Organize resource in Android Studio

MyProject/
    src/
 main/
 java/
    MyActivity.java  
    res/
        drawable/  
            icon.png  
        layout/  
            activity_main.xml
            info.xml
        values/  
            strings.xml 

+ anim/: Là các file XML định nghĩa các tính chất animation. Chúng được lưu trong res/anim/folder và được truy cập từ class R.anim.

+ color/: Là các file XML định nghĩa một danh sách của màu sắc. Chúng được lưu trong res/color/ và được truy cập từ class R.color.

+ drawable/: Là các file ảnh như .png, .jpg, .gif được biên dịch vào trong bitmap, state lists, shapes,.. Chúng được lưu trong res/drawable và truy cập từ class R.drawable.

+ layout/: Là các file XML định nghĩa giao diện người dùng. Được lưu trong res/layout và truy cập từ class R.layout.

+ menu/: là các file XML định nghĩa các menu của ứng dụng như: một Options Menu, Context Menu hoặc Sub Menu. Chúng được lưu trong res/menu và truy cập từ class R.menu.

+ raw/: Là các file chuyên để lưu 

AndroidAdvaced - My Bluetooth Application


Dạo trước tôi có dịch 2 bài và viết lại trên Blog này, 2 bài đều nói về Bluetooth. Trong đó, bài AndroidAdvanced - Bluetooth Example là ví dụ cơ bản của Bluetooth, bài AndroidAdvanced - Bluetooth Tutorial là bài hướng dẫn rất chi tiết về cách giao tiếp với Bluetooth trong android. Còn ở bài viết này, tôi không dịch từ bất cứ nguồn nào. Dựa vào hướng dẫn từ 2 bài trên để viết ra một ứng dụng Bluetooth dành riêng cho ngành điện. Ứng dụng sẽ giúp truyền nhận dữ liệu giữa điện thoại và mạch điện tử thông qua modul bluetooth HC05. Từ đó điều khiển mạch điện tử theo ý muốn.

Cụ thể, ứng dụng này có chức năng: 
    + Bật tắt Bluetooth của điện thoại
    + Tìm kiếm các thiết bị Bluetooth đã có sẵn, tức là các thiết bị đã được ghép nối bởi điện thoại
    + Kết nối, ngắt kết nối với các thiết bị đó.
   + Truyền nhận dữ liệu giữa các thiết bị. Tuy ứng dụng có thể truyền dữ liệu qua lại giữa các điện thoại. Nhưng do mục đích chính là giao tiếp với mạch điện tử thông qua bluetooth nên ứng dụng chỉ có thể truyền dữ liệu dạng chuỗi hoặc số.

Để hiểu được bài viết này, tôi mặc định là các bạn đã có căn bản về android. Chẳng hạn như biết về lập trình giao diện, xử lý sự kiện, Intent, Thread,.. Nếu chưa biết gì về android, bạn nên xem lại các bài hướng dẫn trước trên blog hoặc tham khảo các tài liệu khác trên mạng rồi quay lại đọc bài này sau. Thêm một điều nữa là bạn nên đọc trước bài AndroidAdvanced - Bluetooth Tutorial để hiểu rõ hơn về bluetooth và cách lập trình, bởi ở bài này tôi sẽ không hướng dẫn chi tiết lại.

Okie, bắt đầu thôi!

Đầu tiên, các bạn xem qua về cấu trúc của ứng dụng. Ứng dụng gồm 2 activity và 2 layout, bao gồm: + activity_main là layout cho MainActivity, đây là giao diện chính của ứng dụng. 
+ control_layout là layout cho ControllerActivity, đây là giao diện điều khiển thiết bị.

Chúng ta sẽ đi chi tiết vào từng activity.

1. activity_main


TivaC - 74HC595


I. Giới thiệu

Mỗi vi điều khiển nói chung, vi điều khiển TivaC nói riêng đều có số lượng chân IO nhất định. Vì vậy, với các ứng dụng hoặc ngoại vi yêu cầu nhiều chân IO thì việc kết nối trực tiếp vào vi điều khiển khiến tốn tài nguyên chân IO. Và việc này là không cần thiết với những ứng dụng cần tốc độ không quá nhanh. Để tiết kiệm IO, ở bài viết này, tôi sẽ chỉ bạn cách sử dụng IC 74HC595 với TivaC. IC 74HC595 là một IC có chức năng chuyển giao tiếp song song sang nối tiếp. Dĩ nhiên, việc dùng một IC truyền dữ liệu trung gian sẽ khiến tốc độ truyền dữ liệu giảm xuống. Vì vậy, tôi khuyên bạn chỉ nên dùng IC này trong trường hợp ứng dụng không yêu cầu tốc độ quá nhanh.

Bài viết sẽ đề cập tới các nội dung sau:
+ Lý thuyết về IC 74HC595
+ Ứng dụng IC 74HC595 cơ bản
+ Ứng dụng IC 74HC595 vào viết thư viện LCD Graphic KD0108

II. Lý thuyết về IC 74HC595

Các thông tin về IC 74HC595

Các thiết bị HC595 chưa một thanh ghi dịch 8 bit vào nối tiếp, ra song song. Thanh ghi lưu trữ có 3 trạng thái đầu ra song song. Các xung clock riêng biệt được cung cấp cho cả thanh ghi dịch và thanh ghi lưu trữ. Thanh ghi dịch có đầu vào xóa trực tiếp SRCLR, đầu vào nối tiếp SER và đầu ra nối tiếp. Khi kích hoạt đầu ra (OE) ở trạng thái cao, đầu ra đầu ra ở trạng thái cao trở. 

Cả clock thanh ghi dịch (SRCLK) và clock thanh ghi storage (RCLK) đều được kích hoạt ở cạnh lên. Nếu cả hai clock được kết nối với nhau, thanh ghi dịch sẽ luôn đi trước một xung so với thanh ghi storage.


Giản đồ thời gian


Thời gian cần thiết để thực hiện xong câu lệnh



TivaC - SRF05


Ở bài hướng dẫn này tôi sẽ giới thiệu cảm biến siêu âm SRF05 và ứng dụng của nó trong đo khoảng cách, đếm số vật và tốc độ đi qua cảm biến của vật.
Sử dụng Kit TivaC TM4C123GH6PM, các bạn cần đọc trước bài Timer, UART và GPIO.

Nội dung:
+ Giới thiệu về cảm biến siêu âm SRF05
+ Ứng dụng trong đo khoảng cách
+ Ứng dụng trong đếm vật và tốc độ vật.

1. Cảm biến siêu âm SRF05.

1.1. Giới thiệu

Modul SRF05 là một phiên bản nâng cấp của SRF04, được thiết kế để tăng độ linh hoạt, tăng dải đo và giảm giá thành. Như vậy, SRF05 là hoàn toàn tương đương với phiên bản SRF04. Dải đo tăng từ 3 lên 4 mét. Một chế độ hoạt động mới cho phép SRF05 sử dụng một chân đơn cho cả chức năng trigger và echo, nhờ đó giúp tiết kiệm chân cho bộ điều khiển. Khi chế độ của chân là không kết nối, SRF05 hoạt động với các chân trigger và echo riêng biệt giống như SRF04. SRF05 có một khoảng thời gian delay nhỏ trước khi xung echo được kéo xuống thấp.

1.2. Mode 1 – Tương thích SRF04 – Chân Triger và echo độc lập

Chế độ này sử dụng các chân trigger và echo độc lập và là chế độ đơn giản để sử dụng. Tất cả code cho SRF04 đều chạy cho SRF05 trong chế độ này. Để sử dụng chế độ này, chỉ cần để chân mode pin unconnected – SRF05 có một điện trở nội kéo lên trên chân này.



1.3. Mode 2 – Một chân duy nhất cho cả trigger và echo

Chế độ này sử dụng một chân duy nhất cho cả hai tín hiệu trigger và echo. Và được thiết kế để tiết kiệm số chân cho các bộ điều khiển nhúng. Để sử dụng chế độ này, kết nối chân mode pin với 0V, chân GND. Tín hiệu echo sẽ xuất hiện trên cùng chân với tín hiệu trigger. SRF05 sẽ không kéo đường echo lên cho tới khi 700us sau khi kết thúc tín hiệu trigger. Bạn cần khoảng thời gian đó để chuyển chân trigger thành chân echo nghĩa là chuyển nó thành một đầu vào để sẵn sàng đo độ rộng xung echo. Lệnh PULSIN được tìm thấy trên rất nhiều bộ điều khiển thực hiện điều này một cách tự động.



Tính toán khoảng cách
Giản đồ thời gian của SRF05 được cho như trên cho mỗi chế độ. Bạn chỉ cần cung cấp một xung ngắn khoảng 10us cho chân trigger để bắt đầu đo. SRF05 sẽ gửi ra một dải xung của sóng siêu âm ở tần số 40Khz và kéo chân echo lên cao. Sau đó nó sẽ lắng nghe chân echo, ngay khi nó phát hiện chân echo xuống thấp. Vì vậy, đường echo sẽ là một xung tỷ lệ với khoảng cách tới vật. Bằng cách đo thời gian xung này ở mức cao sẽ tính được khoảng cách theo inch/cm. Nếu không có gì được phát hiện thì SRF05 sẽ xuống thấp ở trên echo sau khoảng 30ms.
SRF04 cung cấp một xung echo tỷ lệ với khoảng cách. Nếu độ rộng xung được đo trong us, bộ chia bởi 58 sẽ cho ra khoảng cách với đơn vị cm, bộ chia là 148 sẽ cho ra khoảng có đơn vị là inch.
SRF05 có thể kích hoạt nhanh với 50ms mỗi lần tức là 20 lần mỗi giây. Bạn nên đợi 50ms trước tín hiệu trigger kế tiếp. Thậm chí cả khi SRF05 phát hiện một vật ở gần và xung echo ngắn hơn. Điều này là để đảm bảo rằng sóng siêu âm còn lại hết hẳn và không gây ra một xung echo lỗi trong lần đo tiếp theo.