Gränsyta för en CMUCam2 till en OOPIC (3 / 5 steg)
Steg 3: Anslut standard programmering kabeln och ladda upp koden
Denna kod kommer spåra rörelse med kommandona LF och FD. Det kommer att växla IOLine 7 (ansluten till en LED) och spegla spårning status-LED på CMUCam.
"*** serieport relaterade objekt *** Dim serialPort som nya oSerialPortDim txBuff som ny oBuffer27 'ändra 27 att göra den buffert större/smallerDim rxBuff som ny oBuffer10Dim serialActive_LED som ny oDIO1Dim toggleSerial_Button som ny oDIO1Dim toggleSerial_Event som ny oEventDim toggleSerial_Wire som ny oWireDim serialReceive_Event som ny oEventDim serialReceive_Wire som ny oWire' *** debug relaterade objekt *** Dim statLED som ny oDIO1'*** ' * generiska subrutiner *" *** Sub main "initiera allt main_init" ställa vår produktion mask bara följa center av massa CMUCAM_setOutputMask (2, 3) "ladda våra inledande skillnaden ram CMUCAM_loadDiffFrame()" starta skillnaden beräkning CMUCAM_startDiffCalc (10) slutet SubSub main_init "initiera en status-LED statLED.IOLine = 7 statLED.Direction = cvOutput ' initiera våra seriell port serial_init () slutet Sub'processes fått packetsSub processPacket() Dim mx som Byte Dim min som Byte" kontrollera för båda Mx och min vara 0 ' beviljas om de inte är 0 , platsen kommer att vara avstängd (dvs 'T 12 34) "men då de inte kommer att uppfylla de kriterier som 0 rxBuff.Location = 2 mx = rxBuff.Value rxBuff.Location = 4 min = rxBuff.Value ' led bör blinka unisont med spårning LED på kameran om (mx ="0") och (min ="0") statLED = 0 annars statLED = 1 End IfEnd Sub'*** ' * CMU Cam funktioner *" *** "anger den tanke ledde till på , av, ledde automatic'param ledNum antal (0,1) "param val off, auto, (0,1,2) funktion CMUCAM_ledSet(ledNum As Byte, val As Byte) som Byte" VString var inte fungerar direkt i den nya kompilatorn.... ' inte säker om den gamla som "txBuff.VString =" L0 0 "" setup våra kommandosträngen manuellt txBuff.Location = 0 txBuff.Value = "L" txBuff.Location = 1 "str$ funktionen suger... så nu är det här hända txBuff.Value = serial_toChar(ledNum) txBuff.Location = 2 txBuff.Value =" "txBuff.Location = 3 txBuff.Value = serial_toChar(val) txBuff.Location = 4 txBuff.Value = 13 ' Skicka kommando serial_SendBufferEnd Sub'loads den första skillnaden frameSub CMUCAM_loadDiffFrame() ' setup våra kommandosträngen manuellt txBuff.Location = 0 txBuff.Value ="L"txBuff.Location = 1 txBuff.Value ="F"txBuff.Location = 2 txBuff.Value = 13" Skicka kommandot serial_SendBufferEnd Sub'starts beräkning av ram differences'param tröska tröskel (0-9) Sub CMUCAM_startDiffCalc(thresh As Byte) Dim TEN som Byte "setup våra kommandosträngen manuellt txBuff.Location = 0 txBuff.Value ="F"txBuff.Location = 1 txBuff.Value ="D"txBuff.Location = 2 txBuff.Value =" "txBuff.Location = 3 tior = tröska/10 txBuff.Value = serial_toChar(tens) txBuff.Location = 4 tior = tröska/10 txBuff.Value = serial_toChar(thresh-tens) txBuff.Location = 5 txBuff.Value = 13 ' Skicka kommando serial_SendBufferEnd Sub'sets utgång mask'param packetType typ av paket till mask (0,1,2 etc) se sidan 46' param mask mask värde att tillämpa (0-255) Sub CMUCAM_setOutputMask(packetType As Byte, mask As Byte) Dim hundratals som Byte Dim TEN som Byte "setup våra kommandosträngen manuellt txBuff.Location = 0 txBuff.Value ="O"txBuff.Location = 1 txBuff.Value ="M"txBuff.Location = 2 txBuff.Value =" "" packet typ txBuff.Location = 3 txBuff.Value = serial_toChar(packetType) txBuff.Location = 4 txBuff.Value = "" "mask att tillämpa txBuff.Location = 5 hundratals = mask/100 txBuff.Value = serial_toChar(hundreds) txBuff.Location = 6 tior = (mask-hundratals) / 10 txBuff.Value = serial_toChar(tens) txBuff.Location = 7 txBuff.Value = serial_toChar () mask-hundratals-TEN) "vagnretur txBuff.Location = 8 txBuff.Value = 13 'Skicka kommando serial_SendBufferEnd Sub' ***'* allmänna seriella subrutiner *" *** "initierar seriell portSub serial_init()" initiera en knapp för att slå på och av den seriella porten (aktivera att köra, stänga av program) toggleSerial_Button.IOLine = 5 toggleSerial_Button.Direction = cvInput toggleSerial_Wire.Input.Link(toggleSerial_Button.Value) toggleSerial_Wire.Output.Link(toggleSerial_Event.Operate) toggleSerial_Wire.Operate = cvTrue ' initiera en händelse att buffra våra data serialReceive_Wire.Input.Link(serialPort.Received) serialReceive_Wire.Output.Link(serialReceive_Event.Operate) serialReceive_Wire.Operate = cvTrue ' initiera våra RX buffert rxBuff.Location = 0 "initiera våra seriell port serialPort.Baud = cv9600 ' initiera våra seriell status-LED serialActive_LED. IOLine = 6 serialActive_LED. Riktning = cvOutput ' vänta här tills våra seriella porten blir aktiverat medan serialPort.Operate = cvFalse WendEnd Sub'copies data i våra mottagningsbufferten och kontroller för packet completionSub serialReceive_Event_Code() ".received blir falsk 4 byte buffert är tom While(serialPort.Received = cvTrue)" kopiera byten till vår buffert rxBuff.Value = serialPort.Value ' Kontrollera om slutet av paket om rxBuff.Value = 13 "bearbeta paket processPacket()" återställa bufferten till början rxBuff.Location = 0 annars rxBuff.Location = rxBuff.Location + 1 EndIf WendEnd Sub'turns på och av seriell port för programmingSub toggleSerial_Event_Code() om serialPort.Operate = cvFalse serialPort.Operate = cvTrue serialActive_LED = 1 Else serialPort.Operate = cvFalse serialActive_LED = 0 slut IfEnd Sub'converts ett ensiffriga tal till en characterFunction serial_toChar (inVal som Byte) som Byte Dim retVal som Byte Select Case inVal fallet 0 retVal = "0" ärende 1 retVal = "1" fall 2 retVal = "2" ärende 3 retVal = "3" fallet 4 retVal = "4" fall 5 retVal = "5" fallet 6 retVal = "6" fall 7 retVal = "7" fallet 8 retVal = "8" ärende 9 retVal = "9" slutet Välj serial_toChar = retValEnd funktion "skickar uppgifter i txBuff" OBS: kontrollera bufferten innehåller en vagnretur (13) i slutet! Sub serial_SendBuffer() "iterera igenom, skickar varje byte, slutet på transport tillbaka txBuff.Location = 0 medan 1 serialPort.Value = txBuff.Value ooPIC.Delay = 1" kan inte behöver detta ' se om det var en vagnretur om txBuff.Value = 13 "bryta våra loop tillbaka End If ' gå till nästa tecken txBuff.Location = txBuff.Location + 1 WendEnd Sub