Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
Par arsinioSuivez plus par l'auteur:
Vue d'ensemble de l'interface entre un CMUCam2 et un OOPIC.
Étape 1: fabrication du câble adaptateur
1. Allez sur radioshack et achetez-en 2: Connecteur de coupelle à souder DB-9 mâle2. soudez la broche 5 du connecteur A à la broche 5 du connecteur B (si vous regardez attentivement sur le connecteur, elles sont marquées)3. soudez la broche 2 du connecteur A à la broche 3 du connecteur B (si vous regardez attentivement le connecteur, elles sont marquées)4. souder la broche 3 du connecteur A à la broche 2 du connecteur B (si vous regardez attentivement sur le connecteur, elles sont marquées)
Étape 2: modifier le débit en bauds sur la CMUCam
Modifiez le débit en bauds de la CMUCamera à 9600 bauds (ajoutez un cavalier à la position 0).
Étape 3: connectez le câble de programmation standard et téléchargez le code
Connectez le câble de programmation standard et téléchargez votre code. Voici un exemple de code pour vous aider à démarrer. Ce code suivra le mouvement à l'aide des commandes LF et FD. Il basculera IOLine 7 (connecté à une LED) et reflétera la LED d'état de suivi sur la CMUCam.
&apos******** objets liés au port série ********Dim serialPort comme nouveau Nouveau oDIO1Dim toggleSerial_Event comme nouveau oEventDim toggleSerial_Wire comme nouveau oWireDim serialReceive_Event comme nouveau oEventDim serialReceive_Wire comme nouveau oWire&apos******** objets liés au débogage ********Dim statLED comme nouveau oDIO1&apos******** **************************************&apos* Sous-routines génériques *&apos****** ******************************************** Sub main &aposinitialize tout main_init &aposset notre masque de sortie à suivre uniquement le centre de masse CMUCAM_setOutputMask(2, 3) &aposcharger notre cadre de différence initial CMUCAM_loadDiffFrame() &aposstart le calcul de différence CMUCAM_startDiffCalc(10)End SubSub main_init &aposinitialiser une LED d'état statLED. IOLine = 7 statLED. Direction = cvOutput serialinit(port_sérialiser notre port)Fin dim b&aposprocesses a reçu des paquetsSub processPacket() Dim mx As Byte Dim my As Byte &aposcheck pour que Mx et My soient à 0 &aposgraned s'ils ne sont pas à 0, l'emplacement sera désactivé (c'est-à-dire &aposT 12 34) &aposmais alors ils ont gagné&aposto remplissent les 0 critères rxBuff. Location = 2 mx = rxBuff. Value rxBuff. Location = 4 my = rxBuff. Value &aposthe led doit clignoter à l'unisson avec la led de suivi sur la caméra Si (mx = "0") Et (my = "0") statLED = 0 Else statLED = 1 End IfEnd Sub&apos************************************************ ****&apos* Fonctions CMU Cam *&apos****************************************** *******&apossets la led donnée sur on, off, automatic&aposparam ledNum nombre de led (0, 1)&aposparam val off, on, auto (0, 1, 2)Fonction CMUCAM_ledSet(ledNum As Byte, val As Byte) Comme l'octet &aposVString fonctionnait correctement dans le nouveau compilateur… &pas sûr de l'ancien &apostxBuff. VString = "L0 0" &apossetup notre chaîne de commande manuellement txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 &aposthe s La fonction tr$ craint… alors maintenant, cela se produit 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 la commande serial_SendBufferEnd Sub&aposcharge la différence initiale frameSub CMUCAM_loadDiffFrame() &apossetup notre chaîne de commande manuellement txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 txBuff. Value = "F" = 2 txBuff. Location Valeur = 13 &apossend la commande serial_SendBufferEnd Sub&aposcommence le calcul des différences de trames&aposparam seuil de seuil (0-9)Sub CMUCAM_startDiffCalc(thresh As Byte) Dim tens As Byte &apossetup notre chaîne de commande manuellement txBuff. Location = 0 txBuff. Location = "Buff.". 1 txBuff. Value = "D" txBuff. Location = 2 txBuff. Value = " " txBuff. Location = 3 dizaines = thresh/10 txBuff. Value = serial_toChar(tens) txBuff. Location = 4 dizaines = thresh/10 txBuff. Value = serial_toChar (seuil-dizaines) txBuff. Location = 5 txBuff. Value = 1 3 &apossend la commande serial_SendBufferEnd Sub&apossets le masque de sortie&aposparam packetType type de paquet à masquer (0, 1, 2, etc) voir page 46&aposparam mask valeur du masque à appliquer (0-255)Sub CMUCAM_setOutputMask(packetType As Byte, mask As Byte) Diminuer les centaines As Byte Dim dizaines As Byte &apossetup notre chaîne de commande manuellement txBuff. Location = 0 txBuff. Value = "O" txBuff. Location = 1 txBuff. Value = "M" txBuff. Location = 2 txBuff. Value = " " &type de paquet txBuff. Location = 3 txBuff. Value = serial_toChar(packetType) txBuff. Location = 4 txBuff. Value = " " &aposmask pour appliquer txBuff. Location = 5 centaines = mask/100 txBuff. Value = serial_toChar(cents) txBuff. Location = 6 dizaines = (mask-cents)/10 txBuff. Value = serial_toChar(tens) txBuff. Location = 7 txBuff. Value = serial_toChar(mask-hundreds-tens) &aposcarriage return txBuff. Location = 8 txBuff. Value = 13 &apossender la commande serial_SendBus&aposcarriage ***************************************************&apos* Sous-routines sérielles générales *&apo s************************************************&aposinitialise la série portSub serial_init() &aposinitialise un bouton pour activer et désactiver le port série (activer pour exécuter, désactiver pour programmer) toggleSerial_Button. IOLine = 5 toggleSerial_Button. Direction = cvInput toggleSerial_Wire. Input. Link(toggleSerial_Button. Outial. Value_Wire. Serial_Serial) Link(toggleSerial_Event. Operate) toggleSerial_Wire. Operate = cvTrue &aposinitialize un événement pour mettre en mémoire tampon nos données serialReceive_Wire. Input. Link(serialPort. Received) serialReceive_Wire. Output. Link(serialReceive_RXEvent. Operate_apo) serialReceive_Wire. Output. Link(serialReceive_RXEvent. Operate_apo) = 0 &aposinitialise notre port série serialPort. Baud = cv9600 &aposinitialise notre LED d'état série serialActive_LED. IOLine = 6 serialActive_LED. Direction = cvOutput &aposwait ici jusqu'à ce que notre port série soit activé Tandis que serialPort. Operate = cvFalse WendEnd Sub&aposcopie les données dans notre tampon de réception et vérifie achèvement de paquetSous sérieRe ceive_Event_Code() &apos.received devient faux lorsque le tampon de 4 octets est vide While(serialPort. Received = cvTrue) &aposcopie l'octet dans notre tampon rxBuff. Value = serialPort. Value &aposcheck pour la fin du paquet Si rxBuff. Value = 13 &aposprocess packet processPacket() &aposreset le tampon au début rxBuff. Location = 0 Else rxBuff. Location = rxBuff. Location + 1 EndIf WendEnd Sub&aposactive et désactive le port série pour la programmationSub toggleSerial_Event_Code() Si serialPort. Operate = cvFalse El serialPort. Operate = cvTruLEDe serial = cvTruLEDe serialPort. Operate = cvFalse serialActive_LED = 0 End IfEnd Sub&aposconvertit un nombre à un chiffre en un caractère. serial_toChar(inVal As Byte) As Byte Dim retVal As Byte Select Case inVal Case 0 retVal = "0" Case 1 retVal = "1" Case 2 retVal = "2" Cas 3 retVal = "3" Cas 4 retVal = "4" Cas 5 retVal = "5" Cas 6 retVal = "6" Cas 7 retVal = "7" Cas 8 retVal = "8" Cas 9 retVal = "9" End Select serial_toChar = retValEnd Function&apos sen ds les données contenues dans txBuff&apos Remarque: assurez-vous que le tampon contient un retour chariot (13) à la fin !! Sub serial_SendBuffer() &apositerate à travers, en envoyant chaque octet, se termine sur le retour chariot txBuff. Location = 0 Tandis que 1 serialPort. Value = txBuff. Value ooPIC. Delay = 1 &apos pourrait ne pas avoir besoin de cela &apossee s'il s'agissait d'un retour chariot Si txBuff. Value = 13 &aposbreak hors de notre boucle Return End If &aposgo au caractère suivant txBuff. Location = txBuff. Location + 1 WendEnd Sub
Étape 4: déconnectez le connecteur de programmation
Une fois le connecteur de programmation déconnecté, fixez le nouvel ensemble de câbles comme indiqué ci-dessous. L'adaptateur réalisé à l'étape 1 doit permettre à la CMUCam d'être directement branchée sur l'OOPIC
Étape 5: Appuyez sur le bouton pour initialiser la communication série
Le bouton sur IOLine 5 lancera la communication série entre la CMUCam et l'OOPIC. Étant donné que le port série est utilisé à la fois pour la programmation et la CMUCam, il devrait probablement y avoir un moyen contrôlé de basculer entre les deux.
Le programme ne s'exécutera pas tant que ce bouton n'est pas enfoncé. Si vous appuyez à nouveau sur le bouton, le port série deviendra inactif, vous permettant de le programmer. La LED sur IOLine 6 affiche l'état actuel du port série (allumé signifie actif, éteint signifie prêt pour la programmation).