Các ToolBox của CloverBlock
Bài viết này xin được giới thiệu với người đọc về các khối lập trình (ToolBox) của CloverBlock. ToolBox là thành phần chính yếu và quan trọng nhất của CloverBlock để hỗ trợ người lập trình có thể thực hiện lập trình các thao tác kéo cả. Người dùng có thể lần lượt kéo các Block ra để thử nghiệm vai trò của các Block.
ToolBox của CloverBlock hiện gồm các khối sau (Các khối sẽ liên tục được Clover Team cập nhật):
- Khối Logic: Gồm các block về logic, điều khiển chương trình
- Khối Loop: Gồm các block về điều khiển lặp
- Khối Math: Gồm các bloc về toán học
- Khối Text: Gồm các block về xử lý ký tự văn bản
- Khối Variables: Gồm các block về biến
- Khối Time: Gồm các block về thời gian
- Khối In/Out (Port): Gồm các block về vào ra dữ liệu dạng Port
- Khôi Input: Gồm các block đọc dữ liệu đầu vào
- Khối Ouput: Gồm các block điều khiển xuất dữ liệu ra
- Khối Display: Gồm các block về điều khiển hiển thị ra màn hình, LED
- Khối Sensors: Gồm các block liên quan đến các cảm biến
- Khối Bluetooth: Gồm các block liên quan đến giao tiếp Bluetooth với Mobile
- Khối Robot: Gồm các block dùng để lập trình điều khiển Robot
Mỗi khối Blocks bao gồm nhiều Block nhỏ với chung loại tính năng được mô tả chi tiết dưới đây.
1.Logic Blocks:
Logic Blocks là khối Blocks về các hàm logic cơ bản như if…else (Nếu…thì…), So sánh (>, < , = , !=), Điều kiện hợp (and – và, or – hoặc), Phủ định (not), True-False (Đúng – Sai), …
- Block If-Else (Nếu…thì…): Gồm 3 dạng chính như sau:
Để chuyển đổi giữa các dạng này người dùng có thể nhấn vào nút hình * ở góc trái và kéo vào hoặc kéo ra các khối cần thiết.
Block cung cấp dạng lập trình dạng nếu thì:
Nếu A thì B (Nếu xảy ra việc A thì làm việc B) (Hình thứ nhất)
Nếu A thì B không thì C (Nếu xảy ra việc A thì làm việc B còn không thì làm việc C) (Hình thứ hai)
Nếu A thì B không thì nếu C thì D còn lại thì E (Nếu xảy ra việc A thì làm việc B, nếu A không xảy ra thì xét xem có việc C không, nếu có việc C thì làm việc D còn lại không nữa thì làm việc E) (Hình thứ ba)
- Block so sánh: Gồm các phép so sánh trong thực tế như toán học. Gồm những dạng chính sau:
Trong đó các phép toán cụ thể như sau:
= Trả về True (Đúng) nếu A bằng B
≠ Trả về True (Đúng) nếu A khác B (A không bằng B)
< Trả về True (Đúng) nếu A nhỏ hơn B
≤ Trả về True (Đúng) nếu A nhỏ hơn hoặc bằng B
˃ Trả về True (Đúng) nếu A lớn hơn B
≥ Trả về True (Đúng) nếu A lớn hơn hoặc bằng B
- Block logic: Gồm các phép toán logic, trong đó có 2 dạng chính sau:
and: Trả về True (Đúng) khi cả A và B đều đúng (Chỉ cần A hoặc B sai thì sẽ trả về False (Sai)).
or: Trả về True (Đúng) khi A hoặc B đúng (Chỉ cần A hoặc B đúng thì sẽ trả về True (Đúng)).
- Block phủ định:
Trả về dạng phủ định của A. Nếu A là True (Đúng) thì trả về False (Sai). Nếu A là False (Sai) thì trả về True (Đúng).
- Block true/fasle (Đúng/Sai): Chứa sẵn 2 giá trị True và False.
- Block rỗng: Chứa một giá trị rỗng (null) – Giá trị trống
- Block nếu thì rút gọn:
Một cách viết khác của Block If-else: Nếu A đúng nhưng dưới vai trò trả lại giá trị. Nếu A đúng thì trả về giá trị là B, nếu không (sai) thì trả về C.
2.Logic Blocks:
Loops Blocks là khối bao nhiều các Block có tính năng chung trong việc thực hiện các vòng lặp. Vòng lặp dùng để thực hiện lại một việc trong nhiều lần mà không cần phải sử dụng nhiều lệnh. Khối Loops Blocks bao gồm các khối chính là: Lặp theo số lần biết trước, Lặp đến khi, Lặp theo biến đến và nhảy khỏi vòng lặp.
- Repeat Block:
Thực hiện việc A với số lần nằm trong ô màu xanh dương. Với hình trên là 10 lần. Dưới đây sẽ có 1 Block khác làm tương tự việc này nhưng có sai khác một chút.
(Chú ý: A chỉ để phục vụ việc viết tài liệu. Việc kéo khối A như trên vào chương trình có thể chạy không đúng ý muốn của người lập trình).
- Repeat while/until Blocks:
Có 2 dạng như hình trên:
repeat while: Thực hiện lặp làm việc B khi mà A còn đúng (Thường áp dụng cho việc khi B chạy sẽ ảnh hưởng đến sự đúng sai của A).
repeat until: Thực hiện lặp làm việc B cho đến khi A đúng, nếu A đúng thì dừng lại (Thường áp dụng cho việc khi B chạy sẽ ảnh hưởng đến sự đúng sai của A).
(Chú ý: B chỉ để phục vụ việc viết tài liệu. Việc kéo khối B như trên vào chương trình có thể chạy không đúng ý muốn của người lập trình).
- Repeat Loop with variable:
Như đã nói ở trên, hàm này tương tự như Repeat Block (Thực hiện làm việc A 10 lần) tuy nhiên Block này có sai khác là trong hàm B có thể sử dụng biến i vào một công việc nào đó còn hàm Repeat bên trên thì không hỗ trợ tính năng này.
(Chú ý: A chỉ để phục vụ việc viết tài liệu. Việc kéo khối A như trên vào chương trình có thể chạy không đúng ý muốn của người lập trình).
- Control Repeat Block:
Dùng để điều khiển các vòng lặp chủ động hơn.
Yêu cầu bắt buộc của Control Repeat Block là phải nằm trong một vòng Loop nào đó. Nếu không nằm trong vòng Loop sẽ trả về kết quả lỗi như hình bên trái. Block này gồm 2 chế độ như sau:
break out: Dùng để thoát ngay lập tức đến Block nằm ngay sau vòng lặp ra khỏi vòng Loop (Lặp) ngay tại thời điểm gặp lệnh break out.
continue with next interation: Dừng ngay các lệnh ngay phía sau và chạy vòng lặp mới. (Quay lại đầu vòng lặp với số vòng lặp còn lại giảm đi 1)
3.Math Blocks:
Math Blocks bao gồm các Block về toán học và tính toán (Trong lập trình sử dụng rất nhiều các tính toán gần với toán học).
- Number Block:
Dùng để điền các số mong muốn phục vụ tính toán (Có thể là số nguyên, hoặc số thập phân, âm, dương).
- 2 Object Calculator Block:
Thực hiện các phép toán đơn giản với 2 đối số như: Cộng, Trừ, Nhân, Chia, hàm mũ. (Việc thực hiện các công thức toán dài hơn 2 đối số có thể được chia thành từng cặp 2 đối số rồi ghép chồng nhau)
Ví dụ trên trả về kết quả của việc cộng A với 123.
- 1 Object Calculator Block:
Thực hiện các phép toán với một đối số như: Khai căn (square root), trị tuyệt đối (absolute), lấy âm (-), logarit (ln, log), hàm mũ (e, 10)…
- Geometry Calculator Block:
Phục vụ tính toán các tính toán hình học thường dùng như: sin, cos, tan, asin, acos, atan.
- Defined Number Block:
Là Block chứa các số quen thuộc trong toán học bao gồm như hình dưới đây:
- Check Number Block:
Là Block để kiểm tra các dạng số, biến có phải là dạng cần thiết không như: dương, âm, chẵn, lẻ, nguyên, nguyên tố, chia hết cho, …
- Increase by 1 Block:
Dùng để tăng 1 biến, số lên 1 đơn vị.
- Round Block:
Dùng để làm tròn các biến, số được đưa vào trong đó có 3 dạng: Tròn tự nhiên, tròn xuống và tròn lên)
- Remain Divide Block:
Trả về kết quả chia dư của một biến/số cho 1 biến/số.
- Limited Number Block:
Dùng để chặn một số thoát khỏi một vùng giá trị quy định sẵn. Nếu lớn hơn vùng đó thì bằng số lớn nhất, nếu nhở hơn vùng đó thì bằng số nhỏ nhất.
Nếu A nhỏ hơn 1 thì trả về bằng 1, nếu A lớn hơn 100 thì trả về bằng 100
- Random Block:
Trả về một số nguyên ngẫu nhiên trong khoảng quy định.
Trả về một số ngẫu nhiên trong khoảng 1 đến 100
- Float Random Block:
Trả về một số thực ngẫu nhiên trong khoảng từ 0.0 đến 1.0.
- Remap Block:
Chuyển đổi giá trị trong khoảng 0-1024 về giá trị theo tỉ lệ tương ứng theo tỉ lệ chia đều. (Phóng to hoặc thu nhỏ theo kích thước gốc mới) (1024 là do bộ đọc giá trị tương tự của KIT hỗ trợ độ phân giải 10 bit. Các bạn có thể tìm hiểu ADC nếu cần thiết)
Trả về sự chuyển đổi của biến item (từ 0-1024 về dạng 0-100). Nếu 0 thì trả về 0, 1024 thì trả về 100, 512 thì trả về 50.
4.Text Blocks:
Là Blocks bao gồm các Block dành cho việc xử lý và lưu trữ dữ liệu chuỗi hoặc dạng văn bản. Ngoài xử lý dữ liệu số, máy tính còn có khả năng giải quyết các bài toán dưới dạng ký tự, chuỗi ký tự.
- Create Text Block:
Dùng để tạo một chuỗi với nội dung do người dùng nhập.
Gán biến item là dạng text với giá trị là “Hello CloverBlock”
- Join Text Block:
Ghép hai hay nhiều đoạn text thành một đoạn text.
Ghép “Hello” và “CloverBlock” thành “HelloCloverBlock”
- Append Text Block:
Thêm vào cuối đoạn văn bản một đoạn văn bản khác.
Văn bản item được nối thêm đoạn “Hello” ở cuối
- Length Text Block:
Trả về số ký tự của đoạn văn bản (Bao gồm cả dấu cách)
Trả về số ký tự của chuỗi văn bản item.
- Empty Check Block:
Kiểm tra một biến văn bản có phải là một đoạn trống không (Không bao gồm ký tự nào cả).
Kiểm tra biến văn bản item có phải là đoạn văn bản rỗng không
- Location Text Block:
Kiểm tra một đoạn văn bản nằm ở vị trí nào trong một đoạn văn bản khác. (Nếu không nằm trong thì trả về -1, nếu có thì trả về vị trí). VD: Nếu kiểm tra “CloverBlock” nằm ở đâu trong “Hello CloverBlock” thì sẽ trả về là 6. Nếu kiểm tra “Clover Block” nằm ở đâu trong “Hello CloverBlock”thì sẽ trả về -1.)
Kiểm tra vị trí của chuỗi “Hello” trong chuỗi item.
5.Variable Blocks:
Là Blocks chứa các Block về làm việc với biến. Biến là một đặc tính quan trọng trong lập trình, là nơi lưu trữ các dữ liệu kết quả trung gian trong suốt quá trình thực hiện chương trình. Biến thường được lưu trữ trong RAM của các máy tính. Biến là một thành phần có thể thay đổi giá trị trong quá trình chạy của máy tính vì vậy đây là một phần tử có tính linh hoạt cao như dùng để lưu trữ kết quả của các phép tính, chứa dữ liệu của các cảm biến để chuyển lên màn hình,….
- Item Block:
Khối sử dụng biến như là đầu vào, lấy giá trị của biến.
- Set Item Block:
Gán giá trị cho biến.
B là Item Block. Thực hiện lấy giá trị của B và ghi vào A. Sau phép này thì A=B
Có thể tùy chọn biến muốn đặt giá trị, đổi tên biến hoặc tạo ra biến mới
- Convert Type Block:
Lấy dữ liệu dưới dạng kiểu dữ liệu tùy chọn. Hỗ trợ các kiểu: ký tự, chuỗi ký tự, Boolean(True/False), các loại số.
- Convert and Get Block:
Là ghép của 2 Block: Set và Convert Type Block.
Chuyển số 1000 thành dạng văn bản rồi ghi vào biến A. Sau khi thực hiện A là chuỗi ký tự có nội dung là “1000”
6.Time Blocks:
Chứa các hàm về thời gian. Trong đó có các hàm về chờ một khoảng thời gian hoặc lấy dữ liệu thời gian từ hệ thống.
- Wait milliseconds Block:
Chờ một khoảng ms (mili giây). Cho chương trình dừng lại tại điểm đó trong thời gian mong muốn.
- Wait milliseconds Block:
Chờ một khoảng us (micro giây). Cho chương trình dừng lại tại điểm đó trong thời gian mong muốn.
- Get Time as millisecond Block:
Get Time as millisecond Block: Lấy về số mili giây kể từ khi kit bắt đầu chạy chương trình (Khi cắm nguồn, hoặc khởi động lại thời gian sẽ được tính từ 0).
- Get Time as microsecond Block:
Lấy về số micro giây kể từ khi kit bắt đầu chạy chương trình (Khi cắm nguồn, hoặc khởi động lại thời gian sẽ được tính từ 0)
- Wait forever Block:
Chờ chương trình Reset hoặc được cấp nguồn lại từ đầu.
7.In/Out (Port) Blocks:
Chứa các Block về điều khiển các mức logic ở từng Port của Board mạch. Ở đây quy định mức cao (HIGH) là 5V, mức thấp (LOW) là 0V. (Có thể tìm hiểu về điện thế, họ TTL)
- Set Digital Block:
Ghi dữ liệu mức cao hay mức thấp ra Port tương ứng. Với mức cao (HIGH) là xuất ra 5V, mức thấp (LOW) là xuất ra 0V.
- Read Digital Block:
Đọc về dữ liệu số từ Port tương ứng. Nếu Port có điện áp đưa vào là 5V thì trả về mức HIGH, nếu Port có điện áp 0V thì trả về mức LOW.
- Set Analog Block:
Ghi dữ liệu Analog (Tương tự) ra Port tương ứng. Cho phép ghi dữ liệu trong khoảng 0-255 (Tương ứng với điện áp từ 0-5V; Giá trị 0 tương ứng 0V, Giá trị 255 tương ứng 5V). (Bạn đọc có thể tìm hiểu về PWM nếu muốn biết sâu hơn)
- Read Analog Block:
Đọc dữ liệu Analog (Tương tự) được đưa vào Port tương ứng. Giá trị trả về trong khoảng (0-1023) (0V thì trả về 0, 5V thì trả về 1023, 2.5V thì trả về 511). Công thức tính cụ thể như sau:
8.Input Blocks:
Cung cấp các hàm giao tiếp với các module có vai trò là đầu vào dữ liệu. Hiện nay khối này cung cấp các Block đọc dữ liệu từ các đầu vào sau: Nút nhấn, Chiết áp,… (Sẽ tiếp tục cập nhật).
- Button Block:
Đọc giá trị hiện tại của nút nhấn: Đang được nhấn hay đang không được nhấn từ các kết nối với các Port tương ứng. Giá trị trả về là HIGH hoặc LOW tương ứng với không được nhấn và được nhấn.
- Button Press Block:
Trả về True nếu có sự kiện nhấn rồi nhả nút ra. Mỗi lần nhấn rồi nhả ra chỉ trả về 1 lần giá trị True. Nếu trả về True tức là nút nhấn vừa được nhấn rồi nhả.
- Read Potentiometer Block:
Đọc về giá trị trả về của chiết áp. Chiết áp là một module cho phép người dùng vặn xoay theo các góc quay, tương ứng với các góc quay sẽ trả về giá trị điện áp thay đổi tương ứng. Khi kết nối Module chiết áp vào Board có thể dùng Block này để đọc xem giá trị từ đó đưa ra các điều khiển phù hợp. Giá trị trả về nằm trong khoảng tương ứng từ 0 đến 1023 (Xem phần: Read Analog Block)
9.Output Blocks:
Cung cấp các Block về giao tiếp với các module điều khiển dữ liệu ra. Hiện nay Block đầu ra dùng để điều khiển module LED đơn. Block cho phép thay đổi dữ liệu của LED như sáng, tắt hoặc điều chỉnh độ sáng tương ứng của LED.
- Control LED Block:
Cho phép thay đổi trạng thái của Module LED dưới 2 dạng sáng (ON) hoặc tắt (OFF). Dữ liệu đầu vào có thể chọn cố định là ON/OFF hoặc lấy dữ liệu đầu vào từ một biến khác (Dữ liệu từ nút nhấn chẳng hạn).
- Set Brightness LED Block:
Điều khiển độ sáng module LED ở Port tương ứng. Giá trị cho phép nhập vào nằm trong khoảng từ: 0-255. (0 tương ứng với sáng nhất, 255 tương ứng với tối nhất). Các giá trị nằm ngoài khoảng 255 có thể làm chương trình chạy sai ý mong muốn. (Tham khảo Block: Limited Number Block hoặc Remap Block)
10.Display Blocks:
Cung cấp Block về giao tiếp với module hiển thị. Hiện tại Block cung cấp các chương trình giao tiếp với module LED 7 thanh dùng để hiển thị số (Sẽ tiếp tục cập nhật).
- Write to LED7SEG Block:
Hiển thị một số lên module LED 7 thanh ở Port tương ứng. Cho phép hiển thị các số nguyên, số thực dương trong khoảng 0 đến 9999 và các số âm trong khoảng 0 đến -999.
11.Sensor Blocks:
Bao gồm các Block giao tiếp và lấy dữ liệu từ các module cảm biến. Hiện nay Sensor Blocks gồm các Block giao tiếp với các cẩm biến như: Cảm biến nhiệt độ, độ ẩm; cảm biến ánh sáng, cảm biến khoảng cách.(Tiếp tục cập nhật)
- Read Distance Block:
Cho phép đọc dữ liệu khoảng cách của cảm biến khoảng cách được kết nối với Port tương ứng. Dữ liệu trả về là khoảng cách từ cảm biến đến vật cản tính theo đơn vị là cm.
Trả về dữ liệu cảm biến khoảng cách được kết nối ở Port 2
- Read Temperature Block:
Cho phép đọc dữ liệu nhiệt độ của cảm biến nhiệt độ, độ ẩm được kết nối với Port tương ứng. Dữ liệu trả về là nhiệt độ môi trường do cảm biến đo được tính theo đơn vị là độ C.
Trả về dữ liệu nhiệt độ cảm biến nhiệt độ, độ ẩm được kết nối ở Port 1
- Read Humidity Block:
Cho phép đọc dữ liệu độ ẩm của cảm biến nhiệt độ, độ ẩm được kết nối ở Port tương ứng. Dữ liệu trả về là độ ẩm môi tường do cảm biến đo được tính theo đơn vị là %.
Trả về dữ liệu độ ẩm của cảm biến nhiệt độ, độ ẩm được kết nối ở Port 1
- Read Light as Analog Block:
Cho phép đọc dữ liệu ánh sáng dưới dạng Analog của cảm biến ánh sáng được kết nối ở Port tương ứng. Có 2 chế độ đọc là PERCENT và VALUE. PERCENT cho phép dữ liệu trả về nằm trong khoảng 0-100%, VALUE cho phép dữ liệu trả về dưới dạng từ 0 đến 1023 (Tham khảo Read Analog Block).
Đọc dữ liệu cảm biến ánh sáng dưới dạng Analog ở Port 1
- Read Light as Digital Block:
Cho phép đọc dữ liệu cảm biến ánh sáng ở Port tương ứng dưới dạng số. Chỉ có 2 kết quả trả về là sáng hoặc tối (Tương ứng với True và False).
Đọc dữ liệu cảm biến ánh sáng dưới dạng sáng hay tối ở Port 1