Оглавление:

Взаимодействие CMUCam2 с OOPIC: 5 шагов
Взаимодействие CMUCam2 с OOPIC: 5 шагов

Видео: Взаимодействие CMUCam2 с OOPIC: 5 шагов

Видео: Взаимодействие CMUCam2 с OOPIC: 5 шагов
Видео: Бионический хомяк с iRobot Create 2024, Июль
Anonim

Подписаться Еще от автора:

Соединение двух OOBoard вместе с использованием I2C
Соединение двух OOBoard вместе с использованием I2C
Соединение двух OOBoard вместе с использованием I2C
Соединение двух OOBoard вместе с использованием I2C

Обзор того, как связать CMUCam2 с OOPIC.

Шаг 1. Изготовление переходного кабеля

Изготовление переходного кабеля
Изготовление переходного кабеля

1. Goto radioshack и купите 2 из них: штекер DB-9 Solder Cup Connector2. припаяйте контакт 5 на разъеме A к контакту 5 на разъеме B (если вы внимательно посмотрите на разъем, они промаркированы) 3. припаяйте контакт 2 на разъеме A к контакту 3 на разъеме B (если вы внимательно посмотрите на разъем, они промаркированы) 4. припаяйте контакт 3 на разъеме A к контакту 2 на разъеме B (если вы внимательно посмотрите на разъем, они отмечены)

Шаг 2: Измените скорость передачи на CMUCam

Измените скорость передачи данных на CMUCam
Измените скорость передачи данных на CMUCam

Измените скорость передачи CMUCamera на 9600 бод (установите перемычку в положение 0).

Шаг 3. Подключите стандартный кабель для программирования и загрузите код

Подключите стандартный кабель для программирования и загрузите код
Подключите стандартный кабель для программирования и загрузите код

Подключите стандартный кабель для программирования и загрузите свой код. Вот пример кода для начала. Этот код будет отслеживать движение с помощью команд LF и FD. Он будет переключать IOLine 7 (подключенный к светодиоду) и отображать светодиод состояния отслеживания на CMUCam.

& apos ******** Объекты, связанные с последовательным портом ******** Dim serialPort как новый oSerialPortDim txBuff как новый oBuffer27 & aposchange 27, чтобы сделать буфер больше / меньшеDim rxBuff как новый oBuffer10Dim serialActive_LED как новый oDIO1Dim toggleSerial_Button As Новый oDIO1Dim toggleSerial_Event как новый oEventDim toggleSerial_Wire как новый oWireDim serialReceive_Event как новый oEventDim serialReceive_Wire как новый oWire & apos ******** объекты, связанные с отладкой ******** Dim statLED как новый oDIO1 & apos ************************************* & apos * Общие подпрограммы * & apos ****** *************************************** Sub main & aposinitialize all main_init & aposset our output mask to только следовать за центром масс CMUCAM_setOutputMask (2, 3) & aposload наш начальный фрейм разницы CMUCAM_loadDiffFrame () & aposstart вычисления разницы CMUCAM_startDiffCalc (10) End SubSub main_init & aposinitialize светодиода состояния statLED. IOLine = 7 statLED. IOLine = 7 statLED_) Конец вс b 'обрабатывает полученные пакеты Sub processPacket () Dim mx As Byte Dim my As Byte' проверьте, чтобы Mx и My были равны 0 ', если они не равны 0, местоположение будет отключено (т.е.' 12 34), но тогда они не будут соответствовать критериям 0 rxBuff. Location = 2 mx = rxBuff. Value rxBuff. Location = 4 my = rxBuff. Value & apost светодиодный индикатор должен мигать в унисон со светодиодным индикатором отслеживания на камере If (mx = "0") And (my = "0") statLED = 0 Else statLED = 1 End IfEnd Sub & apos **************************************** **** & apos * Функции кулачка CMU * & apos ************************************** ******* & устанавливает данный светодиод на включение, выключение, автоматическое & aposparam ledNum количество светодиодов (0, 1) & aposparam val off, on, auto (0, 1, 2) Функция CMUCAM_ledSet (ledNum как байт, val как байт) Поскольку Byte & aposVString не & apost работал правильно в новом компиляторе … & aposnot уверен насчет старого & apostxBuff. VString = "L0 0" & apossetup нашу командную строку вручную txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 & aposthe s tr $ function отстой… так что теперь это происходит 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 the command serial_SendBufferEnd Sub & aposloads the initial разница frameSub CMUCAM_loadDiffFrame () & apossetup our command string вручную txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 txBuff. Value = "FxBuff. TxBuff. Location = 1 txBuff. Value =" FxBuffLoc "txBuff. Значение = 13 & отправьте команду serial_SendBufferEnd Sub & aposstarts вычисление разницы кадров & aposparam thresh threshold (0-9) Sub CMUCAM_startDiffCalc (thresh As Byte) Dim ten ten As Byte & apossetup our command string вручную txBuff. Location = 0 txBuffLocation = "F 1 txBuff. Value = "D" txBuff. Location = 2 txBuff. Value = "" txBuff. Location = 3 десятков = порог / 10 txBuff. Value = serial_toChar (десятки) txBuff. Location = 4 десятков = порог / 10 txBuff. Value = serial_toChar (пороги-десятки) txBuff. Location = 5 txBuff. Value = 1 3 & apossend команда serial_SendBufferEnd Sub 'устанавливает маску вывода & aposparam packetType type of package to mask (0, 1, 2, etc) see page 46 & aposparam mask mask value to apply (0-255) Sub CMUCAM_setOutputMask (packetType as Byte, mask as Byte) Dim сотни As Byte Dim tens As Byte & apossetup наша командная строка вручную txBuff. Location = 0 txBuff. Value = "O" txBuff. Location = 1 txBuff. Value = "M" txBuff. Location = 2 txBuff. Value = "" & apospacket type txBuff. Location = 3 txBuff. Value = serial_toChar (packetType) txBuff. Location = 4 txBuff. Value = "" & aposmask для применения txBuff. Location = 5 сотен = маска / 100 txBuff. Value = serial_toChar (сотни) txBuff. Location = 6 десятков = (маска-сотни) / 10 txBuff. Value = serial_toChar (десятки) txBuff. Location = 7 txBuff. Value = serial_toChar (маска-сотни-десятки) & aposcarriage return txBuff. Location = 8 txBuff. Value = 13 & apossend the command serial_SendBuffer * ******************************************* & apos * Общие последовательные подпрограммы * & апо s ****************************************************************************************************** portSub serial_init () & aposinitialize кнопку для включения и выключения последовательного порта (включить для запуска, выключить для программирования) toggleSerial_Button. IOLine = 5 toggleSerial_Button. Direction = cvInput toggleSerial_Wire. Input. Link (toggleSerial_Button. Link (toggleSerial_Event. Operate) toggleSerial_Wire. Operate = cvTrue & aposinitialize событие для буферизации наших данных = 0 & aposinitialize наш последовательный порт serialPort. Baud = cv9600 & aposinitialize наш серийный светодиодный индикатор статуса serialActive_LED. IOLine = 6 serialActive_LED. Direction = cvOutput & apos ждать здесь, пока наш последовательный порт не будет активирован Пока serialPort. Operate = cvFalse WendEnd Sub & aposcopies проверяет данные завершение пакета Sub serialRe ceive_Event_Code () & apos.received становится ложным, когда 4-байтовый буфер пуст. While (serialPort. Received = cvTrue) & aposcopy the byte to our buffer rxBuff. Value = serialPort. Value & aposcheck for end of package If rxBuff. Value = 13 & aposprocess packet process & aposreset буфер в начало rxBuff. Location = 0 Else rxBuff. Location = rxBuff. Location + 1 EndIf WendEnd Sub & apost включает и выключает последовательный порт для программирования Sub toggleSerial_Event_Code () If serialPort. Operate = cvFalse serialAevalse = Else serialPort. Operate = cvFalse serialActive_LED = 0 End IfEnd Sub & apos преобразует однозначное число в символ = "2" Случай 3 retVal = "3" Случай 4 retVal = "4" Случай 5 retVal = "5" Случай 6 retVal = "6" Случай 7 retVal = "7" Случай 8 retVal = "8" Случай 9 retVal = "9" End Select serial_toChar = retValEnd Function & apos sen ds данные, содержащиеся в txBuff & apos Примечание: убедитесь, что буфер содержит возврат каретки (13) в конце !! Sub serial_SendBuffer () & apositerate through, посылая каждый байт, конец при возврате каретки txBuff. Location = 0 Пока 1 serialPort. Value = txBuff. Value ooPIC. Delay = 1 'может не понадобиться', если это был возврат каретки. If txBuff. Value = 13 'выход из нашего цикла Return End If' перейти к следующему символу txBuff. Location = txBuff. Location + 1 WendEnd Sub

Шаг 4. Отключите коннектор программирования

Отключить коннектор для программирования
Отключить коннектор для программирования
Отключить коннектор для программирования
Отключить коннектор для программирования

После отсоединения разъема программирования присоедините новый кабель в сборе, как показано ниже. Адаптер, сделанный на шаге 1, должен позволять CMUCam напрямую подключаться к OOPIC.

Шаг 5: Нажмите кнопку для инициализации последовательной связи

Кнопка на IOLine 5 запускает последовательную связь между CMUCam и OOPIC. Поскольку последовательный порт используется как для программирования, так и для CMUCam, вероятно, должен быть контролируемый способ переключения между ними.

Программа не запустится, пока не будет нажата эта кнопка. Если вы нажмете кнопку еще раз, последовательный порт станет неактивным, что позволит вам его запрограммировать. Светодиод на IOLine 6 отображает текущее состояние последовательного порта (горит - активен, не горит - готов к программированию).

Рекомендуемые: