No luck receiving data from Multiple XBee Series 1 TX's
Falcon
Posts: 191
Hello,
I'm working on XBee Series 1 based units to Transmit the condition of a Window position switch.
I've based my code off of the examples in the XBee Tutorial. The Scheduled Updates from Remote Units section seems to be the configuration, but am trying to use the Select Case structure from the Point-to-Multipoint Manual Polling of Remote Nodes configuration to differentiate the three window locations.
Receiver code.
Transmitter A code
The Transmitter code for Windows B and C are identical except the variables and delimiters are changed as necessary.
I tried this code to separate the delimiter and data for the transmitter but it did not work either
My logic is that the "A", "B" or "C" delimiters are sent first when the state of a window changes. Then the 1 or 0 is sent using the WindowA, WindowB, or WindowC variables to represent the state of the window switch. The above Receiver code is all I need now to get this working but the rest of the base code will act on the individual window condition variables. That's why I'm only trying to send a 1 or 0.
I've tried with and without the RTS on the receiver but since I'm only sending a few bytes of data I don't think I actually need to worry about a overflow buffer filling up.
The Receiver DEBUG window should look like this if, for example, the last window that transmitted was Window A, and all three windows are currently OPEN:
A
Window A 1
Window B 1
Window D 1
I get inconsistant data from the DEBUG CRSRXY, 0,0, "Last Window to transmit ", DataIn, CR line of code. I seem to get the following characters randomly: A, B, C, 1, j, 5, ( and ¨ in the DataIn variable location.
Also, as the code is currently written, I do not get the 1 (or 0) data after the individual window labels. Nothing is displayed after those labels.
The TX LED on the Transmitter XBee's Adapter board is lighting up whenever the switch condition is changed (as it should). The RSSI LED on the Receiver XBee's Adapter board is lighting up at the same time (and stays lit a bit longer) inditating that data has been received.
I've set the individual XBee parameters as follows using the USB adapter and X-CTU software:
Receiver: DL: ffff
MY: 0
Transmitter A: DL 0
MY: 1
Transmitter B: DL 0
MY: 2
Transmitter C: DL 0
MY: 3
Question: Should I use the ATMY or ATDL commands in a SEROUT statement to identify individual XBee's? If so, which example in the XBee Tutorial would be closest to what I'm trying to accomplish?
Is my approach using the Select Case commands an appropriate approach.
Does anyone have any project code using multiple TX's that I could look at to see where I'm going wrong?
Thanks,
falcon
I'm working on XBee Series 1 based units to Transmit the condition of a Window position switch.
I've based my code off of the examples in the XBee Tutorial. The Scheduled Updates from Remote Units section seems to be the configuration, but am trying to use the Select Case structure from the Point-to-Multipoint Manual Polling of Remote Nodes configuration to differentiate the three window locations.
Receiver code.
' {$STAMP BS2} ' {$PBASIC 2.5} Baud CON 396 '2400 baud Rx PIN 15 ' XBee DIN Tx PIN 14 ' XBee Dout RTS PIN 11 ' XBee RTS - Used later ' ************** Variable Declarations ****************** DataIn VAR Byte WindowA VAR Byte WindowB VAR Byte WindowC VAR Byte PAUSE 500 DEBUG CLS,"Configuring XBee...",CR PAUSE 3000 ' Guard time SEROUT Tx,Baud,["+++"] ' Command Mode Sequence PAUSE 2000 ' Guard time SEROUT Tx,Baud,["ATD6 1, CN",CR] ' Enable RTS DEBUG CLS ' ************** Main LOOP ****************************** main: DEBUG CRSRXY, 0, 3, "Window A", CR 'sets up labels tio identify individual window conditions received DEBUG CRSRXY, 0, 4, "Window B", CR DEBUG CRSRXY, 0, 5, "Window C", CR SERIN Rx\RTS,Baud,10,TimeOut,[DataIn] ' receives delimiter to identify individual window transmitter DEBUG CRSRXY, 0,0, "Last Window to transmit ", DataIn, CR PAUSE 200 SELECT DataIn CASE "A" 'Window Location A SERIN Rx\RTS,Baud,20,Timeout,[DEC WindowA] ' Accept state of window switch 1 or 0 PAUSE 200 ' Give Base time to set up DEBUG CRSRXY, 15, 3, DEC WindowA, CR CASE "B" 'Window Location B SERIN Rx\RTS,Baud,20,Timeout,[DEC WindowB] ' Accept state of window switch 1 or 0 PAUSE 200 ' Give Base time to set up DEBUG CRSRXY, 15, 4, DEC WindowB, CR CASE "C" 'Window Location C SERIN Rx\RTS,Baud,20,Timeout,[DEC WindowC ' Accept state of window switch 1 or 0 PAUSE 200 DEBUG CRSRXY, 15, 5, DEC WindowC, CR ENDSELECT Timeout: GOTO main
Transmitter A code
' {$STAMP BS2} ' {$PBASIC 2.5} ' ' -----[ I/O Definitions ]------------------------------------------------- Window PIN 5 ' Window Switch input Rx PIN 15 ' XBee DOUT (Adapter Pin 3) Tx PIN 14 ' XBee DIN (Adapter Pin 4) RTS PIN 11 ' XBee /RTS (Adapter Pin 18) ' -----[ Constants ]------------------------------------------------------- Flag = 0 Saved = 0 Baud CON 396 ' -----[ Variables ]------------------------------------------------------- Flag VAR Bit 'Switch Flag Saved VAR Bit 'Switch Saved WindowA VAR Byte 'Switch Condition ' -----[ Program Code ]---------------------------------------------------- DEBUG "OK", CR 'Verify code is running ReadSwitch: WindowA = IN5 IF Saved = WindowA THEN 'if door saved = door current = no change set to false Flag = 0 ELSE Flag = 1 'door changed states , set flag to true Saved = WindowA 'save current state for compare next time through ENDIF IF Flag = 1 THEN 'State of Switch has changed IF Saved = 1 THEN WindowA = 1 DEBUG CRSRXY, 15, 3, "Transmit OPEN ", DEC WindowA, CR, CR 'Displays state of window switch SEROUT Tx, Baud, ["A", CR, CR, DEC WindowA, CR] 'Transmit change to OPEN PAUSE 50 ' DEBUG CRSRXY, 15, 6, DEC WindowA, CR ELSE WindowA = 0 DEBUG CRSRXY, 15, 3, "Transmit CLOSED ",DEC WindowA, CR, CR 'Displays state of window switch SEROUT Tx, Baud, ["A", CR, CR, DEC WindowA, CR] 'Transmit change to OPEN PAUSE 50 ' DEBUG CRSRXY, 15, 6, DEC WindowA, CR ENDIF Flag = 0 ENDIF GOTO ReadSwitch
The Transmitter code for Windows B and C are identical except the variables and delimiters are changed as necessary.
I tried this code to separate the delimiter and data for the transmitter but it did not work either
' SEROUT Tx, Baud, ["A", CR, CR] ' SEROUT Tx, Baud, [DEC WindowA, CR]
My logic is that the "A", "B" or "C" delimiters are sent first when the state of a window changes. Then the 1 or 0 is sent using the WindowA, WindowB, or WindowC variables to represent the state of the window switch. The above Receiver code is all I need now to get this working but the rest of the base code will act on the individual window condition variables. That's why I'm only trying to send a 1 or 0.
I've tried with and without the RTS on the receiver but since I'm only sending a few bytes of data I don't think I actually need to worry about a overflow buffer filling up.
The Receiver DEBUG window should look like this if, for example, the last window that transmitted was Window A, and all three windows are currently OPEN:
A
Window A 1
Window B 1
Window D 1
I get inconsistant data from the DEBUG CRSRXY, 0,0, "Last Window to transmit ", DataIn, CR line of code. I seem to get the following characters randomly: A, B, C, 1, j, 5, ( and ¨ in the DataIn variable location.
Also, as the code is currently written, I do not get the 1 (or 0) data after the individual window labels. Nothing is displayed after those labels.
The TX LED on the Transmitter XBee's Adapter board is lighting up whenever the switch condition is changed (as it should). The RSSI LED on the Receiver XBee's Adapter board is lighting up at the same time (and stays lit a bit longer) inditating that data has been received.
I've set the individual XBee parameters as follows using the USB adapter and X-CTU software:
Receiver: DL: ffff
MY: 0
Transmitter A: DL 0
MY: 1
Transmitter B: DL 0
MY: 2
Transmitter C: DL 0
MY: 3
Question: Should I use the ATMY or ATDL commands in a SEROUT statement to identify individual XBee's? If so, which example in the XBee Tutorial would be closest to what I'm trying to accomplish?
Is my approach using the Select Case commands an appropriate approach.
Does anyone have any project code using multiple TX's that I could look at to see where I'm going wrong?
Thanks,
falcon
Comments
Also, The Select Case approach works perfectly.
falcon