Mục lục:

Giao tiếp CMUCam2 với OOPIC: 5 bước
Giao tiếp CMUCam2 với OOPIC: 5 bước

Video: Giao tiếp CMUCam2 với OOPIC: 5 bước

Video: Giao tiếp CMUCam2 với OOPIC: 5 bước
Video: រៀនយ៉ាងណាឲ្យឆាប់ចេះ? | SAN SOCHEA OFFICIAL 2024, Tháng bảy
Anonim

Theo arsinioFollow More của tác giả:

Kết nối hai thẻ OOB với nhau bằng I2C
Kết nối hai thẻ OOB với nhau bằng I2C
Kết nối hai thẻ OOB với nhau bằng I2C
Kết nối hai thẻ OOB với nhau bằng I2C

Tổng quan về cách giao tiếp CMUCam2 với OOPIC.

Bước 1: Làm cáp bộ điều hợp

Làm cáp bộ điều hợp
Làm cáp bộ điều hợp

1. Goto radio và mua 2 trong số này: Đầu nối cốc hàn DB-9 Male2. hàn chân 5 trên đầu nối A đến chân 5 trên đầu nối B (nếu bạn nhìn kỹ trên đầu nối, chúng được đánh dấu) 3. hàn chân 2 trên đầu nối A đến chân 3 trên đầu nối B (nếu bạn nhìn kỹ trên đầu nối, chúng được đánh dấu) 4. hàn chân 3 trên đầu nối A đến chân 2 trên đầu nối B (nếu bạn nhìn kỹ trên đầu nối, chúng được đánh dấu)

Bước 2: Thay đổi tốc độ truyền trên CMUCam

Thay đổi tốc độ truyền trên CMUCam
Thay đổi tốc độ truyền trên CMUCam

Thay đổi tốc độ baud của CMUCamera thành 9600 baud (thêm một jumper vào vị trí 0).

Bước 3: Kết nối Cáp lập trình chuẩn và Mã tải lên

Kết nối cáp lập trình chuẩn và mã tải lên
Kết nối cáp lập trình chuẩn và mã tải lên

Kết nối cáp lập trình tiêu chuẩn và tải lên mã của bạn. Đây là một số mã ví dụ để bạn bắt đầu. Mã này sẽ theo dõi chuyển động bằng lệnh LF và FD. Nó sẽ bật tắt IOLine 7 (được nối với đèn LED) và phản chiếu đèn LED trạng thái theo dõi trên CMUCam.

& apos ******** các đối tượng liên quan đến cổng nối tiếp ******** Dim serialPort As New oSerialPortDim txBuff As New oBuffer27 & aposchange 27 để làm cho bộ đệm lớn hơn / nhỏ hơnDim rxBuff As New oBuffer10Dim serialActive_LED As New oDIO1Dim toggleSerial_Button As Mới oDIO1Dim toggleSerial_Event Như mới oEventDim toggleSerial_Wire Như mới oWireDim serialReceive_Event As mới oEventDim serialReceive_Wire As New oWire & apos ******** gỡ lỗi các đối tượng liên quan ******** Dim statLED As New oDIO1 & apos ******** ************************************** & apos * Chương trình con chung * & apos ****** **************************************** Sub main & aposinitialize mọi thứ main_init & aposset output mask của chúng tôi thành chỉ theo tâm khối lượng CMUCAM_setOutputMask (2, 3) & aposload khung chênh lệch ban đầu của chúng tôi CMUCAM_loadDiffFrame () & bắt đầu tính toán chênh lệch CMUCAM_startDiffCalc (10) End SubSub main_init & aposinitialize a LED trạng thái statLED. IOLine = 7 statLED. Dutirection) Cuối Su b & aposprocesses đã nhận được gói tin. Location = 2 mx = rxBuff. Value rxBuff. Location = 4 my = rxBuff. Value & dấu nháy đèn led sẽ nhấp nháy đồng thời với đèn LED theo dõi trên máy ảnh Nếu (mx = "0") Và (my = "0") statLED = 0 Khác statLED = 1 End IfEnd Sub & apos ****************************************** **** & apos * Chức năng CMU Cam * & apos *************************************** ******* & apossets led đã cho để bật, tắt, tự động & aposparam led Số lượng led (0, 1) & aposparam val off, on, auto (0, 1, 2) Function CMUCAM_ledSet (ledNum As Byte, val As Byte) Vì Byte & aposVString không hoạt động ngay trong trình biên dịch mới… & apos không chắc chắn về cái cũ & ApoxBuff. VString = "L0 0" & apossetup chuỗi lệnh của chúng tôi theo cách thủ công txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 & Apohe s tr $ function thật tệ… vì vậy bây giờ điều này đang xảy ra txBuff. Value = serial_toChar (ledNum) txBuff. Location = 2 txBuff. Value = "" txBuff. Location = 3 txBuff. Value = serial_toChar (val) txBuff. Location = 4 txBuff. Value = 13 & apossend lệnh serial_SendBufferEnd Sub & aposload khung khác biệt ban đầuSub CMUCAM_loadDiffFrame () & apossetup chuỗi lệnh của chúng tôi theo cách thủ công txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 txBuff. Value = "F" txBuff. Location = 2 txBuff. Value = 13 & apossend lệnh serial_SendBufferEnd Sub & aposstarts tính toán chênh lệch khung hình & ngưỡng thresh aposparam (0-9) Sub CMUCAM_startDiffCalc (thresh As Byte) Dim hàng chục As Byte & apossetup chuỗi lệnh của chúng tôi theo cách thủ công txBuff. Location = 0 txBuff. Value = "Focation" txBuff = 1 txBuff. Value = "D" txBuff. Location = 2 txBuff. Value = "" txBuff. Location = 3 tens = thresh / 10 txBuff. Value = serial_toChar (tens) txBuff. Location = 4 tens = thresh / 10 txBuff. Value = serial_toChar (thresh-tens) txBuff. Location = 5 txBuff. Value = 1 3 & apossend lệnh serial_SendBufferEnd Sub & apossets mặt nạ đầu ra & gói aposparam Loại gói dữ liệu vào mặt nạ (0, 1, 2, v.v.) xem trang 46 & giá trị mặt nạ aposparam để áp dụng (0-255) Sub CMUCAM_setOutputMask (packType As Byte, mask As Byte) Hàng trăm As Byte Dim tens As Byte & apossetup chuỗi lệnh của chúng ta theo cách thủ công txBuff. Location = 0 txBuff. Value = "O" txBuff. Location = 1 txBuff. Value = "M" txBuff. Location = 2 txBuff. Value = "" & apospacket gõ txBuff. Location = 3 txBuff. Value = serial_toChar (packetType) txBuff. Location = 4 txBuff. Value = "" & aposmask để áp dụng txBuff. Location = 5 trăm = mask / 100 txBuff. Value = serial_toChar (trăm) txBuff. Location = 6 tens = (mask-Hundred) / 10 txBuff. Value = serial_toChar (tens) txBuff. Location = 7 txBuff. Value = serial_toChar (mask-Hundred-tens) & aposcarriage return txBuff. Location = 8 txBuff. Value = 13 & apossend lệnh serial_SendBufferEnd Sub & apos * ********************************************* & apos * Chương trình con nối tiếp chung *&một PO s ********************************************** & aposinitializing serial portSub serial_init () & aposinitialize nút để bật và tắt cổng nối tiếp (bật để chạy, tắt để lập trình) toggleSerial_Button. IOLine = 5 toggleSerial_Button. Direction = cvInput toggleSerial_Wire. Input. Link (toggleSerial_Button. Value) toggleSerial_Wire. Output. Liên kết (toggleSerial_Event. Operate) toggleSerial_Wire. Operate = cvTrue & aposinitialize một sự kiện để đệm dữ liệu của chúng ta serialReceive_Wire. Input. Link (serialPort. Receive) serialReceive_Wire. Output. Link (serialReceive_Eventize. Operate RX của chúng tôi) serialReceive_Wireation rxBuffrate RX = 0. hoàn thành gói ceive_Event_Code () & apos.receive trở thành sai khi bộ đệm 4byte trống Trong khi (serialPort. Receive = cvTrue) & aposcopy byte vào bộ đệm của chúng tôi rxBuff. Value = serialPort. Value & aposcheck khi kết thúc gói Nếu rxBuff. Value = 13 & aposprocess gói processPacket () & apos đặt lại bộ đệm ở đầu rxBuff. Location = 0 Else rxBuff. Location = rxBuff. Location + 1 EndIf WendEnd Sub & dấu nháy bật và tắt cổng nối tiếp để lập trìnhSub toggleSerial_Event_Code () If serialPort. Operate = cvFalse serialPort. Operate 1 serialPort. Operate = cvFalse serialActive_LED = 0 End IfEnd Sub & aposconvert một số có một chữ số thành một ký tựFunction serial_toChar (inVal As Byte) As Byte Dim retVal As Byte Chọn trường hợp inVal Trường hợp 0 retVal = "0" Trường hợp 1 retVal = "1" Trường hợp 2 retVal = "2" Trường hợp 3 retVal = "3" Trường hợp 4 retVal = "4" Trường hợp 5 retVal = "5" Trường hợp 6 retVal = "6" Trường hợp 7 retVal = "7" Trường hợp 8 retVal = "8" Trường hợp 9 retVal = "9" End Chọn serial_toChar = retValEnd Chức năng & apos sen ds dữ liệu chứa trong txBuff & apos Lưu ý: đảm bảo bộ đệm chứa ký tự xuống dòng (13) ở cuối !! Sub serial_SendBuffer () & apositerate qua, gửi từng byte, kết thúc bằng ký tự xuống dòng txBuff. Location = 0 Trong khi 1 serialPort. Value = txBuff. Value ooPIC. Delay = 1 & aposmight không cần điều này & apossee nếu nó là ký tự xuống dòng Nếu txBuff. Value = 13 & aposbreak ra khỏi vòng lặp của chúng tôi Trả về Kết thúc Nếu & aposgo đến ký tự tiếp theo txBuff. Location = txBuff. Location + 1 WendEnd Sub

Bước 4: Hủy bỏ trình kết nối lập trình

Hủy bỏ trình kết nối lập trình
Hủy bỏ trình kết nối lập trình
Hủy bỏ trình kết nối lập trình
Hủy bỏ trình kết nối lập trình

Sau khi ngắt kết nối lập trình, hãy gắn cụm cáp mới như hình dưới đây. Bộ điều hợp được thực hiện ở bước 1 sẽ cho phép CMUCam được cắm trực tiếp vào OOPIC

Bước 5: Nhấn nút để khởi tạo giao tiếp nối tiếp

Nút trên IOLine 5 sẽ bắt đầu giao tiếp nối tiếp giữa CMUCam và OOPIC. Vì cổng nối tiếp được sử dụng cho cả lập trình và CMUCam, có lẽ nên có một cách kiểm soát để chuyển đổi giữa hai cổng.

Chương trình sẽ không chạy cho đến khi nút này được nhấn. Nếu bạn nhấn nút một lần nữa, cổng nối tiếp sẽ không hoạt động, cho phép bạn lập trình nó. Đèn LED trên IOLine 6 hiển thị trạng thái cổng nối tiếp hiện tại (bật nghĩa là hoạt động, tắt nghĩa là sẵn sàng lập trình).

Đề xuất: