#PICAXE 28X2
#Terminal 4800
symbol dataOK = b0
symbol data1 = b1
symbol data2 = b2
symbol data3 = b3
symbol data4 = b4
symbol data5 = b5
symbol data6 = b6
symbol data7 = b7
symbol data8 = b8
symbol data21 = b9
symbol data22 = b10
symbol data23 = b11
symbol data24 = b12
symbol data25 = b13
symbol data26 = b14
symbol data27 = b15
symbol data28 = b16
symbol pump = b17
symbol flash = b18
symbol dataone = b19
symbol datatwo = b20
symbol limittime = b21
symbol counter = b22
symbol test = b23
symbol data1time = w12
symbol data2time = w13
symbol data3time = w14
symbol data4time = w15
symbol data5time = w16
symbol data6time = w17
symbol data7time = w18
symbol data8time = w19
MAIN:
sertxd ("AAAAAAAAAA"):dataOK = 0
pump = 0
data21 = 0:data22 = 0: data23 = 0: data24 = 0: data25 = 0: data26 = 0: data27 = 0: data28 = 0
dataone = 0:datatwo = 0:counter = 0:test = 1
settimer t1s_4
if test = 1 then
sertxd (cr,lf,"Main - Sun",cr,lf)
endif
BEGIN: DO
if test = 1 then
sertxd ("Begin - ####################",cr,lf)
endif
if timer < 600 and data1time > 64935 then ;zero data21 after min. 10 min.
data21 = 0
else
limittime = data1time + 600
if timer > limittime then
data21 = 0
endif
endif
if timer < 600 and data2time > 64935 then
data22 = 0
else
limittime = data2time + 600
if timer > limittime then
data22 = 0
endif
endif
if timer < 600 and data3time > 64935 then
data23 = 0
else
limittime = data3time + 600
if timer > limittime then
data23 = 0
endif
endif
if timer < 600 and data4time > 64935 then
data24 = 0
else
limittime = data4time + 600
if timer > limittime then
data24 = 0
endif
endif
if timer < 600 and data5time > 64935 then
data25 = 0
else
limittime = data5time + 600
if timer > limittime then
data25 = 0
endif
endif
if timer < 600 and data6time > 64935 then
data26 = 0
else
limittime = data6time + 600
if timer > limittime then
data26 = 0
endif
endif
if timer < 600 and data7time > 64935 then
data27 = 0
else
limittime = data7time + 600
if timer > limittime then
data27 = 0
endif
endif
if timer < 600 and data8time > 64935 then
data28 = 0
else
limittime = data8time + 600
if timer > limittime then
data28 = 0
endif
endif
if test = 1 then
sertxd ("data21 to data28 zeroed",cr,lf)
endif
high A.1
pause 500 ;flash
low A.1
rfin C.4,data1,data2,data3,data4,data5,data6,data7,data8
if test = 1 then
dataone = dataone + 1 ;dataone = 1: reception, dataone = 2: transmission of receipt
datatwo = datatwo + 1 ;datatwo = 1: start of unit 1, starttwo = 2: shut down of unit 1, datatwo = 3: start of unit 3.........
if datatwo = 9 then
datatwo = 1
endif
counter = counter + 1 ;introduce error in receptions or receipts
if counter = 65300 then
data3 = 3 ;error - if applicable
counter = 0
else
data3 = datatwo
endif
;data1=dataone:data2=datatwo:data4=datatwo:data5=datatwo:data6=datatwo:data7=datatwo:data8=datatwo
sertxd ("Received: ",#data1,#data2,#data3,#data4,#data5,#data6,#data7,#data8,cr,lf)
endif
if data1 < 1 OR data1 > 2 then goto ERROR1 ;check validity
if data2 < 1 OR data2 > 8 then goto ERROR2 ;check validity
if data2 = data3 then ;check all data alike
dataOK = dataOK + 1
endif
if data2 = data4 then
dataOK = dataOK + 1
endif
if data2 = data5 then
dataOK = dataOK + 1
endif
if data2 = data6 then
dataOK = dataOK + 1
endif
if data2 = data7 then
dataOK = dataOK + 1
endif
if data2 = data8 then
dataOK = dataOK + 1
endif
if dataOK < 6 then goto ERROR3 ;not all data alike
dataOK = 0
if test = 1 then
sertxd ("Data OK",cr,lf)
endif
high C.2
pause 50
rfout C.3,(2,data2,data3,data4,data5,data6,data7,data8) ;answer OK - 2 indicates transmission originating from receiver
low C.2
high A.1
pause 500 ;flash
low A.1
if test = 1 then
dataone = dataone + 1
;data1=dataone:data2=datatwo:data3=datatwo:data4=datatwo:data5=datatwo:data6=datatwo:data7=datatwo:data8=datatwo
sertxd ("Answered data OK: ",#data1,#data2,#data3,#data4,#data5,#data6,#data7,#data8,cr,lf)
if dataone = 2 then
dataone = 0
endif
if datatwo = 8 then
datatwo = 0
endif
endif
If data2 = 1 then ;start valve and pump from satelite no. 1
if data2 = data21 then ;bypass repeat input
goto begin
else
data21 = data2 ;keep data for check of repeat
high B.0 ;open valve no. 1
pause 500
low B.0
high A.0 ;start pump
pump = pump + 1 ;keep check on how many have started the pump
data1time = timer
if test = 1 then
sertxd ("Unit 1 start",cr,lf)
endif
endif
elseif data2 = 2 then ;shut down valve and pump from satelite no. 1
if data2 = data22 then
goto begin
else
data22 = data2
high B.1 ;shut valve no. 1
pause 500
low B.1
pump = pump - 1 ;check number of times the pump has been started
if pump = 0 OR pump = 255 then ;shut pump if this was the last
low A.0
endif
data2time = timer
if test = 1 then
sertxd ("Unit 1 stop",cr,lf)
endif
endif
elseif data2 = 3 then
if data2 = data23 then
goto begin
else
data23 = data2
high B.2
pause 500
low B.2
high A.0
pump = pump + 1
data3time = timer
if test = 1 then
sertxd ("Unit 2 start",cr,lf)
endif
endif
elseif data2 = 4 then
if data2 = data24 then
goto begin
else
data24 = data2
high B.3
pause 500
low B.3
pump = pump - 1
if pump = 0 OR pump = 255 then
low A.0
endif
data4time = timer
if test = 1 then
sertxd ("Unit 2 stop",cr,lf)
endif
endif
elseif data2 = 5 then
if data2 = data25 then
goto begin
else
data25 = data2
high B.4
pause 500
low B.4
high A.0
pump = pump + 1
data5time = timer
if test = 1 then
sertxd ("Unit 3 start",cr,lf)
endif
endif
elseif data2 = 6 then
if data2 = data26 then
goto begin
else
data26 = data2
high B.5
pause 500
low B.5
pump = pump - 1
if pump = 0 OR pump = 255 then
low A.0
endif
data6time = timer
if test = 1 then
sertxd ("Unit 3 stop",cr,lf)
endif
endif
elseif data2 = 7 then
if data2 = data27 then
goto begin
else
data27 = data2
high B.6
pause 500
low B.6
high A.0
pump = pump + 1
data7time = timer
if test = 1 then
sertxd ("Unit 4 start",cr,lf)
endif
endif
elseif data2 = 8 then
if data2 = data28 then
goto begin
else
data28 = data2
high B.7
pause 500
low B.7
pump = pump - 1
if pump = 0 OR pump = 255 then
low A.0
endif
data8time = timer
if test = 1 then
sertxd ("Unit 4 stop",cr,lf)
endif
endif
endif
Loop
ERROR1: if test = 1 then
sertxd ("ERROR1",cr,lf)
endif
flash = 0
do
flash = flash + 1
high A.1
pause 500 ;flash
low A.1
pause 500
loop while flash < 11
dataOK = 0
dataone = 0
goto BEGIN
ERROR2: if test = 1 then
sertxd ("ERROR2",cr,lf)
endif
flash = 0
do
flash = flash + 1
high A.1
pause 500 ;flash
low A.1
pause 500
loop while flash < 11
dataOK = 0
dataone = 0
goto BEGIN
ERROR3: if test = 1 then
sertxd ("ERROR3",cr,lf)
endif
flash = 0
do
flash = flash + 1
high A.1
pause 500 ;flash
low A.1
pause 500
loop while flash < 11
dataOK = 0
dataone = 0
goto BEGIN