Índice:

Interface de um CMUCam2 com um OOPIC: 5 etapas
Interface de um CMUCam2 com um OOPIC: 5 etapas

Vídeo: Interface de um CMUCam2 com um OOPIC: 5 etapas

Vídeo: Interface de um CMUCam2 com um OOPIC: 5 etapas
Vídeo: The Personal Rover Project: Robotics for the Masses 2024, Julho
Anonim

Por arsinioFollow Mais do autor:

Conectando dois OOBoards juntos usando I2C
Conectando dois OOBoards juntos usando I2C
Conectando dois OOBoards juntos usando I2C
Conectando dois OOBoards juntos usando I2C

Visão geral de como fazer a interface entre um CMUCam2 e OOPIC.

Etapa 1: Fazendo o cabo adaptador

Fazendo o cabo adaptador
Fazendo o cabo adaptador

1. Vá para o radioshack e compre 2 destes: Conector de copo de solda DB-9 macho2. soldar o pino 5 no conector A ao pino 5 no conector B (se você olhar com atenção no conector, eles estão marcados) 3. soldar o pino 2 no conector A ao pino 3 no conector B (se você olhar com atenção no conector, eles estão marcados) 4. soldar o pino 3 no conector A ao pino 2 no conector B (se você olhar com atenção no conector, eles estão marcados)

Etapa 2: alterar a taxa de transmissão no CMUCam

Alterar a taxa de transmissão no CMUCam
Alterar a taxa de transmissão no CMUCam

Altere a taxa de transmissão do CMUCamera para 9600 baud (adicione um jumper à posição 0).

Etapa 3: Conecte o cabo de programação padrão e o código de upload

Conecte o cabo de programação padrão e o código de upload
Conecte o cabo de programação padrão e o código de upload

Conecte o cabo de programação padrão e carregue seu código. Aqui está um exemplo de código para você começar. Este código rastreará o movimento usando os comandos LF e FD. Ele alternará a IOLine 7 (conectada a um LED) e refletirá o LED de status de rastreamento no CMUCam.

& apos ******** objetos relacionados à porta serial ******** Dim serialPort As New oSerialPortDim txBuff As New oBuffer27 & aposchange o 27 para tornar o buffer maior / menorDim rxBuff As New oBuffer10Dim serialActive_LED As New oDIO1Dim toggleSerial_Button As Novo oDIO1Dim toggleSerial_Event As Novo oEventDim toggleSerial_Wire As Novo oWireDim serialReceive_Event As Novo oEventDim serialReceive_Wire As Novo oWire & apos ******** depurar objetos relacionados ******** Dim statLED Como Novo oDIO1 & apos* ******* ******* *************************************** & apos * Subrotinas genéricas * & apos ****** *********************************** Sub main & aposinitialize tudo main_init & aposset nossa máscara de saída para apenas siga o centro de massa CMUCAM_setOutputMask (2, 3) & aposload nosso quadro de diferença inicial CMUCAM_loadDiffFrame () & aposstart o cálculo de diferença CMUCAM_startDiffCalc (10) End SubSub main_init & aposinicialize um LED de status statLED. IOLine = 7 apostLEDial_direcionamento & porta serial = cvinputize) Fim Su b & aposprocesses recebidos packetsSub processPacket () Dim mx As Byte Dim my As Byte & aposcheck para Mx e My ser 0 & aposconcedido se eles não forem 0, o local estará fora (ie & aposT 12 34) & aposbut então eles & apost atenderão aos 0 critérios rxBuff. Location = 2 mx = rxBuff. Value rxBuff. Location = 4 my = rxBuff. Value & aposthe led deve piscar em uníssono com o LED de rastreamento na câmera If (mx = "0") And (my = "0") statLED = 0 Else statLED = 1 End IfEnd Sub & apos ****************************************** **** & apos * Funções CMU Cam * & apos *************************************** ******* & apossets o led fornecido para on, off, automatic & aposparam ledNum número de led (0, 1) & aposparam val off, on, auto (0, 1, 2) Função CMUCAM_ledSet (ledNum como Byte, val como Byte) Como Byte & aposVString não estava funcionando direito no novo compilador… & aposnão tenho certeza sobre o antigo & apostxBuff. VString = "L0 0" & apossetup nossa seqüência de comando manualmente txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 & aposthe s tr $ function é uma merda… então agora isso está acontecendo 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 o comando serial_SendBufferEnd Sub & aposloads a diferença inicial frameSub CMUCAM_loadDiffFrame () & apossetup nossa string de comando manualmente txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 txBuff. Value = "F" txBuff. Location = 2 txBuff. Location. Value = 13 & apossend the command serial_SendBufferEnd Sub & aposstarts calculando as diferenças de frame & aposparam thresh threshold (0-9) Sub CMUCAM_startDiffCalc (thresh As Byte) Dim dezenas As Byte & apossetup nossa string de comando manualmente txBuff. Location = 0 txBuff. Value = "Focation" txBuff. 1 txBuff. Value = "D" txBuff. Location = 2 txBuff. Value = "" txBuff. Location = 3 dezenas = thresh / 10 txBuff. Value = serial_toChar (dezenas) txBuff. Location = 4 dezenas = thresh / 10 txBuff. Value = serial_toChar (thresh-dezenas) txBuff. Location = 5 txBuff. Value = 1 3 & apossend the command serial_SendBufferEnd Sub & apossets the output mask & aposparam packetType tipo de pacote a ser mascarado (0, 1, 2, etc) veja página 46 & aposparam mask mask value to apply (0-255) Sub CMUCAM_setOutputMask (packetType As Byte, mask As Byte) Dim centenas As Byte Dim tens As Byte & apossetup nossa string de comando manualmente txBuff. Location = 0 txBuff. Value = "O" txBuff. Location = 1 txBuff. Value = "M" txBuff. Location = 2 txBuff. Value = "" & apospacket tipo txBuff. Location = 3 txBuff. Value = serial_toChar (packetType) txBuff. Location = 4 txBuff. Value = "" & aposmask para aplicar txBuff. Location = 5 centenas = máscara / 100 txBuff. Value = serial_toChar (centenas) txBuff. Location = 6 dezenas = (máscara-centenas) / 10 txBuff. Value = serial_toChar (dezenas) txBuff. Location = 7 txBuff. Value = serial_toChar (máscara-centenas-dezenas) & aposcarriage return txBuff. Location = 8 txBuff. Value = 13 & apossend o comando serial_SendBufferEnd Sub & apos * ************************************************************ * & apo s ************************************************ & aposinicializa a série portSub serial_init () & aposinitialize um botão para ligar e desligar a porta serial (ligar para rodar, desligar para programar) toggleSerial_Button. IOLine = 5 toggleSerial_Button. Direction = cvInput toggleSerial_Wire. Input. Link (toggleSerial_Button. IOLine = 5 toggleSerial_Button. Direction = cvInput toggleSerial_Wire. Input. Link (toggleSerial_Button. Value). Link (toggleSerial_Event. Operate) toggleSerial_Wire. Operate = cvTrue & aposinitialize um evento para armazenar nossos dados serialReceive_Wire. Input. Link (serialPort. Received) serialReceive_Wire. Output. Link (serialReceive_Event. OperateReceive_Event. Operate) serialReceive_Event. Operate = 0 & aposinicializar nossa porta serial serialPort. Baud = cv9600 & aposinicializar nosso LED de status serial serialActive_LED. IOLine = 6 serialActive_LED. Direction = cvOutput & aposwait aqui até que nossa porta serial seja ativada Enquanto serialPort. Operate = cvFalse WendEnd Sub & aposcopies dados para nosso buffer conclusão de pacoteSub serialRe ceive_Event_Code () & apos.received torna-se falso quando o buffer de 4 bytes está vazio While (serialPort. Received = cvTrue) & aposcopia o byte para nosso buffer rxBuff. Value = serialPort. Value & aposcheck para o final do pacote Se rxBuff. Value = 13 & aposprocess pacote processPacket () & aposrepõe o buffer para o início rxBuff. Location = 0 Else rxBuff. Location = rxBuff. Location + 1 EndIf WendEnd Sub & apostorna e desativa a porta serial para a programaçãoSub toggleSerial_Event_Code () Se serialPort. Operate = cvFalsetive serial_Vent. serialPort. Operate = cvFalse serialActive_LED = 0 End IfEnd Sub & aposconverte um número de dígito único em um characterFunction serial_toChar (inVal As Byte) As Byte Dim retVal As Byte Selecione Case inVal Caso 0 retVal = "0" Caso 1 retVal = "1" Caso 2 retVal = "2" Caso 3 retVal = "3" Caso 4 retVal = "4" Caso 5 retVal = "5" Caso 6 retVal = "6" Caso 7 retVal = "7" Caso 8 retVal = "8" Caso 9 retVal = "9" End Select serial_toChar = retValEnd Function & apos sen ds os dados contidos em txBuff & apos Nota: certifique-se de que o buffer contém um retorno de carro (13) no final !! Sub serial_SendBuffer () & apositar, enviando cada byte, termina no retorno de carro txBuff. Location = 0 Enquanto 1 serialPort. Value = txBuff. Value ooPIC. Delay = 1 & apospode não precisar disso & aposver se fosse um retorno de carro If txBuff. Value = 13 & aposbreak fora de nosso loop Return End If & aposgo para o próximo caractere txBuff. Location = txBuff. Location + 1 WendEnd Sub

Etapa 4: Desconecte o Conector de Programação

Desconecte o conector de programação
Desconecte o conector de programação
Desconecte o conector de programação
Desconecte o conector de programação

Assim que o conector de programação for desconectado, conecte o novo conjunto de cabo conforme mostrado abaixo. O adaptador feito na etapa 1 deve permitir que o CMUCam seja conectado diretamente ao OOPIC

Etapa 5: pressione o botão para inicializar a comunicação serial

O botão no IOLine 5 iniciará a comunicação serial entre o CMUCam e o OOPIC. Como a porta serial é usada para programação e CMUCam, provavelmente deve haver uma maneira controlada de alternar entre as duas.

O programa não será executado até que este botão seja pressionado. Se você pressionar o botão novamente, a porta serial ficará inativa, permitindo que você a programe. O LED na IOLine 6 exibe o status atual da porta serial (aceso significa ativo, apagado significa pronto para programação).

Recomendado: