Code Help Needed
NWCCTV
Posts: 3,629
How would I modify the following code to use local Comm Port 7 instead of Bluetooth:
' -----[ Title ]-------------------------------------------------------------- ' File: BoeBotControlForMsrs.bs2 ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ DATA ]--------------------------------------------------------------- ResetOnOff DATA 0 ' On/off toggle w/ Reset button RequestConnect DATA $FF, 0, 1, 0, 0 ConnectionGranted DATA $FF, 0, 2, 0, 0 RequestCommand DATA $FF, 0, 3, 0, 0 ServoSpeeds DATA $FF, 0, 4, 0, 0 ' -----[ Variables ]---------------------------------------------------------- tLeft VAR Word ' Servo control pulse durations tRight VAR Word temp VAR Word ' Temp variable ' Buffer array not declared as buffer VAR Word(5) for SERIN functionality. ' It can still be accessed as buffer(0), buffer(1), etc. However, ' buffer0, buffer1, etc. should be used in SERIN commands with variations ' of WAIT. buffer0 VAR Byte ' Buffer - Start char = $ff buffer1 VAR Byte ' Message Index value buffer2 VAR Byte ' Command buffer3 VAR Byte ' Argument 1 (return data 1) buffer4 VAR Byte ' Argument 2 (return data 2) buffer VAR buffer0 ' For standard array indexing duration VAR Byte ' 50ths of ms duration frequency VAR Byte ' 50ths of frequency pointer VAR Byte ' EEPROM pointer msgIndex VAR Byte ' EEPROM message index routine VAR Nib ' Routine selector counter VAR Nib index VAR Nib flagWhiskers VAR Bit ' Act on Whisker values flagDigSens VAR Bit ' Send back digital sensors 1/0s ' with every reply flagIr VAR Bit ' tempBit VAR Bit ' -----[ Initialization ]----------------------------------------------------- ' This code makes it possible to toggle the Boe-Bot on/off by pressing and ' releasing the Board of Education's Reset button. Program_Start: ' For on/off toggle with Reset ' READ ResetOnOff, temp ' temp = temp + 1 ' WRITE ResetOnOff, temp ' IF temp.BIT0 = 0 THEN ' FREQOUT 4, 1000, 2000 - Indicate inactive ' END ' ENDIF HIGH 15 FREQOUT 4, 75, 4500 LOW 15 Reset: DEBUG CLS 'Wait for the eb500 radio to be ready. PAUSE 1000 'Wait for the EB500 Bluetooth connection to be established. DO UNTIL IN5 = 1: LOOP GOSUB Ram_Clear Request_Connect: pointer = RequestConnect GOSUB Get_Packet SEROUT 1, 84, [STR buffer \5] Confirm_Connect: pointer = ConnectionGranted GOSUB Get_Packet Wait_For_Confirm: SEROUT 1, 84, [255, 0, 1, 0, 0] SERIN 0, 84, 20, Wait_For_Confirm, [WAITSTR buffer \ 2, buffer2, buffer3, buffer4] Request_Packet: msgIndex = msgIndex + 1 pointer = RequestCommand GOSUB Get_Packet SEROUT 1, 84, [STR buffer \5] ' -----[ Main Routine ]------------------------------------------------------- DO Resume: ' If Message not rcvd, try again IF IN5 = 0 THEN Reset ' EB500 disconnected? PULSOUT 13, tLeft ' Servo control pulses PULSOUT 12, tRight SERIN 0, 84, 5, Resume, ' Get next command [WAITSTR buffer \ 2, buffer2, buffer3, buffer4] PULSOUT 13, tLeft ' Servo control pulses again PULSOUT 12, tRight IF buffer2 = 192 THEN ' Handle restart req from PC msgIndex = 0 GOTO Request_Connect ENDIF LOOKDOWN buffer2,[32, 33, 64, 65, 96, 97, 98, 128, 129, 130, 160, 161, 162], routine ON routine GOSUB Set_Servo_Speed, Maneuver, Get_Ir, Get_Whiskers, Speaker_Tone, Set_Pins, Delay, Enable_Digital_Sensors, Enable_Ir, Enable_Whiskers, Disable_Digital_Sensors, Disable_Ir, Disable_Whiskers ' Load digital sensor values into buffer byte 3 for return message. IF flagDigSens = 1 THEN GOSUB Digital_Sensors ' Increment message index for reply. Next message from PC has to use ' reply's buf[1]. msgIndex = msgIndex + 1 buffer1 = msgIndex SEROUT 1, 84, [STR buffer \5] LOOP ' -----[ Subroutine Digital_Sensors ]----------------------------------------- ' This subroutine is used by the main routine to return digital sensor values ' with each reply. Digital_Sensors: buffer3 = 0 GOSUB Get_Ir GOSUB Get_Whiskers IF ((buffer3.BIT2 = 0 OR buffer3.BIT3 = 0) AND (flagWhiskers = 1)) THEN tLeft = tLeft MAX 750 tRight = tRight MIN 750 ENDIF RETURN ' -----[ Subroutine Set_Servo_Speed ]----------------------------------------- ' Range of 0 to 200 with 100 = stopped maps to 650 to 850 with 750 stopped. Set_Servo_Speed: tLeft = buffer3 + 650 ' Decode servo speed. tRight = buffer4 + 650 RETURN ' -----[ Subroutine Speaker_Tone ]-------------------------------------------- Speaker_Tone: duration = buffer3 ' Decode speaker tone frequency = buffer4 FREQOUT 4, duration * 50, frequency * 50 ' Transmit tone RETURN ' Go to resume routine ' -----[ Subroutine Get_Ir ]-------------------------------------------------- ' IR object detection for buf[3] bits 1 (left) and 0 (right). Get_Ir: ' IF flagIr THEN FREQOUT 9, 1, 38500 ' IR headlight tempBit = IN10 ' IR receiver buffer3.BIT1 = tempBit ' Left IR reply bit FREQOUT 3, 1, 38500 tempBit = IN2 buffer3.BIT0 = tempBit ' ENDIF RETURN ' -----[ Subroutine Get_Packet ]---------------------------------------------- ' Loads packet into buffer for transmitting. Used by initialization. Get_Packet: FOR index = 0 TO 4 READ pointer + index, buffer(index) NEXT buffer(1) = msgIndex RETURN ' -----[ Subroutine Display_Command ]----------------------------------------- ' For debugging. Display_Command: ' FOR index = 0 TO 4 ' DEBUG DEC buffer(index), CR ' NEXT RETURN ' -----[ Subroutine - Check_Whiskers ]---------------------------------------- ' Stores left and right wiskers (contact switches) for buf[3] bit 3 (left) and ' 2 (right). Get_Whiskers: 'IF FlagWhiskers THEN buffer3.BIT3 = IN7 ' Left whisker buffer3.BIT2 = IN8 ' Right whisker 'ENDIF RETURN ' -----[ Subroutine - Set_Pins ]---------------------------------------------- ' Sets up to two pins. buf[3] high nibble specifies the operation, and the ' low nibble specifies the pin. The same applies to buf[4]. ' High nibble: ' 0 - no action ' 1 - set to output ' 2 - set to input ' 3 - set to (output-high) ' 4 - set to (output-low) ' Low Nibble: ' 0 to 15 - Specifies I/O pin. ' DO NOT try to set 0, 1, 5, or 6. Set_Pins: temp.NIB1 = buffer3.HIGHNIB temp.NIB0 = buffer3.LOWNIB GOSUB Op_Pins temp.NIB1 = buffer4.HIGHNIB temp.NIB0 = buffer4.LOWNIB GOSUB Op_Pins RETURN Op_pins: SELECT temp.NIB1 CASE 1 OUTPUT temp.NIB0 CASE 2 INPUT temp.NIB0 CASE 3 HIGH temp.NIB0 CASE 4 LOW temp.NIB0 ENDSELECT RETURN ' -----[ Subroutine - Delay ]------------------------------------------------- ' Specify delay in ms. Delay: temp.LOWBYTE = buffer3 temp.HIGHBYTE = buffer4 PAUSE temp RETURN ' -----[ Subroutine - Enable_Digital_Sensors ]-------------------------------- ' Causes program to put digital sensor values in buf[3] of the reply packet. Enable_Digital_Sensors: FlagDigSens = 1 RETURN ' -----[ Subroutine - Disable_Digital_Sensors ]------------------------------ ' Causes program to put digital sensor values in buf[3] of the reply packet. Disable_Digital_Sensors: FlagDigSens = 0 RETURN ' -----[ Subroutine Enable_Whiskers ]----------------------------------------- ' Causes program to stop the Boe-Bot if Whisker contact is sensed. This gives ' the PC bluetooth system time to reply. Enable_Whiskers: flagWhiskers = 1 RETURN ' -----[ Subroutine Disable_Whiskers ]---------------------------------------- ' Causes program to ignore the whisker contact. Also ignores when they are ' not connected. Disable_Whiskers: flagWhiskers = 0 RETURN ' -----[ Subroutine Enable_Ir ]----------------------------------------------- ' Not implemented. Enable_Ir: flagIr = 1 RETURN ' -----[ Subroutine Enable_Whiskers ]----------------------------------------- ' Not implemented. Disable_Ir: flagIr = 0 RETURN ' -----[ Subroutine - Maneuver ]---------------------------------------------- ' Preprogrammed maneuver example. Current setup allows: ' "U" - Back up then U-turn ' "R" - Back up then right turn ' "L" - Back up then left turn Maneuver: FOR temp = 0 TO 35 PULSOUT 13, 650 PULSOUT 12, 850 PAUSE 20 NEXT SELECT buffer3 CASE "U" FOR temp = 0 TO 40 PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 NEXT CASE "R" FOR temp = 0 TO 20 PULSOUT 13, 850 PULSOUT 12, 850 PAUSE 20 NEXT CASE "L" FOR temp = 0 TO 20 PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 NEXT ENDSELECT RETURN ' -----[ Subroutine Ram_Clear ]----------------------------------------------- ' Clears ram for reset from PC. This prevents retaining the msgIndex and ' pulseLeft/right variable values, which would otherwise cause problems. Ram_Clear: W0 = 0 W1 = 0 W2 = 0 W3 = 0 W4 = 0 W5 = 0 W6 = 0 W7 = 0 W8 = 0 W9 = 0 W10 = 0 W11 = 0 W12 = 0 RETURN
Comments
what happend to you? the last couple of days you are producing code as if you are posessed by @pullmoll?
Enjoy!
Mike
some might say I'm possessed but pullmoll what the heck is that lol.
Jeff T.
@pullmoll is some german forummember (somehow vanished). He was programming - mostly assembler in an astonishing rate. Things like VT100 emulator or z80 emulator.
He is missed here alot. Good to hear from NWCCTV that he is still alive ...
So basicly this was sort of a commpliment. I like your Graphic-Terminal-Thing. I have no current use for but like it somehow.
Enjoy!
Mike