Mục lục:

Lập trình Micro: Bit Robot & Joystick: Bộ điều khiển Bit với MicroPython: 11 bước
Lập trình Micro: Bit Robot & Joystick: Bộ điều khiển Bit với MicroPython: 11 bước

Video: Lập trình Micro: Bit Robot & Joystick: Bộ điều khiển Bit với MicroPython: 11 bước

Video: Lập trình Micro: Bit Robot & Joystick: Bộ điều khiển Bit với MicroPython: 11 bước
Video: ✨✨✨22 Điều khiển Joy Stick - Hướng dẫn lập trình Micro:bit (https://dochoistem.com) 2024, Tháng mười một
Anonim
Lập trình Micro: Bit Robot & Joystick: Bộ điều khiển Bit với MicroPython
Lập trình Micro: Bit Robot & Joystick: Bộ điều khiển Bit với MicroPython

Đối với Robocamp 2019, trại robot mùa hè của chúng tôi, những người trẻ từ 10-13 tuổi đang hàn, lập trình và xây dựng 'robot đối kháng' dựa trên vi mô: bit của BBC, cũng như lập trình vi: bit để sử dụng làm điều khiển từ xa.

Nếu bạn hiện đang ở Robocamp, hãy chuyển sang Bước 3, vì chúng tôi đã thực hiện hai bước đầu tiên với tư cách là một nhóm

Đây là hướng dẫn từng bước để có được một rô bốt micro: bit giao tiếp với cần điều khiển: bộ điều khiển bit.

Nó không phải là con đường nhanh nhất để mọi thứ hoạt động, nhưng hãy thử mọi thứ theo từng phần nhỏ để bạn có thể kiểm tra mã như bạn đang làm, đặt dấu của riêng bạn vào nó và hiểu tại sao chúng tôi đang làm những việc chúng tôi đang làm !

Đối với hoạt động này, chúng tôi đang sử dụng rô bốt tùy chỉnh của riêng mình, nhưng nó sẽ hoạt động với bất kỳ rô bốt nào sử dụng trình điều khiển động cơ tương tự, chẳng hạn như L9110s.

Các tệp thiết kế cho rô bốt của chúng tôi có thể được tìm thấy tại đây:

Hướng dẫn này được viết cho người mới bắt đầu, nhưng nếu bạn chưa bao giờ sử dụng micro: bit với MicroPython trước đây, chúng tôi khuyên bạn nên thử một chương trình đơn giản hơn trước, chẳng hạn như huy hiệu tên của chúng tôi có thể hướng dẫn: https://www.instructables.com/id/Felt -Microbit-Nam…

Quân nhu

2x BBC vi mô: bit

Robot hoạt động với BBC micro: bit (xem giải thích ở trên)

cần điều khiển: bộ điều khiển bit (chúng tôi nhận được từ Cool Components)

Bước 1: Thiết lập Robot

Bạn có một số tùy chọn để viết mã MicroPython cho vi mô của mình: bit:

  • Mu, bạn có thể tải xuống và cài đặt từ đây:
  • Trình chỉnh sửa trực tuyến, bạn có thể tìm thấy ở đây:

Các hướng dẫn này giả sử bạn đang sử dụng Mu

Mở Mu và cắm micro: bit vào máy tính của bạn. Mu sẽ nhận ra rằng bạn đang sử dụng micro: bit và chọn 'Chế độ' micro: bit, nhưng nếu không, hãy thay đổi nó theo cách thủ công.

chọn chế độ
chọn chế độ

Nhận bản sao mã kiểm tra động cơ rô bốt từ đây:

Nếu bạn không quen với Github, nó có thể không trực quan! Hai cách dễ dàng để lấy mã này là:

  1. Lưu tệp Raw vào máy tính của bạn, sau đó tải nó vào Mu:
  2. Sao chép và dán tất cả mã đã cho vào một tệp mới trong Mu.
lưu tệp thô
lưu tệp thô

Bây giờ hãy nhấp vào nút 'Flash' từ thanh công cụ của Mu, để gửi mã mới của bạn tới micro: bit.

Điều này sẽ không hoạt động trừ khi micro: bit được cắm vào

Đèn vàng ở mặt sau của micro: bit sẽ bắt đầu nhấp nháy. Khi quá trình hoàn tất, mã của bạn đã được chuyển.

THIẾT LẬP HƯỚNG ĐỘNG CƠ

Chương trình này sẽ bật động cơ theo các hướng khác nhau khi bạn nhấn nút 'A' trên micro: bit.

Những gì bạn muốn xảy ra là:

  • Khi 'A' được hiển thị, động cơ trái chuyển tiếp
  • Khi 'B' được hiển thị, động cơ trái quay ngược lại
  • Khi 'C' được hiển thị, động cơ bên phải chuyển tiếp
  • Khi 'D' được hiển thị, động cơ phải quay ngược lại

Điều này có thể sẽ không xảy ra, vì nó phụ thuộc vào cách bạn kết nối với robot của mình!

Ở đầu đoạn mã, bạn sẽ tìm thấy danh sách các biến, xác định chân nào trên micro: bit điều khiển hướng động cơ.

Nếu bạn đang sử dụng một trong các rô bốt (tệp) của chúng tôi, hãy hoán đổi các tên biến xung quanh để rô bốt di chuyển theo đúng hướng:

hoán đổi các biến pin
hoán đổi các biến pin

Nếu bạn đang sử dụng rô-bốt của riêng mình, hãy kiểm tra xem trình điều khiển động cơ được kết nối với chân nào trước khi chỉnh sửa mã.

KIỂM TRA Ổ CỨU

Bây giờ, hãy kiểm tra cách rô-bốt của bạn lái bằng cách thay thế mã kiểm tra trong vòng lặp chính bằng một số mã của riêng bạn.

Bạn yêu cầu robot lái xe bằng cách gọi hàm drive (). Điều này nhận hai đối số - một giá trị cho động cơ bên trái và một giá trị cho động cơ bên phải, trong khoảng từ 0 (tắt) đến 1023 (tốc độ tối đa).

Ví dụ: bằng cách gọi drive (500, 500), bạn đang yêu cầu cả hai động cơ bật theo hướng về phía trước với tốc độ khoảng một nửa.

Hãy thử một số tùy chọn để cảm nhận cách nó lái thẳng và nó quay tốt như thế nào.

Gợi ý: các bài kiểm tra động cơ ở bên trong cả vòng lặp True và câu lệnh if - động cơ sẽ không quay cho đến khi bạn nhấn nút A trên micro: bit, và nó sẽ mãi mãi kiểm tra xem bạn đã nhấn nút A.

Gợi ý: động cơ sẽ không tắt cho đến khi bạn yêu cầu! Họ sẽ luôn tiếp tục thực hiện chỉ dẫn cuối cùng của họ.

TÙY CHỌN: NÂNG CAO LÁI XE TRONG DÒNG THNG

Nếu rô bốt của bạn không lái theo đường thẳng, một trong các động cơ của bạn có thể quay nhanh hơn động cơ kia.

Sau khi kiểm tra rằng không có gì cản trở bánh xe quay tự do, bạn có thể chỉnh sửa mã trong chức năng truyền động để giảm tốc độ của động cơ nhanh hơn.

Cuộn lên để tìm định nghĩa của chức năng ổ đĩa và xem hai hướng dẫn trên cùng:

ổ đĩa def (L, R):

# Dưới đây là điều chỉnh để khắc phục sự khác biệt về tốc độ động cơ L = int (L * 1) R = int (R * 1)

Hai dòng này hiện lấy giá trị của L và R, nhân chúng với 1, sau đó đảm bảo chúng vẫn là số nguyên (int).

Ví dụ: nếu động cơ bên trái của bạn nhanh hơn, hãy thay đổi * 1 trên vạch của nó thành * 0,9 và xem liệu điều đó có cải thiện mọi thứ hay không.

Bạn sẽ không thể làm cho nó hoàn hảo, nhưng bạn có thể tiếp tục điều chỉnh cho đến khi nó lái thẳng hơn.

THIẾT LẬP PHÁT THANH

Bây giờ, hãy thiết lập radio, bằng cách thêm các dòng sau vào đầu mã của bạn:

nhập radio

radio.config (kênh = 7, nhóm = 0, hàng đợi = 1) radio.on ()

Điều này sẽ cho phép rô bốt của bạn nhận hướng dẫn từ một micro: bit khác, nhưng hiện tại nó sẽ nhận hướng dẫn từ bất kỳ micro: bit nào khác.

Điều này là do kênh 7 và nhóm 0 là các kênh mặc định.

Thay đổi các số này, chọn kênh từ 0-82 và nhóm từ 0-255. Bây giờ micro: bit của bạn sẽ chỉ nhận được hướng dẫn từ những người khác có cùng thông tin cấu hình.

queue = 1 có nghĩa là micro: bit sẽ chỉ giữ một tin nhắn đến tại một thời điểm - điều này mang lại thời gian phản hồi nhanh hơn một chút so với mặc định, là 3.

Bây giờ, bạn cần chỉnh sửa mã vòng lặp chính của mình thành, thay vì chạy hướng dẫn khi bạn nhấn một nút, hãy đợi một tin nhắn radio đến và trả lời một cách thích hợp.

Hãy thử mã sau để kiểm tra (nó sẽ không thực hiện được bất kỳ điều gì cho đến khi bạn thiết lập cần điều khiển ở Bước 2):

trong khi Đúng:

message = radio.receive () if message == 'forward': drive (500, 500)

Bước 2: Thiết lập cần điều khiển

Rút phích cắm micro: bit của rô bốt và thay vào đó hãy cắm micro: bit của cần điều khiển

Nhận bản sao của mã thiết lập cần điều khiển từ đây:

Thiết lập bộ đàm bằng cách sử dụng cùng một cấu hình (kênh và số nhóm) như bạn đã làm cho rô bốt - điều này sẽ cho phép cả hai giao tiếp với nhau.

Vào cuối chương trình, hãy bắt đầu vòng lặp chính của bạn:

trong khi Đúng:

if button_a.was_pressed (): radio.send ('forward')

Mã này chưa sử dụng phím điều khiển: bit. Nó sử dụng nút A trên micro: bit để gửi tin nhắn.

Đảm bảo rằng cả rô bốt và vi điều khiển của bạn: bit đều có nguồn, sau đó nhấn nút để gửi tin nhắn của bạn.

Nếu thông báo được nhận thành công và rô bốt của bạn di chuyển… thì tốt quá! Bạn đã hoàn thành các hướng dẫn thiết lập.

NHỮNG MẸO XỬ LÍ SỰ CỐ

Nếu bạn nhận được thông báo lỗi trên vi điều khiển của mình: bit… hãy gỡ lỗi mã bộ điều khiển của bạn

Nếu bạn nhận được thông báo lỗi trên vi mô rô bốt của mình: bit… tin nhắn vô tuyến của bạn đã được gửi thành công! Nhưng rô bốt không thể hiểu được, vì vậy hãy kiểm tra xem tin nhắn bạn đã gửi và tin nhắn bạn đã nói với rô bốt nghe có khớp nhau không.

Nếu không có gì xảy ra cả

  • Đảm bảo rằng bạn đã flash đúng mã cho từng micro: bit - rất dễ vô tình flash nhầm!
  • Đảm bảo số kênh và số nhóm của bạn khớp nhau trên mỗi micro: bit

Bước 3: Kiểm tra các giá trị cần điều khiển

Các bước tiếp theo đều sử dụng mã bộ điều khiển

Trước khi có thể sử dụng cần điều khiển trên bộ điều khiển của mình, bạn cần biết loại giá trị nào bạn nhận được khi ấn cần.

Thay thế vòng lặp chính của bạn bằng mã sau:

trong khi Đúng:

phím điều khiển = phím điều khiển_push () in (phím điều khiển) chế độ ngủ (500)

Flash mã này vào micro: bit của bạn, sau đó nhấp vào nút REPL trên thanh công cụ của Mu. Thao tác này sẽ mở một thiết bị đầu cuối ở cuối trình chỉnh sửa, cung cấp cho bạn liên kết thời gian thực tới micro: bit.

mở REPL
mở REPL

Điều này sẽ không hoạt động trừ khi micro: bit được cắm vào

Khi mở REPL, nhấn nút đặt lại ở mặt sau micro: bit của bạn.

Hình ảnh
Hình ảnh

Bạn sẽ thấy một số giá trị được "in" trên màn hình của mình:

giá trị trong thiết bị đầu cuối
giá trị trong thiết bị đầu cuối

Đẩy thanh của cần điều khiển và xem điều gì xảy ra với các con số.

Ghi lại các giá trị đã cho khi cần điều khiển ở vị trí trung tâm - trong trường hợp của tôi là (518, 523).

Nhấp lại vào nút REPL trên thanh công cụ của Mu để đóng nó - bạn sẽ không thể flash mã mới vào micro: bit khi nó đang mở.

Bước 4: Điều chỉnh các biến X và Y

Bạn muốn thay đổi các giá trị được cung cấp bởi chức năng cần điều khiển, sao cho:

  • ở trung tâm nó là số không
  • lên là tích cực
  • xuống là tiêu cực.

Điều này phù hợp với các hướng dẫn mà robot cần - một số dương để lái xe tiến và một số âm để lái xe lùi.

Nhìn vào những con số bạn nhận được trong bước cuối cùng. Số đầu tiên là x, và số thứ hai là y.

Chỉnh sửa định nghĩa phím điều khiển_push () đã có trong chương trình để trừ các giá trị của bạn so với giá trị ban đầu:

def Joystick_push ():

x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 trả về x, y

Sử dụng số của riêng bạn, chúng có thể khác với của tôi

Flash mã mới của bạn, mở REPL, nhấn nút đặt lại micro: bit và kiểm tra các giá trị của bạn.

Bạn có nhận được (0, 0) không?

Bước 5: Chuyển đổi X và Y thành Giá trị cho Động cơ Trái và Phải

Hiện tại, cần điều khiển này sẽ không hữu ích lắm để điều khiển rô bốt. Được đẩy về phía trước, bạn sẽ nhận được một giá trị chẳng hạn như (0, 500).

Nếu bạn đưa những con số này cho robot, nó sẽ bật động cơ bên phải nhưng không bật động cơ bên trái, đó không phải là điều bạn muốn xảy ra!

Biểu đồ này cho thấy điều gì sẽ xảy ra với các giá trị x và y khi bạn di chuyển cần điều khiển và những gì chúng tôi muốn rô bốt thực hiện khi bạn di chuyển cần điều khiển.

biểu đồ
biểu đồ

Bạn cần sử dụng một số phép toán để kết hợp các giá trị x và y, nhằm cung cấp cho bạn một số thứ hữu ích hơn.

n

CÁC TRẬN ĐẤU

Hãy bắt đầu bằng cách đẩy cần điều khiển về phía trước.

Ví dụ về các giá trị bạn có thể nhận được là:

x = 0

y = 500

Để có ích cho rô bốt, bạn muốn nhận các giá trị như sau:

trái = 500

phải = 500

Hãy thử thêm x và y theo nhiều cách khác nhau để xem chúng ta nhận được những số nào:

x + y = 0 + 500 = 500

x - y = 0 - 500 = -500 y + x = 500 + 0 = 500 y - x = 500 - 0 = 500

Bây giờ chúng ta hãy xem điều gì sẽ xảy ra nếu chúng ta đẩy phím điều khiển sang bên phải.

Ví dụ về các giá trị bạn có thể nhận được là:

x = 500

y = 0

Để làm cho rô-bốt rẽ phải, bạn muốn động cơ bên trái lái tới và động cơ bên phải lái lùi:

trái = 500

phải = -500

Hãy thử lại công thức của chúng tôi:

x + y = 500 + 0 = 500

x - y = 500 - 0 = 500 y + x = 0 + 500 = 500 y - x = 0 - 500 = -500

So sánh hai bộ công thức để tìm ra tùy chọn nào sẽ cung cấp cho bạn giá trị bên trái chính xác và tùy chọn nào sẽ cung cấp cho bạn giá trị bên phải chính xác.

Hãy thử nó với một số giá trị bạn nhận được từ cần điều khiển của riêng mình, để đảm bảo công thức bạn chọn luôn hoạt động.

n

MỞ RỘNG CHỨC NĂNG JOYSTICK

Mở rộng và chỉnh sửa hàm cần điều khiển để tạo hai biến mới cho trái và phải, đồng thời trả về các giá trị đó thay vì x và y:

def Joystick_push ():

x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 left = right = return left, right

Flash mã mới của bạn, mở REPL, nhấn nút đặt lại micro: bit và kiểm tra các giá trị của bạn.

Bạn có đang nhận được những giá trị mà bạn mong đợi?

Nếu bạn cần thêm trợ giúp, hãy xem mã mẫu của chúng tôi tại đây:

Bước 6: Gửi các giá trị dưới dạng tin nhắn vô tuyến

Bây giờ bạn đã có một số giá trị sẵn sàng để gửi tới rô bốt của mình.

Chỉnh sửa vòng lặp chính của bạn để nó kiểm tra các giá trị của cần điều khiển, nhưng sau đó thay vì in các giá trị, nó sẽ sẵn sàng gửi chúng dưới dạng tin nhắn vô tuyến.

trong khi Đúng:

cần điều khiển = phím điều khiển_push () thông báo = str (phím điều khiển [0]) + "" + str (phím điều khiển [1])

Điều này sẽ không thực sự gửi tin nhắn!

Điều gì đang xảy ra trong dòng mã mới này?

  • phím điều khiển [0] có nghĩa là bit thông tin đầu tiên xuất phát từ chức năng phím điều khiển (bên trái)
  • cần điều khiển [1] là bit thông tin tiếp theo (bên phải)
  • str () chuyển đổi cả hai số này thành định dạng chuỗi (văn bản thay vì số) - điều này là cần thiết để có thể gửi thông tin qua radio.

Bạn sẽ quen với việc xem + nghĩa là phép cộng - nó vừa có thể cộng các số lại với nhau và nối các chuỗi, có nghĩa là nó sẽ gắn hai bit thông tin lại với nhau.

Thí dụ:

150 + 100 = 250

str (150) + str (100) = 150100

Vì vậy, nối sẽ gắn các giá trị bên trái và bên phải của bạn lại với nhau.

Để buộc tách biệt giữa hai bit thông tin (để rô bốt biết chúng là hai bit thông tin), hãy nối một chuỗi bổ sung vào giữa chúng bằng cách sử dụng "". Các dấu giọng nói xung quanh khoảng trắng có nghĩa là nó đã là một chuỗi.

Cuối cùng, hãy mở rộng mã của bạn để gửi tin nhắn mới tạo này qua radio:

radio.send (tin nhắn)

ngủ (10)

Chế độ ngủ làm chậm quá trình gửi tin nhắn để micro: bit nhận không bị quá tải với quá nhiều thông tin!

Flash mã này tới vi điều khiển của bạn: bit và gỡ lỗi bất kỳ lỗi nào trước khi chuyển sang bước tiếp theo

Bước 7: Nhận tin nhắn trên Robot của bạn

Quay lại mã rô-bốt của bạn từ đầu - hãy nhớ rút phích cắm micro: bit bộ điều khiển của bạn để bạn không vô tình cài mã rô-bốt vào nó

Cuộn xuống vòng lặp chính của bạn - xóa mã thử nghiệm và thêm mã này để thay thế:

trong khi Đúng:

message = radio.receive () print (message) sleep (100)

Điều này đặt một biến bằng với thông báo đến và in thông báo đó tới REPL - để kiểm tra xem các thông báo có được gửi đi như mong đợi hay không.

Flash mã mới của bạn, được kết nối với REPL, sau đó nhấn cần điều khiển.

Bạn sẽ nhận được một cái gì đó như thế này:

Giá trị REPL
Giá trị REPL

NHỮNG MẸO XỬ LÍ SỰ CỐ

Nếu bạn nhận được thông báo lỗi trên vi điều khiển của mình: bit… hãy gỡ lỗi mã bộ điều khiển của bạn

Nếu bạn nhận được thông báo lỗi trên vi mô rô bốt của mình: bit… tin nhắn vô tuyến của bạn đã được gửi thành công! Nhưng rô bốt không thể hiểu được điều đó, vì vậy hãy kiểm tra xem tin nhắn bạn đã gửi và tin nhắn bạn đã nói với rô bốt nghe có khớp nhau không.

Nếu không có gì xảy ra cả

  • Đảm bảo rằng bạn đã flash đúng mã cho từng micro: bit - rất dễ vô tình flash nhầm!
  • Đảm bảo số kênh và số nhóm của bạn khớp nhau trên mỗi micro: bit

Bước 8: Sử dụng Tin nhắn đến để điều khiển Động cơ của Robot

Bây giờ bạn đang nhận được hai số được gửi qua radio dưới dạng một chuỗi.

Bạn cần chia thông báo này thành hai chuỗi, sau đó chuyển đổi lại các chuỗi thành số và chuyển thông báo này vào hàm drive. Rất nhiều việc diễn ra cùng một lúc!

Trước khi thực hiện việc này, bạn cần kiểm tra xem tin nhắn bạn nhận được có đúng định dạng hay không.

Nếu không có tin nhắn nào được gửi đi, thay vào đó bạn sẽ nhận được 'Không có'. Nếu bạn thử và tách nó ra, bạn sẽ nhận được thông báo lỗi.

trong khi Đúng:

message = radio.receive () nếu thông báo không phải là Không có: message = message.split () drive (int (message [0]), int (message [1]))

Có chuyện gì đang xảy ra ở đây?

  • Mã mới sẽ chạy nếu thông báo là bất kỳ điều gì khác ngoài 'Không có'.
  • message.split () kiểm tra một khoảng trống trong thư (mà chúng tôi đã thêm ở bước cuối cùng) và sử dụng điều này để chia thư thành hai.
  • int (message [0]), int (message [1]) làm ngược lại với những gì chúng ta đã làm ở bước trước - lấy từng phần thông tin riêng lẻ và chuyển nó thành một số nguyên (một số nguyên).
  • int (message [0]) được sử dụng làm giá trị cho động cơ bên trái trong hàm truyền động và int (message [1]) được sử dụng làm giá trị cho động cơ bên phải.

Kiểm tra xem nó có hoạt động không - động cơ có quay khi bạn ấn cần điều khiển không?

Nếu không - thời gian để gỡ lỗi!

Nếu có, thật tuyệt vời! Bạn có một robot điều khiển từ xa đang hoạt động!

Dành một chút thời gian thực hành với robot của bạn trước khi chuyển sang bước tiếp theo. Nó có lái theo cách bạn mong đợi không?

Các bước tiếp theo sẽ hướng dẫn bạn cách sử dụng các nút trên cần điều khiển để thêm chức năng bổ sung cho rô bốt của bạn

Nếu bạn muốn xem phiên bản mã này của chúng tôi cho đến nay:

  • Robot:
  • Bộ điều khiển:

Bước 9: Sử dụng các nút - Nhận tin nhắn bổ sung

Hiện tại, mã của bạn sẽ cố gắng tách bất kỳ thông báo nào không phải là Không có. Điều này có nghĩa là nếu nó nhận được, ví dụ, 'xin chào', thì bạn sẽ nhận được thông báo lỗi.

Để cho phép micro: bit của bạn diễn giải các thông báo khác, trước tiên nó cần phải kiểm tra từng thông báo mong đợi, sau đó chỉ tách thông báo nếu nó không được yêu cầu làm bất kỳ điều gì khác với nó.

Mở rộng mã của bạn như vậy:

nếu thông báo không Không có:

if message == 'hello': display.show (Image. HAPPY) elif message == 'duck': display.show (Image. DUCK) else: message = message.split () drive (int (message [0]), int (message [1]))

Đầu tiên, nó sẽ kiểm tra xem nó đã nhận được thông báo 'xin chào' chưa. Nếu có, nó sẽ hiển thị một hình ảnh vui vẻ, sau đó quay lại đầu vòng lặp và kiểm tra thông báo tiếp theo.

Nếu tin nhắn không phải là lời chào, lần tiếp theo nó sẽ kiểm tra xem tin nhắn có phải là 'vịt' hay không.

Nếu thông báo không phải là 'xin chào' HOẶC 'vịt, nó sẽ thực hiện điều cuối cùng trong danh sách, đó là chia nhỏ thông báo và bật động cơ. Nó sẽ không cố gắng tách thư nếu nhận được 'hello' hoặc 'duck', nghĩa là bạn sẽ không nhận được thông báo lỗi từ một trong hai thông báo này.

Dấu bằng kép rất quan trọng - nó có nghĩa là 'bằng với', so với một dấu bằng đơn đang thiết lập một cái gì đó (vì vậy message = 'hello' có nghĩa là chúng ta đang đặt biến thành 'hello', message == 'hello' nghĩa là chúng tôi đang hỏi liệu tin nhắn có bằng 'xin chào').

Hãy thử nó chỉ với hai tùy chọn ngay bây giờ, để kiểm tra nó - bạn có thể thêm bao nhiêu tin nhắn khác tùy thích sau này.

Liên kết đến mã làm việc:

Bước 10: Gửi tin nhắn bổ sung bằng các nút của bộ điều khiển

Rút phích cắm micro: bit của rô bốt và thay vào đó hãy cắm micro: bit của cần điều khiển

Quay lại mã bộ điều khiển của bạn để chỉnh sửa.

Tương tự như mã rô bốt, chúng tôi muốn bộ điều khiển kiểm tra xem bạn có đang cố gửi bất kỳ tin nhắn nào khác hay không, trước khi gửi các giá trị cần điều khiển.

Ở đầu vòng lặp, chúng tôi vẫn muốn nó kiểm tra các giá trị hiện tại của cần điều khiển, nhưng chúng tôi cũng muốn nó kiểm tra xem một nút hiện đang được nhấn hay không:

trong khi Đúng:

cần điều khiển = phím điều khiển_push () nút = button_press ()

button_press () trả về giá trị A, B, C, D, E hoặc F tùy thuộc vào nút nào hiện đang được nhấn (nếu không có gì được nhấn, nó trả về Không có).

Bây giờ chúng ta có thể thực hiện một câu lệnh if-elif-else, như chúng ta đã làm đối với mã rô bốt - bằng cách sử dụng hai nút và gửi giá trị cần điều khiển nếu không có nút nào được nhấn.

nút if == 'A':

radio.send ('hello') sleep (500) elif button == 'B': radio.send ('duck') sleep (500) else: message = str (phím điều khiển [0]) + "" + str (phím điều khiển [1]) radio.send (tin nhắn) ngủ (10)

Khi một nút được nhấn, hãy gửi một trong các thông báo mà bạn đã yêu cầu rô bốt tìm kiếm ở bước trước.

Tin nhắn sẽ được gửi bất cứ khi nào nút được nhấn, và máy tính nhanh hơn nhiều so với con người! Vì vậy, nó có thể gửi tin nhắn rất nhiều lần trước khi bạn cố gắng rút ngón tay ra khỏi nút.

Chế độ ngủ sau khi gửi tin nhắn sẽ làm chậm nó, vì vậy nó sẽ không kiểm tra lại nút quá nhanh - hãy thử một vài số ở đây để có khoảng thời gian hoàn hảo cho bạn - quá chậm và nó cũng sẽ không phản hồi nhanh chóng và rô bốt của bạn sẽ nhận được nhiều thông báo nút đến mức nó có thể ngừng phản hồi với cần điều khiển!

Nó có hoạt động không?

Nếu bạn nhận được thông báo lỗi, hãy suy nghĩ cẩn thận về những gì bạn vừa thay đổi và những gì đang xảy ra.

Nếu bạn gặp lỗi trên rô-bốt khi nhấn một nút trên bộ điều khiển của mình - bạn biết rằng thông báo đang hiển thị nhưng nó đang làm rô-bốt nhầm lẫn. Kiểm tra xem tin nhắn bạn đã gửi và tin nhắn bạn đã yêu cầu rô bốt tìm kiếm có giống nhau không.

Liên kết đến mã làm việc:

Bước 11: Các bước tiếp theo

Giờ đây, bạn đã có kiến thức cần thiết để làm việc với động cơ của rô bốt và với cần điều khiển: bộ điều khiển bit

Sử dụng kiến thức này để cải thiện hai chương trình và biến chúng thành của riêng bạn. Vài ý kiến dưới đây!

Bạn có sáu nút trên bộ điều khiển của mình! Bạn muốn họ làm gì?

  • Làm thế nào về việc lập trình một thói quen khiêu vũ cho robot của bạn để thực hiện theo lệnh? Viết một giải thuật của các lệnh drive (), được phân tách bởi các lệnh sleep ()!
  • Bạn có muốn thay đổi hướng di chuyển của rô-bốt để có thể dễ dàng lái ngược không? Hãy nghĩ về các giá trị x và y của cần điều khiển của bạn. Chúng đại diện cho điều gì và bạn có thể thao túng chúng như thế nào?
  • Robot của bạn có (hoặc bạn có thể thêm!) Các tính năng bổ sung như đèn LED, loa hoặc cảm biến không?

Ý tưởng để cải thiện mã

  • Bạn có thể giúp rô-bốt của mình đối phó với các thông báo không xác định bằng cách sử dụng mã thử / ngoại trừ không?
  • Các phép toán được sử dụng để tính toán các giá trị trái và phải từ cần điều khiển không cung cấp cho chúng ta đầy đủ các giá trị (ổ đĩa của rô bốt có thể chấp nhận một số lên đến 1023). Bạn có thể chỉnh sửa mã này để có được phạm vi tốt hơn không?
  • Có những phương pháp khác để trộn các giá trị cần điều khiển - bạn có thể nghĩ ra cách tốt hơn để làm điều đó không?

Đề xuất: