' {$Stamp BS2p} ' {$PBASIC 2.5} ' this program switch for bank 1 ' variables defined the same in both banks: Switching VAR Word ' word variable defined 1st comes 1st in RAM JumpTo VAR Switching.NIB0 ' bank number (0 to 7) of the target routine GoBackTo VAR Switching.NIB1 ' to hold the return vector (or stack) '******APPLICation variables FuktN VAR Word FuktS VAR Word TEMP VAR Word TempN VAR TEMP.LOWBYTE TempS VAR TEMP.HIGHBYTE TEMPSTATESTIK VAR Word Tempmax VAR TEMPSTATESTIK.HIGHBYTE Tempmin VAR TEMPSTATESTIK.LOWBYTE FuktMax VAR Word STATUS VAR Word Fan_ON_OFF VAR status.BIT0 'Knapp för fläkt På eller av Avfukt_ON_OFF VAR status.BIT1 'Knapp för avfukt På eller av Pump_on_off VAR status.BIT2 'Knapp för pump på eller av Lamp_on_off VAR status.BIT3 'Knapp för lampa på eller av Fan_ON_OFF_ACK VAR status.BIT4 'Indikator för fläkt På eller av Avfukt_ON_OFF_ACK VAR status.BIT5 'Indikator för avfukt På eller av Pump_on_off_ACK VAR status.BIT6 'Indikator för pump på eller av Lamp_on_off_ACK VAR status.BIT7 'Indikator för lampa på eller av RSSI_mm VAR Word RSSI VAR RSSI_mm.LOWBYTE mm VAR RSSI_mm.HIGHBYTE Kontroll VAR Word Counter VAR Byte Error VAR Bit '*************************** '*************Här följer min kod för statestik och kontroll av variablerna 'Checking Variables: 'Checking "sanity" of variables. The LCD screen seemed to disturb the values and 'i needed to do this check 'Denna behödes pga att det var störningar från LCD skärmen (tror jag) som ledde till att 'variablernas värde ändrades från det de var när de skickades. IF counter=0 OR counter>0 AND kontroll=0 THEN DEBUG "Counter=", DEC counter,CR IF TempN<250 AND TempN>90 AND FuktN>150 AND FuktN<1000 AND TempS<250 AND TempS>90 AND FuktS>150 AND FuktS<1000 AND mm>1 AND mm<500 THEN DEBUG "Initialising the Variables with OK values. I AM IN!!!!!!!",CR PUT 8, mm PUT 9,TempN PUT 10, FuktN.HIGHBYTE PUT 11, FuktN.LOWBYTE PUT 12, TempS PUT 13, FuktS.HIGHBYTE PUT 14, FuktS.LOWBYTE PUT 17, Fan_ON_OFF PUT 18, Avfukt_ON_OFF PUT 19, Pump_on_off PUT 20, Lamp_on_off PUT 21 ,RSSI PUT 22, 1 'Lägger värdet 1 i pos 22 som i slutet av denna subrutin tilldelas kontroll. ELSE PUT 22,0 'Lägger värdet 0 i pos 22 som i slutet av denna subrutin tilldelas kontroll. ENDIF ELSE ENDIF 'If counter=0 '**********************Nedan Följer kontrollen på alla värden***************************** '*********************Jag tittar på det gamla värdet och jämför om det ändrat sig********* '*********************med ett steg (onaturligt) och negligerar i så fall värdet********** Error=0 mm=mm MAX 255 mm=mm MIN 10 TempN=TEmpN MAX 300 TempN=TempN MIN 50 FuktN=FuktN MAX 999 FuktN=FuktN MIN 0 TempS=TEmpS MAX 300 TempS=TempS MIN 50 FuktS=FuktS MAX 999 FuktS=FuktS MIN 0 GET 8,kontroll IF ABS(kontroll-mm)>(mm/2) OR mm=255 OR mm=0 THEN'(mm/10) GET 8,mm Error=1 ELSE PUT 8,mm ENDIF DEBUG "TEMPN BEfore Check =" ,DEC (TempN),CR GET 9,kontroll IF ABS(kontroll-TempN)> (tempN/10) OR TempN=300 OR TempN=50 THEN GET 9,TempN Error=1 ELSE PUT 9,TempN ENDIF DEBUG "TEMPN After Check =" ,DEC (TempN),CR DEBUG "FuktN Before Check =" ,DEC (FuktN),CR,CR GET 11,kontroll.LOWBYTE GET 10,kontroll.HIGHBYTE IF ABS(kontroll-FuktN)> fuktN/10 OR FuktN=999 OR FuktN=0 THEN 'fuktN GET 11,FuktN.LOWBYTE GET 10,FuktN.HIGHBYTE Error=1 ELSE PUT 11,FuktN.LOWBYTE PUT 10,FuktN.HIGHBYTE ENDIF DEBUG "FuktN After Check =" ,DEC (FuktN),CR,CR GET 12,kontroll IF ABS(TempS-kontroll)>(TempS/10)OR TempS=300 OR TempS=50 THEN GET 12,TempS Error=1 ELSE PUT 12,TempS ENDIF GET 14,kontroll.LOWBYTE GET 13,kontroll.HIGHBYTE IF ABS(FuktS-kontroll)>(FuktS/10)OR FuktS=999 OR FuktS=0 THEN GET 14,FuktS.LOWBYTE GET 13,FuktS.HIGHBYTE Error=1 ELSE PUT 14,FuktS.LOWBYTE PUT 13,FuktS.HIGHBYTE ENDIF GET 21,RSSI IF ABS(RSSI-kontroll)>(RSSI/10) THEN GET 21,RSSI ELSE PUT 21,RSSI ENDIF IF Error=1 THEN GET 17, Fan_ON_OFF GET 18, Avfukt_ON_OFF GET 19, Pump_on_off GET 20, Lamp_on_off ELSE:ENDIF GET 22,kontroll 'Om det var kontstiga värden som gjorde att initieringen ej kunde göras 'får kontroll nu värdet 0 och initiering av alla värden kan förhoppningsvis göras 'nästa vända. Om allt var OK och initiering lyckades får det värdet 1 och initiering är OK. 'Statestik: GET 0, TempMax GET 1, TempMin GET 2, FuktMax.LOWBYTE GET 3, FuktMax.HIGHBYTE IF counter<5 OR error=1 THEN 'Till för att den skall stabilesera sig innan jag skriver in värden i minnet samt att värdena skall vara rimliga Error=0 från checkvariables Counter=counter+1 ELSE IF TempN>TempMax OR TempS>TempMax THEN IF tempN>TempS THEN PUT 0,TempN ELSE PUT 0,TempS ENDIF ELSE ENDIF DEBUG "temp MIN=", DEC temPMIN,CR IF TempNTempS THEN PUT 1,TempS ELSE PUT 1,TempN ENDIF ELSE ENDIF IF FuktN>Fuktmax OR FuktS>Fuktmax THEN IF FuktN>FuktS THEN PUT 2,FuktN.LOWBYTE PUT 3,FuktN.HIGHBYTE ELSE PUT 2,FuktS.LOWBYTE PUT 3,FuktS.HIGHBYTE ENDIF ELSE ENDIF ENDIF 'IF satsen för counter>5 GET 0, TempMax GET 1, TempMin GET 2, FuktMax.LOWBYTE GET 3, FuktMax.HIGHBYTE '*******************************Här slutar min kod RUN 0 ' return to slot 0