Hình ảnh#

MicroPython cũng giỏi về nghệ thuật bằng bạn nếu điều duy nhất bạn có là một lưới đèn LEDs đỏ có kích thước 5x5 (điốt phát quang - những thứ phát sáng trên mặt trước của thiết bị). MicroPython cung cấp cho bạn khá nhiều quyền kiểm soát việc hiển thị để bạn có thể tạo ra tất cả các loại hiệu ứng thú vị.

MicroPython đi kèm với rất nhiều hình ảnh được xây dựng sẵn để hiển thị trên màn hình. Ví dụ, để làm cho thiết bị hiển thị trông hạnh phúc bạn gõ:

from microbit import *
display.show(Image.HAPPY)

Tôi đoán bạn có thể nhớ dòng lệnh đầu tiên làm gì. Dòng thứ hai sử dụng đối tượng display (hiển thị) để show(đưa ra) một hình ảnh được xây dựng sẵn. Hình ảnh hạnh phúc chúng ta muốn hiển thị là một phần của đối tượng Image (Hình ảnh) và được gọi là HAPPY (Hạnh phúc). Chúng ta ra lệnh cho show sử dụng nó bằng cách đặt nó giữa dấu ngoặc đơn (()).

Dưới đây là một danh sách các hình ảnh được xây dựng sẵn:

  • Image.HEART
  • Image.HEART_SMALL
  • Image.HAPPY
  • Image.SMILE
  • Image.SAD
  • Image.CONFUSED
  • Image.ANGRY
  • Image.ASLEEP
  • Image.SURPRISED
  • Image.SILLY
  • Image.FABULOUS
  • Image.MEH
  • Image.YES
  • Image.NO
  • Image.CLOCK12, Image.CLOCK11, Image.CLOCK10, Image.CLOCK9, Image.CLOCK8, Image.CLOCK7, Image.CLOCK6, Image.CLOCK5, Image.CLOCK4, Image.CLOCK3, Image.CLOCK2, Image.CLOCK1
  • Image.ARROW_N, Image.ARROW_NE, Image.ARROW_E, Image.ARROW_SE, Image.ARROW_S, Image.ARROW_SW, Image.ARROW_W, Image.ARROW_NW
  • Image.TRIANGLE
  • Image.TRIANGLE_LEFT
  • Image.CHESSBOARD
  • Image.DIAMOND
  • Image.DIAMOND_SMALL
  • Image.SQUARE
  • Image.SQUARE_SMALL
  • Image.RABBIT
  • Image.COW
  • Image.MUSIC_CROTCHET
  • Image.MUSIC_QUAVER
  • Image.MUSIC_QUAVERS
  • Image.PITCHFORK
  • Image.XMAS
  • Image.PACMAN
  • Image.TARGET
  • Image.TSHIRT
  • Image.ROLLERSKATE
  • Image.DUCK
  • Image.HOUSE
  • Image.TORTOISE
  • Image.BUTTERFLY
  • Image.STICKFIGURE
  • Image.GHOST
  • Image.SWORD
  • Image.GIRAFFE
  • Image.SKULL
  • Image.UMBRELLA
  • Image.SNAKE

Có khá nhiều! Tại sao không điều chỉnh mã lệnh làm cho micro:bit trông hạnh phúc để xem một số hình ảnh khác được xây dựng sẵn trông như thế nào? (Chỉ cần thay thế Image.HAPPY bằng một trong số những hình ảnh được xây dựng sẵn đã liệt kê ở trên.)

Hình ảnh DIY (Tự tay tạo)#

Tất nhiên, bạn muốn tạo ra hình ảnh của riêng bạn để hiển thị trên các micro:bit, phải vậy không?

Dễ lắm.

Mỗi pixel (điểm ảnh) LED trên màn hình hiển thị có thể được thiết lập một trong mười giá trị. Nếu một pixel được thiết lập là 0 (không) thì nó sẽ tắt. Nghĩa là nó có độ sáng bằng không. Tuy nhiên, nếu nó được thiết lập là 9 thì nó đang ở mức sáng nhất. Các giá trị từ 1 để 8 đại diện cho mức độ sáng giữa tắt (0) và sáng nhất ( 9).

Được trang bị thông tin này, ta hoàn toàn có thể tạo ra một hình ảnh mới như thế này:

from microbit import *

boat = Image("05050:"
             "05050:"
             "05050:"
             "99999:"
             "09990")

display.show(boat)

(Khi chạy, thiết bị sẽ hiển thị một thuyền buồm “Blue Peter” kiểu cũ với các cột buồm mờ hơn thân tàu.)

Bạn đã tìm ra cách để vẽ một bức tranh chưa? Bạn có nhận thấy rằng mỗi dòng của màn hình hiển thị được diễn tả bởi một dòng các con số kết thúc với dấu : và được đặt giữa dấu ngoặc kép "? Mỗi số quy định một độ sáng. Có năm dòng, mỗi dòng năm con số vì vậy nó có thể quy định độ sáng riêng lẻ cho từng pixel trong năm điểm ảnh trên từng dòng của năm dòng trên màn hình hiển thị. Đó là cách để tạo ra một hình ảnh mới.

Đơn giản vậy thôi!

Thực tế, bạn không cần phải viết trên nhiều dòng. Nếu bạn nghĩ rằng bạn có thể theo dõi từng dòng, bạn có thể viết lại như thế này:

boat = Image("05050:05050:05050:99999:09990")

Animation (Ảnh động)#

Hình ảnh tĩnh thì thú vị, nhưng còn thú vị hơn khi làm cho chúng chuyển động. Điều này cũng thật đơn giản khi thực hiện với MicroPython ~ chỉ cần sử dụng một danh sách các hình ảnh!

Đây là một danh sách mua sắm:

Eggs
Bacon
Tomatoes

Đây là cách bạn thể hiện danh sách này trong Python:

shopping = ["Eggs", "Bacon", "Tomatoes" ]

Tôi đơn giản tạo ra một danh sách gọi là shopping (mua sắm) và nó chứa ba mục. Python biết đó là một danh sách bởi vì nó được đặt trong dấu ngoặc vuông ([]). Các mục trong danh sách được phân cách bằng dấu phẩy (,) và trong trường hợp này các mục là ba chuỗi ký tự: "Egg (Trứng)", "Bacon (Thịt xông khói)""Tomatoes (Cà chua)". Chúng ta biết chúng là các chuỗi ký tự, vì chúng được đặt trong dấu ngoặc kép ".

Bạn có thể lưu trữ bất cứ điều gì trong một danh sách với Python. Đây là một danh sách các số:

primes = [2, 3, 5, 7, 11, 13, 17, 19]

Lưu ý

Số không cần phải được đặt trong ngoặc vì chúng đại diện cho một giá trị (chứ không phải là một chuỗi các ký tự). Đó là sự khác biệt giữa 2 (giá trị số 2) và "2" (ký tự/chữ số đại diện cho số 2). Đừng lo lắng nếu điều này vô nghĩa ngay bây giờ. Bạn sẽ sớm làm quen với nó thôi.

Ta còn có thể lưu trữ các thứ thuộc các loại khác nhau trong cùng một danh sách:

mixed_up_list = ["hello!", 1.234, Image.HAPPY]

Bạn có để ý mục cuối cùng không? Đó là một hình ảnh!

Chúng ta có thể ra lệnh cho MicroPython làm chuyển động một danh sách các hình ảnh. Chúng ta may mắn có một vài danh sách các hình ảnh đã được xây dựng sẵn. Chúng được gọi là Image.ALL_CLOCKS và Image.ALL_ARROWS:

from microbit import *

display.show(Image.ALL_CLOCKS, loop=True, delay=100)

Giống như với hình ảnh đơn, chúng ta sử dụng display.show để hiển thị nó trên màn hình của thiết bị. Tuy nhiên, chúng ta ra lệnh cho MicroPython sử dụng Image.ALL_CLOCKS và nó hiểu rằng nó cần hiển thị mỗi hình ảnh trong danh sách theo trật tự. Chúng ta cũng ra lệnh cho MicroPython tiếp tục lặp trên danh sách các hình ảnh (để ảnh động kéo dài mãi mãi) bằng cách khai báo loop = TRUE. Hơn nữa, chúng ta ra lệnh cho nó rằng chúng ta muốn delay (độ trễ) giữa mỗi hình ảnh là 100 mili giây (một phần mười của một giây) với tham số delay = 100.

Bạn có thể tìm cách để làm chuyển động trên danh sách Image.ALL_ARROWS không? Làm thế nào để bạn tránh vòng lặp mãi mãi (gợi ý: ngược với TRUE (Đúng) làFALSE (Sai) mặc dù giá trị mặc định cho loop (vòng lặp) làFALSE)? Bạn có thể thay đổi tốc độ của chuyển động không?

Cuối cùng, đây là cách để tạo ra hình ảnh động của riêng bạn. Trong ví dụ của tôi, tôi sẽ làm cho con thuyền của mình chìm vào phía dưới của màn hình hiển thị:

from microbit import *

boat1 = Image("05050:"
              "05050:"
              "05050:"
              "99999:"
              "09990")

boat2 = Image("00000:"
              "05050:"
              "05050:"
              "05050:"
              "99999")

boat3 = Image("00000:"
              "00000:"
              "05050:"
              "05050:"
              "05050")

boat3 = Image("00000:"
              "00000:"
              "05050:"
              "05050:"
              "05050")

boat5 = Image("00000:"
              "00000:"
              "00000:"
              "00000:"
              "05050")

boat6 = Image("00000:"
              "00000:"
              "00000:"
              "00000:"
              "00000")

all_boats = [boat1, boat2, boat3, boat4, boat5, boat6]
display.show(all_boats, delay=200)

Đây là cách mã lệnh hoạt động:

  • Tôi tạo ra sáu hình ảnh boat (con thuyền) chính xác như cách tôi mô tả ở trên.
  • Sau đó, tôi đặt tất cả chúng vào một danh sách mà tôi gọi là all_boats.
  • Cuối cùng, tôi ra lệnh cho display.show làm danh sách chuyển động với độ trễ 200 mili giây.
  • Bởi vì tôi không thiết lập loop=TRUE cho nên thuyền sẽ chỉ chìm một lần (như vậy, làm cho hình ảnh động của tôi chính xác về mặt khoa học). :-)

Bạn sẽ làm cái gì chuyển động? Bạn có thể tạo ra hiệu ứng chuyển động đặc biệt không? Làm thế nào bạn có thể làm một hình ảnh mờ dần đến biến mất và rồi hiện lên rõ dần trở lại?