RFID Reader and Motion Sensor Conflict
Hi everyone,
The code below is trying to read an RFID card but when it's not active, or reading we want a motion sensor to be scanning as well. We think the issue is
so when we have an infinite loop with that included it's still waiting for that 10 bit string. It's stopping there and not continuing with a GOSUB or anything else.
We haven't found anything that would allow us to run both at the same time, and we're stuck. Any help?
Thanks
P.S. We were working with the DIRS registry, but we have no idea how it works.
Post Edited (blindpiggy) : 4/14/2010 5:30:41 PM GMT
The code below is trying to read an RFID card but when it's not active, or reading we want a motion sensor to be scanning as well. We think the issue is
SERIN RX, T2400, [noparse][[/noparse]WAIT($0A), STR buf\10] ' wait for hdr + ID
so when we have an infinite loop with that included it's still waiting for that 10 bit string. It's stopping there and not continuing with a GOSUB or anything else.
We haven't found anything that would allow us to run both at the same time, and we're stuck. Any help?
Thanks
P.S. We were working with the DIRS registry, but we have no idea how it works.
' {$STAMP BS2}
' {$PBASIC 2.5}
' -----[noparse][[/noparse] I/O Definitions ]-------------------------------------------------
Enable PIN 11 ' low = reader on
RX PIN 10 ' serial from reader
LED0 PIN 0
LED1 PIN 1
Motion1 PIN 12
' -----[noparse][[/noparse] Constants ]-------------------------------------------------------
#SELECT $STAMP
#CASE BS2, BS2E, BS2PE
T2400 CON 396
#CASE BS2SX, BS2P
T2400 CON 1021
#CASE BS2PX
T2400 CON 1646
#ENDSELECT
Baud CON T2400
LastTag CON 2
#DEFINE __No_SPRAM = ($STAMP < BS2P) ' does module have SPRAM?
Number_of_Tags CON 2
' -----[noparse][[/noparse] Variables ]-------------------------------------------------------
#IF __No_SPRAM #THEN
buf VAR Byte(10) ' RFID bytes buffer
#ELSE
Char VAR Byte ' character to test
#ENDIF
tagNum VAR Nib ' from EEPROM table
idx VAR Byte ' tag byte index
is_Here VAR Byte ' 1=Here or 0=Gone for if the person is here
tag VAR Byte 'Tags Present
people VAR Byte 'People in there
is_Tag1 VAR Byte '1=Present or 0=Gone
is_Tag2 VAR Byte '1=Present or 0=Gone
'Array VAR Byte(10)
counter VAR Byte
'inMotion VAR Byte
' -----[noparse][[/noparse] Initialization ]-------------------------------------------------------
'LET DIRS=$00000010
' -----[noparse][[/noparse] EEPROM Data ]-----------------------------------------------------
Tag1 DATA "17008150F5" ' valid tags
Tag2 DATA "1700BD3AE7"
Reset:
is_Here = 0
LOW LED0
LOW LED1
people = 0
is_Tag1 = 0
is_Tag2 = 0
idx = 0
inMotion = 1
FOR counter = 0 TO 9
buf(counter) = 0
NEXT
' -----[noparse][[/noparse] Program Code ]----------------------------------------------------
Main:
LOW Enable ' activate the reader
#IF __No_SPRAM #THEN
SERIN RX, T2400, [noparse][[/noparse]WAIT($0A), STR buf\10] ' wait for hdr + ID
#ELSE
SERIN RX, T2400, [noparse][[/noparse]WAIT($0A), SPSTR 10]
#ENDIF
HIGH Enable ' deactivate reader
Check_List:
FOR tagNum = 1 TO Number_of_Tags ' scan through known tags
FOR idx = 0 TO 9 ' scan bytes in tag
READ (tagNum - 1 * 10 + idx), buf ' get tag data from table
IF (buf <> buf(idx)) THEN Bad_Char ' compare tag to table
NEXT
GOTO Person_Found ' all bytes match!
Bad_Char:
GOTO Main
NEXT
Person_Found:
'FOR idx = 0 TO 9
FOR idx = 0 TO 9 ' scan bytes in tag
READ (idx), buf ' get tag data from table
IF (buf <> buf(idx)) THEN Next_For ' compare tag to table
NEXT
GOTO Person_Found1
Next_For:
FOR idx = 0 TO 9 ' scan bytes in tag
READ (10+idx), buf ' get tag data from table
IF (buf <> buf(idx)) THEN Bad_Char ' compare tag to table
NEXT
GOTO Person_Found2
Person_Found1:
IF (is_Tag1 = 0) THEN
people = people+1
is_Tag1 = is_Tag1+1
DEBUG " IF 1 Tag1"
DEBUG buf(idx)
ELSEIF (is_Tag1 = 1) THEN
people= people-1
is_Tag1 = is_Tag1-1
DEBUG " IF 2 Tag1"
DEBUG buf(idx)
ENDIF
IF (people > 0) THEN
GOSUB TURN_MOTION_ON
ELSE
GOSUB TURN_LED_OFF
ENDIF
GOTO Main
Person_Found2:
IF (is_Tag2 = 0) THEN
people= people+1
is_Tag2 = is_Tag2+1
DEBUG " IF 3 Tag2"
DEBUG buf(idx)
ELSEIF (is_Tag2 = 1) THEN
people= people-1
is_Tag2 = is_Tag2-1
DEBUG " IF 4 Tag2"
DEBUG buf(idx)
ENDIF
IF (people > 0) THEN
GOSUB TURN_MOTION_ON
ELSE
GOSUB TURN_LED_OFF
ENDIF
GOTO Main
'Tag_Found:
' IF (is_Here = 0) THEN
' GOSUB TURN_SERVO_ON
' is_Here = is_Here+1
' GOTO Main
'
' ELSEIF (is_Here = 1) THEN
' GOSUB TURN_SERVO_OFF
' is_Here = is_Here-1
' GOTO Main
'
' ENDIF
END
'FOR DEBUGGING TAG ENTRIES
'Display_Tag:
' DEBUG "Tag Identification number is: ", CR
' FOR idx = 0 TO 9 ' scan bytes in tag
'
' #IF __No_SPRAM #THEN
' DEBUG buf(idx)
' #ELSE
' GET idx, Char ' read char from SPRAM
' DEBUG Char
' #ENDIF
' NEXT
' DEBUG CR
' PAUSE 500
' GOTO main ' repeats code
TURN_LED_ON:
HIGH LED0
HIGH LED1
LET Motion1 = LED0
PAUSE 300
RETURN
TURN_LED_OFF:
LOW LED0
LOW LED1
PAUSE 300
RETURN
TURN_MOTION_ON:
DEBUG BIN1 IN12
PAUSE 300
RETURN
Post Edited (blindpiggy) : 4/14/2010 5:30:41 PM GMT

Comments
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- Stephen
I hope this helps
Pick_One:···················································· ' Look at ByPass Switch to see if pushed
····························································· ' If NOT then go to Card Readers if card
····························································· ' readers are NOT activated then loop
DO
'SEROUT CommPin, BaudValue, [noparse][[/noparse]CLRP]··························· ' Clears any prior position info
LOW· H25_Fan················································· ' Turn OFF Cooling Fan
DEBUG " Pick_One" ,CR
IF ByPass_Switch = 1 THEN···································· ' This input is the ByPass switch
IF Home_Switch·· = 0 THEN···································· ' This is the HOME INPUT SWICH on the
GOSUB Backwards·············································· ' gate opener arm retracked postion switch
ELSEIF IN2 = 1 THEN
GOSUB Forwards
ELSE
GOSUB Start
ENDIF
ENDIF
Reader1:
·· LOW Enable1······················································ ' activate the reader - 1
·DEBUG "Reader1"
· #IF __No_SPRAM #THEN
··· SERIN RX1, T2400, 150, Reader2, [noparse][[/noparse]WAIT($0A), STR buf\10]········· ' wait for hdr + ID
· #ELSE
··· SERIN RX1, T2400, 150, Reader2, [noparse][[/noparse]WAIT($0A), SPSTR 10]
· #ENDIF
· HIGH Enable1······················································ ' deactivate reader - 1
· PAUSE 200
·· GOTO Check_List
Reader2:
· LOW Enable2······················································· ' activate the reader - 2
· DEBUG "Reader2"
· #IF __No_SPRAM #THEN
··· SERIN RX2, T2400, 150, Pick_One, [noparse][[/noparse]WAIT($0A), STR buf\10]········· ' wait for hdr + ID
··· #ELSE
··· SERIN RX2, T2400, 150, Pick_One, [noparse][[/noparse]WAIT($0A), SPSTR 10]
· #ENDIF
· HIGH Enable2······················································ ' deactivate reader - 2
· PAUSE 200
·GOTO Check_List
LOOP
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
··Thanks for any·
·
·
·
·
Sam