'****************************************************************
'* Name : *
'* Author : *
'* Notice : *
'* : *
'* : *
'* Date : *
'* Version : *
'****************************************************************
; HBusOut %10000100, %01010000,[00] ' BitWizard I2C DIO. pin 3, IO 0, 8E, 50, 00 PWM1
; HBusOut %10000100, %01010001,[00] ' BitWizard I2C DIO. pin 4, IO 1, 8E, 51, 00 PWM2
; HBusOut %10000100, %01010010,[00] ' BitWizard I2C DIO. pin 5, IO 2, 8E, 52, 00 PWM3
; HBusOut %10000100, %01010011,[00] ' BitWizard I2C DIO. pin 6, IO 3, 8E, 53, 00 PWM4
;**********************
;Device 16F877A
' HS_OSC, BOREN_ON, INTRC_OSC_NOCLKOUT
' Config HS_OSC, BOREN_ON, PWRTE_ON, WDT_OFF, LVP_OFF, MCLRE_OFF, CP_OFF, DATA_CP_OFF
;Config WDT_OFF, PWRTE_ON, HS_OSC, LVP_OFF
;Declare Xtal = 20
;***********************
Device 18F45K22
Config_Start
FOSC = INTIO67 ;Internal oscillator block, port function on RA6 and RA7
FCMEN = Off ;Fail-Safe Clock Monitor disabled
IESO = Off ;internal external switchover mode
;PWRT = On ;power-up timer For 18F25K20
PWRTEN = On ;power-up timer For 18F25K22
BOREN = On ;brown-out reset
;BORV = 27 ;brown-out reset value (2,7V) For 18F25K20
BORV = 285 ;brown-out reset value (2,85V) for 18F25K22
WDTEN = Off ;watchdog timer
WDTPS = 128 ;1:128 WDT prescalar
PBADEN = Off ;analog port B<4:0>
STVREN = On ;stack overflow reset
LVP = Off ;LET OP ivm. MicroPog7 low voltage programming
XINST = Off ;Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
Debug = Off ;no debug
MCLRE = EXTMCLR ; MCLR pin enabled, RE3 input pin disabled 45K22!!!!!!!!!!!
CCP2MX = PORTC1 ; CCP2 input/output is multiplexed with RC1 45K22!!!!!!!!!!!
Config_End
; Xtal 64 ; Many I/O troubles, DIO, HPWM 1+2 DHT11(?)
Xtal 16 ; OKE!
'******************************************************
;All_Digital TRUE
'Set the default data in the eeprom at programming
EData Byte 1, Word 500, Float 0, Float 0, Byte 10, Byte 90
; traysbit, teller, weekteller, wekenteller
; byte=0 , Word=1-2,Float=3-6,Float=7-10,byte=11,byte=12 Byte's positie's
'On-chip pull-up resistors active
; Declare PortB_Pullups On ' Declare MOET ervoor staan NODIG??
; On_Hardware_Interrupt GoTo ENCODER_INTERRUPT_HANDLER ' Waar heen te gaan bij interrupt.
'****************************************************************
; 877A
'In and outputs
'Tris registers
'76543210
; TRISA = %111111 ; 6 A poorten A.0 ADIn1=LDR; A.1 DHT11; A.2 Vocht.Sensor 1; A.3 V.S 2; A.4 V.S 3; A.5 V.S 4
; TRISB = %10001111
; TRISC = %00000000
; TRISD = %00000000
; TRISE = %000 ; %111 dan is het oke! Maar %11111111 maar dan start de PIC niet meer op!
'******************************************************
; 45K22
OSCCON = %01110000 ; 16Mhz intern osc, OKE
OSCTUNE= %00000000 ; %01000000 = 4x PLL aan geeft 64Mhz, 64MHz geeft I/O problemen, zie hierboven (Xtal=64)!
'Tris registers
'76543210
TRISA = %111101 ; 1e BCD CD4051 A0-A2 ; Was, A3 Rot.SW, A4 knop
TRISB = %10001111 'NW PORTB.0 IR. PORTB.1 RotA, PORTB.2 RotB, PORTB.3 RotSW ; B4-B7 Input IO TASCAM
TRISC = %00000000
TRISD = %00000000 ; D0-D3 Output IO TASCAM
TRISE = %000 ; 2e BCD CD4051 E0-E2
All_Digital TRUE
; PMD2 = %00001110 ' Enable / disable peripheral modules ENABLE Bit 0 ADC
' Bit 0 = ADC module
' Bit 1 = Comparator 1 module
' Bit 2 = Comparator 2 module
' Bit 3 = CTMU module
' Bit 4 - 7 = Unimplemented
; VREFCON0 = %00000000 ' Turn OFF VREF ; Vref Disabeld
; CTMUCONH = %00000000 ' Turn OFF CTMU ; Charge Time Measurement OFF
; HLVDCON = %00000000 ' Turn OFF HLVD ; High/Low Voltage Detection OFF
; LATA = 0 ' Turn OFF PORTA
; LATB = 0 ' Turn OFF PORTB
; LATC = 0 ' Turn OFF PORTC
;Aanpassen
'******************************************************
; Uitzoeken 877A
; ADIn ;76543210 ; Hulp regel analoog
; ADCON0 = %00000001 ; LDR Analoge ingang 0 Pin2
;******************************************************
'******************************************************
; Uitzoeken 45K22
ADCON0 = %00000001 ' Disable analog on startup and select analog pins
ADCON1 = %10000000 ' Was "0" Select VREF; Connected to internal signal AVDD / AVSS
ADCON2 = %10000011 ' Select FRC and right justify analog result
CM1CON0 = %00000000 ' Turn OFF comparators
CM2CON0 = %00000000 ' Turn OFF comparators
ANSELA = %00000001 ' Configure RA0 pin as analog
ANSELB = %00000000 ; 18F25K22 poort B digitaal
ANSELC = %00000000 ; (was 00000111) 18F25K22 Poort C RX,TX,C5,SCL en SDA digitaal
ANSELD = %00000000 ;
ANSELE = %00000000
;******************************************************
PORTA = 0 ' Set PORTC to all zeros
PORTB = 0 ' Set PORTD to all zeros
PORTC = 0 ' Set PORTC to all zeros
PORTD = 0 ' Set PORTD to all zeros
;******************************************************
; I2C
Symbol SDA = PORTC.4 ' pin 23
Symbol SCL = PORTC.3 ' pin 18
'LCD ***** Connectie als bij de Reflow-oven ******
Declare LCD_DTPin PORTD.4 ' pin 27-30
Declare LCD_ENPin PORTC.7 ' pin 26
Declare LCD_RSPin PORTC.6 ' pin 25
Declare LCD_Interface 4
Declare LCD_Lines 2
Declare CCP1_Pin PORTC.2 ' pin 17
Declare CCP2_Pin PORTC.1 ' pin 16
Declare PortB_Pullups On ' Declare MOET ervoor staan NODIG??
; ADC, ADIn 0
; NIET NODIG!
; Declare Adin_Res = 10 ; resolutie ALTIJD 10 bits
; Declare Adin_Tad = FRC ; Set rc osc
; Declare Adin_Stime = 50 ; sample tijd 5
Declare LCD_DataUs 75 'voor de wat langzamere LCD schermpjes.
Declare Hbus_Bitrate 100 ' Constant 100
'****************************************************************
; Poort configuratie
Symbol OzonGen PORTE.0 ' pin 8 Ozon, Circ.Pomp 220Volt; UV-LED's 12Volt of via 220Volt trafo!
Symbol Fans PORTE.1 ' pin 9 Beide Ventilatoren
Symbol peltier PORTE.2 ' pin 10 Verwarmingsmat, nodig ??
;
; PORTD.0 ' pin 19 Aan/Afvoer pomp
Symbol DQ = PORTD.1 ' pin 20 Data-port DS18B20
Symbol LEDRed = PORTD.2 ; pin 21 Rotary LED's High is ON Low is OFF
Symbol LEDGreen = PORTD.3 ; pin 22 Idem
; de rest van PORTD.4-7 ; pin 27-30 -->> LCD
;
Symbol Speaker = PORTC.0 ; pin 15 Buzzer
; CCP2 = PORTC.1 ; Pin 16 PWM Pomp1 52%
; CCP1 = PORTC.2 ; Pin 17 PWM LED-Verlichting
; I2C PORTC.3-4 ; 18en23 I2C Klok IC
; PORTC.5 ; pin 24 VRIJ
; PORTC.6-7 ; 25en26 LCD
; PORTB PULL-UP !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Symbol RotaryB = PORTB.0 ' pin 33 Rotary A; nu B
Symbol RotaryA = PORTB.1 ' pin 34 Rotary B; nu A
Symbol RotarySw = PORTB.2 ' pin 35 Rotary Encoder Switch.
Symbol spanning = PORTB.3 ' pin 36 Flowmeter
;************************************************************************
; Pompen en Vocht
;************************************************************************
; Aanvoer/Afvoer pomp = PORTC.1 ; Pin 16 1e Pomp 1 aan PWM kanaal CCP2 Pin 16
Symbol pomp1 = PORTD.0 ' pin 19
Symbol pomp2 = PORTB.4 ; Pin 37 2e Pomp enz;
Symbol pomp3 = PORTB.5 ; Pin 38 3e
Symbol pomp4 = PORTB.6 ; Pin 39 4e
Symbol niveau = PORTB.7 ; Pin 40 Beide Niveau Schakelaars, voorraadvat en Jerrycan afvoer; IN SERIE!!!
;
;analoog = ADIn 0 = PORTA.0 ' Zie ADC routine; analoog = ADIn 0 = PORTA.0 ' Zie ADC routine
;DHT11 Input = PORTA.1 ; = DHT11 Input pin 5 WAS A.3 Zie DHT11 routine.
Symbol vocht1 = PORTA.2 ; Vochtsensor1
Symbol vocht2 = PORTA.3 ; " 2
Symbol vocht3 = PORTA.4 ; " 3
Symbol vocht4 = PORTA.5 ; " 4
; Einde Poort I/O configuratie
;
' ******* voor Rotary
;877A
;Symbol INTEDG = OPTION_REG.6 ; blz. 2.2.2.2 en 2.2.2.3
;Symbol INTE = INTCON.4
;Symbol INTF = INTCON.1 ; RB0/INT External Interrupt Flag bit
;Symbol GIE = INTCON.7 ; Bit 7 van INTCON register heet: Global Interrupt Enable
; INTEDG = 0 ' Interrupt op neergaande flank
; INTE = 1 ' External Interrupt Enable bit
; INTF = 0
; GIE = 1
;*************************************************************************************
; 45K22
Symbol IPEN = RCON.7 ' IPEN : Disable Interrupt PRIORITY HANDLING
Symbol GIE = INTCON.7 ' GIE : enable interrupts
Symbol INT1IE = INTCON3.3 ' PORTB.1 (INT1) interrupt enable bit
Symbol INTEDG1 = INTCON2.5 ' Op (1) of neergaande (0) flank PORTB.1 interrupt select
Symbol INT1IF = INTCON3.0 ' PORTB.1 (INT1) interrupt flag
INTEDG1 = 0 ' INT1 interrupt op neergaande flank
IPEN = 0 ' Interrupt priority uitzetten (PIC16F compatability mode)
; TRISB = %10001111
; tester.0 = PORTB.0 'Read PORTB (nodig om actuele status te verkrijgen, zie datasheet) ?? FOUTMELDING ???
INT1IE = 1 ' PORTB.1 interrupts aanzetten
INT1IF = 0 ' Clear the PORTB.1 Interrupt FLAG
GIE = 1 ' Interrupts activeren
On_Hardware_Interrupt GoTo ENCODER_INTERRUPT_HANDLER ' Waar heen te gaan bij interrupt.
; Tot zover
' ***************************************************************
'Ram registers
Symbol Reg_Seconden = $00
Symbol Reg_Minuten = $01
Symbol Reg_Uren = $02
Symbol Reg_Dag = $04 ' Date = Datum 1-31 Ivm. opname's
Symbol Reg_Maand = $05
Symbol Reg_Jaar = $06 ' DS1307
' ***************************************************************
' DHT11
'****************************************************************
Dim Tempie As Word ; Blijkbaar is dit NOODZAKELIJK voor PIC18F45K22; Word werkt bij 877A
Dim Humpie As Word ; Blijkbaar is dit NOODZAKELIJK voor PIC18F45K22; Word werkt bij 877A
Dim Temp As Word
Dim Hum As Word
Dim DataIn As Byte 'hi pulse from sensor
Dim ChkSum As Byte
Dim Index As Byte
Dim vocht As Byte
Dim vochta As Byte
'****************************************************************
Dim lopen As Word ' Interval meting DHT11
Dim teller As Word ' Flowsensor pulsen; 500 = 1000mL
Dim deciliter As Float ; dag debiet, 100 = 200mL, 10 = 20mL, 5 = 10mL 50 = 100mL
Dim Weekteller As Float ; wekelijks debiet
Dim Wekenteller As Float ; 2 weken debiet
Dim schemer As Byte ; Licht donker afgeleid van analoog = LDR Adin, ipv. WORD!!!
Dim dobit As Byte ' Sensor ready or not
Dim telbit As Byte ' 2-deler voor 1 periode, Flowsensor.
Dim telbit_old As Byte ' Voorwaarde <> telbit _old welke programma delen voorrang hebben in Main!
Dim vertraging As Byte ' Inc. vertraging, wachtijd voordat telbit_old = telbit uit te voeren.
Dim boot As Byte ' Tijdens opstarten NIET 1 puls vooraf tellen. Flowsensor
Dim trays1_4 As Byte ' Enable/Disable de Trays, per Tray eerst 1, dan 2, enz.
Dim traysbit As Byte ' Bit settings welke tray(s) irrigeren
Dim analoog As Byte ' A/D waarde poort A.0 pin2
Dim menu_waarde As Byte ' Onthoudt case select in Hoofdmenu
Dim Do_dagen As Byte ; Voorwaarde 1 malig weekteller per dag, dagverbruik bijtellen
Dim Do_weken As Byte ; Voorwaarde 1 malig wekenteller per dag, dagverbruik gedurende 2 weken bijtellen.
'*****************************************************************
' DS18B20
Dim Temperatuur As Word ' van DS3232 en DS1307---> DS18B20
Dim Verwarming As Word ' van DS18B20 Sensor, met;
Dim Decimalen As Byte ' temperatuur achter de comma
Dim Remain As Byte ' Tbv. 1 decimaal voor DS1820
Dim Slope As Byte ' idem
Dim BD1 As Byte ' idem
'Rotary Decoder *************************************************
Dim lussen As Byte ; Als index teller voor pompen_pwm = 131 - 254 vanaf 52% PWM
Dim lus1 As Byte ; Mbv. Rotary instellen tbv. vetraging 52-100% PWM pompen_pwm
Dim waarde As Byte ' Nu in Bytes (signed bytes om ook met negatieve getallen te kunnen werken.)
; Dim waardeMode1 As SByte
Dim test As Byte ; Eens in x mSec DS1307 inlezen.
Dim change As Byte
Dim loopCounter As Byte
Dim modeTimer As Byte
Dim keuze As Byte 'was "mode
Dim ButtonUp As Byte
Dim ButtonLow As Byte
Dim geensensor As Byte ' 18B20 comm. fout
Dim aanuit As Byte
Dim tester As Byte ; nodig vor PORTB 45K22?
' ****************************************************************
' Menu
' ****************************************************************
Dim menuteller As Byte
Dim Menu_item As Byte
'*****************************************************************
' DS1307
'*****************************************************************
Dim lezen_reg As Byte
Dim lezen_uit As Byte
Dim schrv_reg As Byte
Dim schrv_in As Byte
Dim BCD_In As Byte
Dim Byte_Uit As Byte
Dim Hbits As Byte
Dim Lbits As Byte
Dim BCD_Uit As Byte
Dim Byte_In As Byte
Dim temp13_32 As Byte ' DS1307+DS18B20 of DS3232
Dim Seconden As Byte
Dim Seconden1 As Byte ; Vergelijk met de verstreken seconden
Dim Minuten As Byte
Dim Minuut As Byte ' Als er 1 minuut is verstreken, dan pas weer 'verwarming' temp. meten
Dim Uren As Byte
Dim Dag As Byte 'Ivm. opname's
Dim Maand As Byte
Dim Jaar As Byte
Dim Lezen As Byte '$D0 (Bit's 8421)
Dim Schrijven As Byte '$D1
;******************************************
Dim done1 As Byte
Dim done2 As Byte
Dim done3 As Byte
Dim done4 As Byte
Dim extra_uur As Byte ' extra uren verlengtijd instellen.
Dim extra_uur1 As Byte ' per pomp afzonderlijk, tray's verdampings processen zijn ongelijk!
Dim extra_uur2 As Byte ; moeten worden gereset, na het pompen....
Dim extra_uur3 As Byte
Dim extra_uur4 As Byte
Dim index5 As Byte ; als index tbv. pomp-tijden uitlezen menu-punt 6
Dim index1 As Byte ; tussen resultaat voor extra_uur 1-4
Dim index2 As Byte
Dim index3 As Byte
Dim index4 As Byte
Dim teller1 As Byte ; lus teller voor gemiddelde tijdsduur calculatie tbv. verdampings tijd, bv,
Dim teller2 As Byte ; extra_uur1 = index1 + Uren
Dim teller3 As Byte ; extra_uur1 = extra_uur1 + extra_uur
Dim teller4 As Byte ; en dat 4x
Dim spanning_high As Byte ; extra togle functie voor 'spanning' Flowsensor
Dim spanning_low As Byte ; idem
Dim pompen_pwm As Byte ; Pompen 52% = 132 tot 254 PWM waarde met lus en lus1 als teller/voorwaarde.
Dim pompen_pwm1 As Byte ; PWM Duty-Cycle % instellen met rotary.
; Dim x As Byte
Dim dagen_week As Byte ; 7 dagen voorbij clear weekdebiet
Dim dagen_weken As Byte ; 14 dagen voorbij clear wekendebiet
Dim pomp_aan1 As Byte ; Pomp1 Aan, dan Fowteller enabled. 1=aan 0=uit
Dim pomp_aan2 As Byte ; idem 3x
Dim pomp_aan3 As Byte
Dim pomp_aan4 As Byte
Dim pompen_aanuit As Byte ; 1 = aan, 0 = uit; Een van de pompen aan? Hiermee voorkom je doortellen Flowsensor!
Dim ozon As Byte ; Tijd in uren voor Ozon Generator
Dim fan As Byte ; Tijd in uren voor de Ventilatoren
Dim huidig As Byte ; Dag/Nacht temperatuur resp. 16 en 20 graden. Zie Sub. ADC.
' ***********************************************************************
Clear
Cls
High LEDGreen
; Low pomp1 ; deze pomp slaat wel eens aan.
; Init BitWizard DIO
; HBusOut %10000100, %00110000,[ %11111111] ' BitWizard I2C DIO. all pin's output 8E, 30, FF
; DelayMS 100
; HBusOut %10000100, %01011111,[ %11111111] ' BitWizard I2C DIO. 7 pin's PWM 8E, 5F, FF-7F
Print At 1,1, " Sprouter V 1.0 "
; Print At 2,1, " Versie 1 "
traysbit = ERead 0 ; Byte 1 positie
teller = ERead 1 ; Word 2 positie's
Weekteller = ERead 3 ; Float 4 positie's
Wekenteller = ERead 7 ; Float 4 positie's
lus1 = ERead 11 ; Byte 1 positie
pompen_pwm1 = ERead 12 ; Byte 1 positie
; GoSub pauze
pompen_pwm = pompen_pwm1 ; pompen_pwm = 90
'****************************************************
keuze = 1 ' Voor Rotary-code
change = 1
'****************************************************
;GoSub Minuut1
;************
;Repeat ; Blijkbaar is in Minuut1; = 0 fout en moet het <> 0 zijn,
;GoSub pauze
;GoSub pauze ; maar dan krijg je last van de opstarttijd van DS18B20 en verschijnt 85.0 op LCD.
;GoSub Minuut1 ; Dit wordt voorkomen door dit stukje software
;Until Verwarming <> 85 ; Voordeel is nl. dat het inlezen van de temperatuur voortaan sneller gaat, getest!!
;*********************
GoTo main
'******************************************************************************************************
ENCODER_INTERRUPT_HANDLER: 'Verandering van PORTB.1 gedetecteerd
Context Save ' Start interrupt (opslaan van het punt waar interrupt plaatsvond)
DelayUS 500 ' contact dender filter
If RotaryA = 0 And RotaryB = 0 Then ; Bij 45K22, was 0 bij 877A! ; RoteryA = 0 houdt in; de neergaande flank
If waarde < 254 Then waarde = waarde + 1 ; grenswaarde 99 kan tot max 127 verschoven worden bij SByte
change = 1 ; NU in Byte!!!!
ButtonUp = 0 ; test
ButtonLow = 1 ; test
End If
If RotaryA = 0 And RotaryB = 1 Then ; Bij 45K22, was 1 bij 877A
If waarde > 0 Then waarde = waarde - 1 ; NU in Byte!!!! // -99 Bij SByte
change = 1 ; NU in Byte!!!!
ButtonUp = 1 ; test
ButtonLow = 0 ; test
End If
INT1IF = 0 'Clear the PORTB.1 Interrupt FLAG -> voor 45K22
; INTF = 0 'voor 16F877A en andere 16F's
Context Restore ' Eind interrupt (teruggaan naar het punt waar Interrupt plaatsvond)
'****************************************************************
'Subroutine's
' ********************************************************************
' DHT11_Begin
'****************************************************************
DHT11:
Temp=0:Hum = 0:ChkSum=0
; Werkt
' LATA.1 = 0 ' load LAT '0'
TRISA.1 = 0 ' PORTA.1 output
PORTA.1 = 1 ' High make high
DelayMS 50 ' wait for a while, send Start-sequence
PORTA.1 = 0 ; Low
DelayMS 18 ' send 18ms low
PORTA.1 = 1 ; High
DelayUS 30 'send 30us of 40 uSec hi
TRISA.1 = 1 ' PORTA.1 input; Vraagt PULLUP, standaard ingebouwd bij de DHT11
DataIn = PulsIn PORTA.1,1 'wait for hi
If DataIn < 33 Then
Print At 2,4, "!" ' if < 80us loop; Sensor not ready!!!!!!!!!!!!!
GoSub pauze ; was 10mSec
dobit = 0
GoTo main
EndIf
For Index = 15 To 0 Step -1
DataIn = PulsIn PORTA.1,High 'recieve pulses from sensor
If DataIn > 18 Then SetBit Hum,Index
Next Index
For Index = 15 To 0 Step -1
DataIn = PulsIn PORTA.1,High 'recieve pulses from sensor
If DataIn > 18 Then SetBit Temp,Index
Next Index
For Index = 7 To 0 Step -1
DataIn = PulsIn PORTA.1,High
If DataIn > 18 Then SetBit ChkSum,Index
Next Index
dobit = 1
Return
'****************************************************************
' DHT11_einde
'****************************************************************
; Bereken de Vochtindex in uren
'***********************
bereken_vocht:
Tempie = Temp.HighByte ; >> 1 ' Bereken wanneer water irigatie nodig is
Humpie = Hum.HighByte ; >> 1 ' 2x H2 / T2 ( H2 en T2 is quadrateren)
Tempie = Tempie * Tempie
Humpie = Humpie * Humpie
Humpie = Humpie * 2
vocht = Humpie / Tempie
Return
; **************************************************************
;*********************************************************************************
;Delay 250msec.
pauze:
DelayMS 250
Return
;*********************************************************************************
;****************Einde Subroutines************************************************
HoofdMenu: ' Rotary Switch
Cls
While RotarySw = 0 : Wend
GoSub pauze
waarde = menu_waarde
menuteller = 0
Menu_item = 1 ' als herkenning voor dit eerste blok hoofdmenu
While 1 = 1
'Tekst op lcd display zetten
menu_waarde = waarde ; Onthouden menu positie terughalen
Select waarde
Case 0 '1234567890123456
Print At 1,1, "-> Tijd " ; Bij de tijd blijven
Print At 2,1, "- Pompen 1-4A/U" ;
Case 1 '1234567890123456
Print At 1,1, "-> Pompen 1-4A/U" ; Manueel water geven, bv. de eerste keer of vor reiniging
Print At 2,1, "- Set Trays 1-4" '
Case 2 '1234567890123456
Print At 1,1, "-> Set Trays 1-4" ' Selecteer de Tray's die voorzien zijn van zaden
Print At 2,1, "- ADC " ;
Case 3 '1234567890123456
Print At 1,1, "-> ADC " ; LDR naar PWM LEDs omzetting
Print At 2,1, "- Debiet Totals" ; Counts & Liters & Liter verbruik per week of 2 weken TODO
Case 4 '1234567890123456
Print At 1,1, "-> Debiet Totals" ; Counts & Liters & Liter verbruik per week of 2 weken TODO
Print At 2,1, "- Instellingen " ' UrenExtra, Delay, PWM gebied
Case 5 '1234567890123456
Print At 1,1, "-> Instellingen " ' UrenExtra, Delay, PWM gebied
Print At 2,1, "- Pompen Info " '
Case 6 '1234567890123456
Print At 1,1, "-> Pompen Info " ' Lees de Pomptijden uit.
Print At 2,1, "- Reset Counter"
Case 7 '1234567890123456
Print At 1,1, "-> Reset Counter" ; Reset de count's en dus ook de Liters
Print At 2,1, "- Vul/Leeg Pomp" ; Test pomp
Case 8
Print At 1,1, "-> Vul/Leeg Pomp" ; Test pomp
Print At 2,1, "- Reset Timers " ;
Case 9
Print At 1,1, "-> Reset Timers " ; Res�t de Timers voor pompen aan tijd
Print At 2,1, "- Save Settings" ; EWrite
Case 10
Print At 1,1, "-> Save Settings" ;
Print At 2,1, "- Exit "
Case 11
Print At 1,1, "-> Exit " ; Naar main
Print At 2,1, "- "
EndSelect
If waarde > 11 Then ' ipv.3 of 4
waarde = 11
EndIf
If RotarySw = 0 Then
Menu_item = 0
menuteller = 0 ; Blijf nog 10 seconden in Menu.
Select waarde
' **************************************
Case 0 ; Tijd instellen
dobit = 1
GoTo main
' **************************************
Case 1 ; Pompen 1-4 Aan/Uit
dobit = 1
GoTo main
' **************************************
Case 2 ; Set Trays 1-4
dobit = 1
GoTo main
' **************************************
Case 3 ; ADC, LDR, LED Licht
dobit = 1
GoTo main
' **************************************
Case 4 ; Debiet Totals
dobit = 1
GoTo main
' **************************************
Case 5 ; Verleng Tijd
dobit = 1
GoTo main
' **************************************
Case 6 ; Pomp Info
dobit = 1
GoTo main
' **************************************
Case 7 ; Reset Counter(s)
dobit = 1
GoTo main
; ***********************************************************************
Case 8 ; Pomp1 PWM 52%, nodig omdat Flowmeter output "hoog" kan blijven!
dobit = 1
GoTo main
' **************************************
Case 9 ; Reset Timers
dobit = 1
GoTo main
' **************************************
Case 10 ; Save Settings
dobit = 1
GoTo main
' **************************************
Case 11 ; Exit
dobit = 1
GoTo main
EndSelect
EndIf
GoSub pauze
Inc menuteller ; test
If menuteller = 100 Then ; Na 10 seconden via Display_IR naar main_loop
menuteller = 0
menu_waarde = waarde ; Onthoud menu positie
dobit = 1
GoTo main
EndIf ;
Wend
;****************************************************************
;Einde HoofdMenu
'****************************************************************
main:
;
Cls
telbit_old = telbit ; nodig
vertraging = 0 ; idem
spanning_high = 0
spanning_low = 0
lopen = 999 ; Beter dan een leeg display, want voordat DHT11 gestart wordt...
test = 19 ; minder vaak de klok uitlezen.
lussen = 0
While 1 = 1
;****************************************************************
;GoSub FlowMeter
'*********************************EINDE FlowMeter****************
;RotarySwitch
;****************************************************************
If RotarySw = 0 Then 'rotary encoder ingedrukt.
Sound Speaker, [115,20]
For loopCounter = 0 To 20
DelayMS 25
If RotarySw = 1 Then 'rotary encoder losgelaten
GoTo HoofdMenu ' Eerste probeersel
' GoTo changeMode1 ' Even in de wacht
EndIf
Next loopCounter
Sound Speaker, [95,50] 'rotary encoder nog steeds (lang) ingedrukt.
GoTo main ' Naar "long(er) press" Rotary Switch routine
EndIf
' **********************************************************************************
; Quasi interupt als er pulsen komen van de Flowmeter 1e deel
;****************************************************************
If spanning_low = 1 And spanning_high = 1 Then
telbit_old = 1
Inc vertraging ;
EndIf
If vertraging >= 1 Then
GoTo verder
EndIf
'****************************************************************
Inc lopen
If lopen < 1000 Then ' ca. 4 sec interval
GoTo verder
EndIf
If lopen = 1000 Then
lopen = 0
EndIf
' *********18B20******************************************************
; GoSub Minuut1 ; Hier naar toe verplaatst
' ********************************************************************
GoSub DHT11 ' DHT11_Begin ' DHT11_einde
'****************************************************************
; Gosub bereken_vocht ; Bereken de Vochtindex in uren, naar beneden
; **************************************************************
; GoSub ADC ; werkt niet hier, Nu net na vervolgens: LABEL
verder:
; Quasi interupt als er pulsen komen van de Flowmeter 2e deel ;
If vertraging > 250 Then ; Voorlopig 50, of > 250
telbit_old = telbit ;
vertraging = 0
Inc teller ; Verloren telpuls herstellen, komt door de voorwaarde vooraf (spanning_high, _low)
spanning_high = 0 ; Na telronde (bv. 1 Liter) de Flowsensor voorwaarden clearen,
spanning_low = 0 ; zie Flowsensor routine.
EndIf
'LCD Display en Tijd Uitlezen DS1307 *******************************************
Inc test
If test = 20 Then
test = 0
; GoSub Inlezen
; GoSub Omzetten ;1234567890123456
If vertraging >= 1 Then ; komt van interupt 2e deel
Print At 1,1, Dec2 Uren, ":", Dec2 Minuten, " " , Dec4 teller
Else
lussen = 0
pompen_pwm = pompen_pwm1 ; pompen_pwm = 90
Print At 1,1, Dec2 Uren, ":", Dec2 Minuten, ":", Dec2 Seconden, " "
;Print At 2,9, Dec2 Verwarming, ".", Dec1 Decimalen, "C " ; DS18B20
EndIf
EndIf
;*********************************************************************************
If ChkSum <> (Temp.HighByte + Hum.HighByte) Then ; Zijn er geen goeie DHT11 metingen vericht? Dan;
'67890123456
Print At 2,4,"~" ; CRC fout
dobit = 0 ;
EndIf
;
If dobit = 1 Then ; metingen oke
GoSub bereken_vocht ; Bereken de Vochtindex in uren
Print At 2,1, Dec2 Hum.HighByte,"% ", At 2,5, Dec2 Temp.HighByte,"C ", At 2,15, Dec2 vocht ; Hum. DHT11 en ' Temp. DHT11
; Print At 2,1, Dec Humpie, " ", Dec Tempie, " ", Dec2 vocht
EndIf
'**********************************************************************************
' ***** deca Liter readout**
; GoSub DecaLiter
;*********************************************************************************
;Dag- Week- en 2 Wekenteller in liters
;*********************************************************************************
If Uren = 00 And Minuten = 01 And Do_dagen = 0 Then
Weekteller = Weekteller + deciliter ; FLOAT
Do_dagen = 1
Inc dagen_week ; Inc tot 7 en clear weekteller FLOAT
; GoSub bewaar_instellingen
EndIf
If Uren = 00 And Minuten = 01 And Do_weken = 0 Then
Wekenteller = Wekenteller + deciliter ; FLOAT
Do_weken = 1
Inc dagen_weken ; Inc tot 14 en clear dan wekenteller FLOAT
EndIf
If Uren = 00 And Minuten = 02 Then
Do_dagen = 0
Do_weken = 0
teller = 5 ; vergeten
deciliter = 0 ; wordt dan 0,01 L
EndIf
;*********************************************************************************
If dagen_week = 7 Then ; Verbruik over 7 dagen bijhouden, handig bij het afvullen.
Weekteller = 0 ; FLOAT
EndIf
If dagen_weken = 14 Then ; Idem over 14 dagen
Wekenteller = 0 ; FLOAT
EndIf
;***********************
; Waterniveau te laag
; While niveau = 0 ; -->> Symbol niveau
; If RotarySw = 0 Then 'rotary encoder ingedrukt.
; Sound Speaker, [115,20]
; GoTo HoofdMenu
; EndIf
; '1234567890123456 AANPASSEN ******
; Print At 2,1, "Water-Level-Warn"
; Low OzonGen
; Low Fans
;HBusOut %10000100, %01010000,[00] ' BitWizard I2C DIO. pin 3 IO 0 50 8E, 50, 00 PWM1
;HBusOut %10000100, %01010001,[00] ' BitWizard I2C DIO. pin 4 IO 1 51 8E, 51, 00 PWM2
;HBusOut %10000100, %01010010,[00] ' BitWizard I2C DIO. pin 5 IO 2 52 8E, 52, 7F PWM3
;HBusOut %10000100, %01010011,[00] ' BitWizard I2C DIO. pin 6 IO 3 53 8E, 53, 7F PWM4
; Low pomp1 ; HPWM 2, 0, 2000 ; Enz. ' Port RC1=CCP2, Pin 16, 2kHz.
; Low peltier
; High LEDRed
; Low LEDGreen
; DelayMS 1000
; Wend
;*************************
;If vertraging >= 1 Then
;GoTo vervolgens
;EndIf
;*************************
;If Seconden = 59 Then ; Nieuwe positie, want net onder 'Humpie-Dumpie' werkte het niet, nu wel!!!!
;GoSub ADC
;EndIf
;**************************************************************
;GoSub pomptijd ; Verplaatst naar beneden
;*************************
;GoSub Pompen_aan ; Is Pomptijd bereikt? Start dan de resp. Pompen 1-4
;GoSub Ozon_Fan ; Ozon en Fan aan/uit voor-tijdens-na pompen
;GoSub Dagelijks ; Vaste tijden voor Ozon en Fan.
;GoSub bodemverwarming ; Tempereatuur hoger of lager dan de deault waarde.
'*************************
vervolgens:
;GoSub Pompen_uit
;*************************
; Low LEDRed
; GoSub pompenactie ; Vanuit Flowmeter aangeroepen. idem
; GoSub auto_pwm ; Routine die zorgt voor pomp-snelheids verhoging
High LEDGreen
; DelayMS 1
;**************************************************************
;If Seconden = 01 Then
;If Minuten = 00 Or Minuten = 10 Or Minuten = 20 Or Minuten = 30 Or Minuten = 40 Or Minuten = 50 Then
;GoSub pomptijd ; Pomptijden 1-4 berekenen als vochtsensor droog is, vocht1-4 = 1
;EndIf
;EndIf
;*************************
Wend
'****************************************************************
End