' {$Stamp BS2p,Huset_slot_1} ' {$PBASIC 2.5} ' this is program switch0.bsx for bank 0 ' bank switching variables are declared as part of a word variable, ' so they will come first in RAM: ' -----[ I/O Definitions ]------------------------------------------------- LCD PIN 0 'Serial OUTPUt To LCD RxSig PIN 14 'Serial input to REciever TxSig PIN 10 'Serial output to Transmitter Fan PIN 2 'Fläkt På eller av Avfukt PIN 3 'Avfukt På eller av Pump PIN 4 'Pump på eller av Lamp PIN 5 'Lampa på eller av ' -----[ Constants ]------------------------------------------------------- T19K2 CON 110 LcdBaud CON T19K2 LcdBkSpc CON $08 ' move cursor left LcdRt CON $09 ' move cursor right LcdLF CON $0A ' move cursor down 1 line LcdCls CON $0C ' clear LCD (use PAUSE 5 after) LcdCR CON $0D ' move pos 0 of next line LcdBLon CON $11 ' backlight on LcdBLoff CON $12 ' backlight off LcdOff CON $15 ' LCD off LcdOn1 CON $16 ' LCD on; cursor off, blink off LcdOn2 CON $17 ' LCD on; cursor off, blink on LcdOn3 CON $18 ' LCD on; cursor on, blink off LcdOn4 CON $19 ' LCD on; cursor on, blink on LcdLine1 CON $80 ' move to line 1, column 0 LcdLine2 CON $94 ' move to line 2, column 0 LcdLine3 CON $a8 ' mm:Tillägg move to line 2, column 0 LcdLine4 CON $bc ' mm:Tillägg move to line 3, column 0 LcdCC0 CON $F8 ' define custom char 0 LcdCC1 CON $F9 ' define custom char 1 LcdCC2 CON $FA ' define custom char 2 LcdCC3 CON $FB ' define custom char 3 LcdCC4 CON $FC ' define custom char 4 LcdCC5 CON $FD ' define custom char 5 LcdCC6 CON $FE ' define custom char 6 LcdCC7 CON $FF ' define custom char 7 RawToIn CON 889 ' 1 / 73.746 (with **) RawToMm CON 22090 ' 1 / 2.967 (with ** & V=337m/s som gäller vi 12,5 grader celcius) IsHigh CON 1 ' for PULSOUT IsLow CON 0 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) 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 AVFUKTVOLYM1 VAR Word AVFUKTVOLYM2 VAR Word Avfukthast VAR AVFUKTVOLYM1.LOWBYTE 'dl/dygn VolumeDay VAR AVFUKTVOLYM1.HIGHBYTE VolumeMonth VAR AVFUKTVOLYM2.LOWBYTE 'liter Monthindex VAR AVFUKTVOLYM2.HIGHBYTE VolumeYear VAR Word spc VAR Nib Checksum1 VAR Nib 'För RF com Checksum2 VAR Nib RXCheck VAR Bit Error VAR Bit '*************************** INIT: IF TempN=0 AND FuktN=0 THEN HIGH LCD ' setup serial output pin PAUSE 100 ' allow LCD to initialize PUT 0, 50 'TempMaxN PUT 1, 250 'TempMin FuktMax=100 PUT 2, Fuktmax.LOWBYTE PUT 3, Fuktmax.HIGHBYTE 'FuktMax SEROUT LCD, LcdBaud, [LcdCls] INPUT 2 INPUT 3 INPUT 4 INPUT 5 LOW 9 LOW 8 ELSE BRANCH GoBackTo,[start,return1] ENDIF start: GOSUB Knappar GOSUB Transmitt GOSUB Recieve PAUSE 50 GOSUB PRINT_LCD jump1: JumpTo=1 GoBackTo=1 RUN JumpTo Return1: BRANCH 0,[start] END ' just end it here! ' -----[ Subroutines ]----------------------------------------------------- Transmitt: HIGH 8 PULSOUT TxSig,10000 'Skickar en synk puls till motagaren För BS" var längden 1200 men detta gällde för BS2 med 2 us per cykel, för samma tid på BS2P blir det 2/0,8*1200=3000 SEROUT TxSig,18447,["jkl",checksum1,Fan_ON_OFF,Avfukt_ON_OFF,Pump_on_off,Lamp_on_off,checksum2] 'SEROUT Tpin {\Fpin}, Baudmode, {Pace,} {Timeout, Tlabel,} [Out DATA] LOW 8 HIGH 13 'Röd LED indikator för sändning PAUSE 50 LOW 13 RETURN Recieve: DEBUG "WAITING for transmission",CR HIGH 9 SERIN RxSig,18447,200,No_Data,[WAIT("abc"),checksum1,mm, TempN, FuktN.HIGHBYTE,FuktN.LOWBYTE,TempS,FuktS.HIGHBYTE,FuktS.LOWBYTE,Fan_ON_OFF,FAN_ON_OFF_ACK,Avfukt_ON_OFF,Pump_on_off,Lamp_on_off,RSSI,checksum2] TempS=TempN 'DEssa är bara för att jag änne ej har alla sensorer på plats FuktS=FuktN 'DEssa är bara för att jag änne ej har alla sensorer på plats LOW 9 HIGH 1 'GRÖN REcieving indicator LED on PIN1 PAUSE 50 LOW 1 RETURN No_Data: DEBUG "TIMED out!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", CR RETURN Knappar: DEBUG "FANvalue ack =" , BIN Fan_ON_OFF_ACK, CR IF (IN2 = 0) THEN FAN_ON_OFF=0 ELSE FAN_ON_OFF=1 PAUSE 50 'För att tillslag skall stabilisera sig ENDIF IF (IN3 = 0) THEN Avfukt_ON_OFF=0 ELSE Avfukt_ON_OFF=1 PAUSE 50 'För att tillslag skall stabilisera sig ENDIF IF (IN4 = 0) THEN Pump_ON_OFF=0 ELSE Pump_ON_OFF=1 PAUSE 50 'För att tillslag skall stabilisera sig ENDIF IF (IN5 = 0) THEN Lamp_ON_OFF=0 ELSE Lamp_ON_OFF=1 PAUSE 50 'För att tillslag skall stabilisera sig ENDIF DEBUG "FAN_ON_OFF VALUE =",BIN FAN_ON_OFF,CR DEBUG "Avfukt_ON_OFF VALUE=",BIN Avfukt_ON_OFF,CR DEBUG "PUMP _ON_OFF VALUE=",BIN Pump_ON_OFF,CR DEBUG "LAMP _ON_OFF VALUE=",BIN LAMP_ON_OFF,CR RETURN PRINT_LCD: ' SEROUT LCD, LcdBaud, [LcdCls] SEROUT LCD, LcdBaud, [LcdBLon] 'BElyst LCD 'SEROUT LCD, LcdBaud, [LcdBLoff] 'EJ Belyst LCD SEROUT LCD, LcdBaud, [LcdLine1, "Max/Min T:", DEC tempmax DIG 2,DEC tempmax DIG 1,".",DEC tempmax DIG 0,"/",DEC tempmin DIG 2,DEC tempmin DIG 1,".",DEC tempmin DIG 0] SEROUT LCD, LcdBaud, [LcdLine2, "Level:", DEC mm,"mm,Rhm:", DEC FuktMax DIG 2,DEC FuktMax DIG 1,".",DEC FuktMax DIG 0] SEROUT LCD, LcdBaud, [LcdLine3, "T N/S: ", DEC TempN DIG 2 ,DEC TempN DIG 1 ,".",DEC TempN DIG 0, " / ",DEC TempS DIG 2 ,DEC TempS DIG 1 ,".",DEC TempS DIG 0] SEROUT LCD, LcdBaud, [LcdLine4, "Rh N/S: ", DEC FuktN DIG 2,DEC FuktN DIG 1,".",DEC FuktN DIG 0," / ", DEC FuktS DIG 2,DEC FuktS DIG 1,".",DEC FuktS DIG 0] RETURN