Pomoc w dokończeniu programu
: 09 sty 2018, 20:14
Witam czytających - mam prośbę o pomoc w dokończeniu ( usprawnieniu ) programu.
Chodzi mi o dodanie "przycisku" rozróżniającego krótkie i długie naciśnięcie program wygląda tak:
Znalazłem tu na forum program Bartka
viewtopic.php?f=16&t=55
(mam nadzieję że Bartek nie będzie miał nic przeciwko że go użyje).
Nie wiem w którym miejscu umieścić program Bartka i jak go połączyć w całość.
W tej chwili mój program działa tak że aby dojść do załączenia termostatu muszę przejść za każdym razem
przez ustawienie temperatury zadanej jak i delty.
Miłe było by również poprawienie moich wypocin
.
pozdrawiam Jacek.
Chodzi mi o dodanie "przycisku" rozróżniającego krótkie i długie naciśnięcie program wygląda tak:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- '-------------------------------------------------------------------
- ' TESTOWY STEROWNIK PODGRZEWANIA MIODARKI
- 'CZUJNIKI TEMPERATURY DS18B20 06.01.2018
- '$sim
- $regfile = "m2560def.dat"
- $crystal = 16000000
- $baud = 19200
- $hwstack = 255
- $swstack = 128
- $framesize = 128
- '--------------------------------------------------------------------
- $prog &HFF , &HFF , &HD9 , &HFF ' generated. Take care that the chip supports all fuse bytes.
- '-------------------------------------------------------------------
- ' SP9DR Pawel Labendz
- ' T6963C graphic display support demo 240 * 128
- 'First we define that we use a graphic LCD
- '--------------------------------------------------------------------
- 'The dataport is the portname that is connected to the data lines of the LCD
- 'The controlport is the portname which pins are used to control the lcd
- 'CE, CD etc. are the pin number of the CONTROLPORT.
- ' For example CE =5 because it is connected to PORTC.5
- 'mode 8 gives 240 / 8 = 30 columns , mode=6 gives 240 / 6 = 40 columns
- 'The connections of the LCD used in this demo
- 'LCD pin connected to
- ' 1 GND GND 'black
- '2 +5V +5V 'red
- '3 nc not connected 'yellow
- '4 C/D PORTC.0 'brown
- '5 /RD PORTC.1 'green
- '6 /WR PORTC.2 'blue
- '7-14 DBA PORT A0-A7
- '15 /CE PORTC.3 'blue
- '16 RESET PORTC.4 'white
- '17 NC not connected
- '18 MD2 GND 'green
- '19 FS PORTC.5 'white
- '20 NC not connected
- '--------------------------------------------------------------------
- Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 4 , Cd = 5 , Wr = 2 , Rd = 3 , Reset = 6 , Fs = 7 , Mode = 6
- '--------------------------------------------------------------------
- 'KONFIGURACJA TIMER'ÓW
- 'Config Timer0 = Timer , Prescale = 256
- 'Enable Timer0 : On Timer0 Przertimer0
- Config Timer1 = Timer , Prescale = 8
- Enable Timer1 : On Timer1 Przertimer1
- Config Timer3 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
- Config Timer4 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
- Enable Timer3 , Enable Timer4
- Stop Timer3 : Stop Timer4
- Enable Interrupts
- '--------------------------------------------------------------------
- 'KONFIGURACJA ADC
- Config Adc = Single , Prescaler = Auto , Reference = Avcc
- Start Adc
- '--------------------------------------------------------------------
- 'KONFIGURACJA PORTÓW
- Config Portk = &B00000001 : Portk = &B11111111
- Config Portb = &B11111110 : Portb = &B01111111
- '--------------------------------------------------------------------
- 'ALIASY PORTÓW
- Set_start Alias Pink.7 'przycisk enkodera
- Led_live Alias Portk.0 'LED pokazująca że układ żyje
- Arduino_led Alias Portb.7 'LED na płytce Arduino
- '--------------------------------------------------------------------
- 'ZMIENNE CZASU
- Dim Dziel(6) As Byte
- Dim Flaga10ms As Bit
- Dim Flaga100ms As Bit
- Dim Flaga500ms As Bit
- Dim Flaga1s As Bit
- Dim Flaga2s As Bit
- Dim Flaga10s As Bit
- '--------------------------------------------------------------------
- 'ZMIENNE ENKODERA
- Dim Tryb As Byte , Rezultat As Integer
- Dim Zmienna As Word
- Dim Enc As Byte
- '--------------------------------------------------------------------
- 'ZMIENNE MENU
- Dim Poz_menu As Byte
- '--------------------------------------------------------------------
- 'ZMIENNE TEMPERATUR
- Dim T1_bok As String * 6
- Dim T1_bok_p2 As Single
- Dim T1_bok_p3 As Single
- Dim B1 As Byte
- Dim B1_1 As Byte
- 'Dim R1 As Byte
- Dim Znak1 As String * 1
- '--------------------------------------
- Dim T_set As Single
- Dim T_set_p1 As Word
- Dim T_set_p2 As String * 10
- Dim T_set_eeprom As Word
- '--------------------------------------
- Dim T_set_delta As Single
- Dim T_set_delta_p1 As Word
- Dim T_set_delta_p2 As String * 10
- Dim T_set_delta_eeprom As Word
- '--------------------------------------------------------------------
- Dim T_suma As Single
- Dim T_suma1 As Word
- Dim T_suma2 As String * 10
- '--------------------------------------------------------------------
- 'ZMIENNE PRZETWORNIKÓW ADC
- Dim Adc_s1bok As Word
- Dim Adc_s1bok_p1 As Long
- Dim Adc_s1bok_p2 As Word
- '----------------------------------------------------------
- 'ZMIENNE PRZELICZNIKA PROCENT
- Dim Proc_s1bok As Long
- '--------------------------------------------------------------------
- 'DEKLARACJE PODPROGRAMÓW
- Declare Sub Pomiary
- Declare Sub Przyciski
- Declare Sub Wyswietl
- Declare Sub Mruganie
- Declare Sub Get_adc
- Declare Sub Termostat_on
- Declare Sub Termostat_off
- Declare Sub Grzanie_on
- Declare Sub Grzanie_off
- '--------------------------------------------------------------------
- 'USTAWIENIA POCZĄTKOWE
- 'Readeeprom T_set_p2
- Waitms 500
- Cursor Off
- Cls
- '--------------------------------------------------------------------
- 'ODCZYT DANYCH Z PAMIĘCI EEPROM
- Readeeprom T_set_eeprom , 10
- Readeeprom T_set_delta_eeprom , 30
- '--------------------------------------------------------------------
- 'PRZYPISANIE ODCZYTANYCH DANYCH Z PAMIĘCI EEPROM
- 'DO DANYCH W PROGRAMIE
- T_set_p1 = T_set_eeprom
- T_set_delta_p1 = T_set_delta_eeprom
- Call Wyswietl
- '--------------------------------------------------------------------
- 'POCZĄTEK PĘTLI GŁÓWNEJ
- Do
- '--------------------------------------------------------------------
- If Flaga10ms = 1 Then 'co 10 ms
- Flaga10ms = 0 'wyzeruj Flaga10ms
- Call Get_adc
- End If
- If Flaga100ms = 1 Then 'co 100ms
- Flaga100ms = 0 'wyzeruj Flaga100ms
- Call Przyciski
- Call Wyswietl
- End If
- If Flaga500ms = 1 Then 'co 50ms
- Flaga500ms = 0 'wyzeruj Flaga500ms
- End If
- If Flaga1s = 1 Then 'co1s
- Flaga1s = 0 'wyzeruj Flaga1s
- Call Pomiary '
- Call Mruganie
- End If
- If Flaga2s = 1 Then 'co2s
- Flaga2s = 0 'wyzeruj Flaga2s
- End If
- If Flaga10s = 1 Then 'co10s
- Flaga10s = 0 'wyzeruj Flaga10s
- End If
- '--------------------------------------------------------------------
- 'USTAWIANIE TEMP. ZADANEJ ORAZ DELTY ENKODEREM
- If Poz_menu = 1 Then
- If Rezultat <> 0 Then
- Zmienna = Zmienna + Rezultat
- If Zmienna > 0 And Rezultat = 1 Then
- Incr T_set_p1
- If T_set_p1 > 390 Then
- T_set_p1 = 390
- End If
- End If
- If Zmienna > 0 And Rezultat = -1 Then
- Decr T_set_p1
- If T_set_p1 = 0 Or T_set_p1 > 390 Then
- T_set_p1 = 0
- End If
- End If
- T_set_eeprom = T_set_p1
- Writeeeprom T_set_eeprom , 10
- End If
- End If
- If Poz_menu = 2 Then
- If Rezultat <> 0 Then
- Zmienna = Zmienna + Rezultat
- If Zmienna > 0 And Rezultat = 1 Then
- Incr T_set_delta_p1
- If T_set_delta_p1 > 50 Then
- T_set_delta_p1 = 50
- End If
- End If
- If Zmienna > 0 And Rezultat = -1 Then
- Decr T_set_delta_p1
- If T_set_delta_p1 = 0 Or T_set_delta_p1 > 50 Then
- T_set_delta_p1 = 0
- End If
- End If
- T_set_delta_eeprom = T_set_delta_p1
- Writeeeprom T_set_delta_eeprom , 30
- End If
- End If
- '-------------------------------------------------------------------
- 'OBSŁUGA ENKODERA
- Enc.0 = Pink.1
- Enc.1 = Pink.2
- Rezultat = 0
- Select Case Tryb
- Case 0:
- If Enc = 3 Then Incr Tryb 'jeżeli dwa rozwarte
- Case 1:
- If Enc = 2 Then Tryb = 2
- If Enc = 1 Then Tryb = 3
- Case 2:
- If Enc = 1 Then
- Rezultat = 1
- Tryb = 0
- End If
- Case 3:
- If Enc = 2 Then
- Rezultat = -1
- Tryb = 0
- End If
- End Select
- ' If Poz_menu = 3 Then
- ' Call Grzanie_on
- 'Else
- ' Call Grzanie_off
- 'End If
- '--------------------------------------------------------------------
- 'OBLICZANIE ZAŁĄCZANIA I WYŁĄCZANIA TERMOSTATU
- T_suma1 = T_set_p1 - T_set_delta_p1 'tu działa
- T_suma = T_suma1 / 10
- T_suma2 = Str(t_suma)
- T_suma2 = Fusing(t_suma , "#.#")
- If T1_bok < T_suma2 And Poz_menu = 3 Then
- Call Termostat_on
- End If
- If T1_bok => T_set_p2 Or Poz_menu <> 3 Then
- Call Termostat_off
- End If 'tu działa
- '--------------------------------------------------------------------
- Loop
- End
- 'KONIEC PETLI GŁÓWNEJ
- '--------------------------------------------------------------------
- 'PODPROGRAMY
- '--------------------------------------------------------------------
- 'POBIERANIE Z PRZETWORNIKA ADC0 WARTOŚCI
- 'NASTAWA PWM POTENCJOMETREM
- Sub Get_adc
- Adc_s1bok = Getadc(0)
- Adc_s1bok_p1 = Adc_s1bok * 100
- Shift Adc_s1bok , Right , 2
- If Adc_s1bok_p2 <> Adc_s1bok Then
- Adc_s1bok_p2 = Adc_s1bok
- Pwm3a = Adc_s1bok_p2
- Proc_s1bok = Adc_s1bok_p1 / 1023
- End If
- End Sub
- Sub Pomiary
- '--------------------------------------------------------------------
- 'POBIERANIE DANYCH Z DS18B20 I OBLICZENIA TEMPERATURY
- '-----------------czujnik DS18B20------------------------------------
- Config 1wire = Pinb.0 'konfiguracja maistrali 1wire
- 1wreset
- '1wr 'podprogram 1wr
- 1wwrite &HCC 'komenda skip ROM
- 1wwrite &H44 'komenda convert T
- '1wr
- 1wreset 'podprogram 1wr
- 1wwrite &HCC 'komenda skip ROM
- 1wwrite &HBE 'komenda read
- B1 = 1wread() 'odczyt z czujnika 1
- B1_1 = 1wread()
- '1wr 'podprogram 1wr
- If B1 >= 248 Then 'jesli temperatura ujemna
- B1 = R1 - B1 'od 255 odejmujemy B1a
- B1_1 = R1 - B1_1 'od 255 odejmujemy B2a
- Znak1 = "-"
- Else
- Znak1 = "+"
- End If
- T1_bok_p2 = B1 / 16 'przesunięcie w prawo o 4 bajty
- T1_bok_p3 = B1_1 * 16 'przesunięcie w lewo o 4 bajty
- T1_bok_p2 = T1_bok_p2 + T1_bok_p3
- T1_bok = Fusing(t1_bok_p2 , "###.&")
- End Sub
- '--------------------------------------------------------------------
- 'OBSŁUGA PRZYCISKU ENKODERA
- Sub Przyciski
- If Set_start = 0 Then
- Incr Poz_menu
- Bitwait Set_start , Set
- End If
- If Poz_menu = 4 Then
- Poz_menu = 0
- End If
- End Sub
- '--------------------------------------------------------------------
- ' NARAZIE NIE WYKORZYSTANE
- Sub Grzanie_on
- End Sub
- Sub Grzanie_off
- End Sub
- '--------------------------------------------------------------------
- 'TERMOSTAT
- Sub Termostat_on
- Set Arduino_led
- Start Timer3
- Pwm3a = Adc_s1bok_p2
- End Sub
- Sub Termostat_off
- Reset Arduino_led
- Stop Timer3
- Pwm3a = 0
- End Sub
- '--------------------------------------------------------------------
- 'WYŚWIETLANIE
- Sub Wyswietl
- '--------------------------------------------------------------------
- 'PRZELICZANIE TEMP. ZADANEJ
- T_set_delta = T_set_delta_p1 / 10
- T_set_delta_p2 = Str(t_set_delta)
- T_set_delta_p2 = Fusing(t_set_delta , "#.#")
- '--------------------------------------------------------------------
- 'PRZELICZANIE DELTY
- T_set = T_set_p1 / 10
- T_set_p2 = Str(t_set)
- T_set_p2 = Fusing(t_set , "#.#")
- '--------------------------------------------------------------------
- Select Case Poz_menu
- Case 0:
- Showpic 84 , 0 , Stopien_c
- Locate 1 , 1 : Lcd "TEMP_S1 : " ; T1_bok ; " C "
- Locate 2 , 1 : Lcd "TEMP_SET: " ; T_set_p2 ; "C "
- Locate 3 , 1 : Lcd "DEL_TEMP: " ; T_set_delta_p2 ; "C "
- Locate 4 , 1 : Lcd "PWM S1: " ; Proc_s1bok ; "% "
- Locate 5 , 1 : Lcd "TERMOSTAT OFF "
- '--------------------------------------------------------------------
- 'PONIŻEJ CHWILOWO WYŚWIETLANE SĄ DANE POMOCNICZE
- 'CO BYM WIDZIAŁ CO SIĘ DZIEJE
- Locate 11 , 1 : Lcd "ADC0: " ; Adc_s1bok ; " "
- Locate 12 , 1 : Lcd "PWM3A: " ; Pwm3a ; " "
- Locate 13 , 1 : Lcd "T_set_delta: " ; T_set_delta_p1 ; " "
- Locate 14 , 1 : Lcd "T_set_p1: " ; T_set_p1 ; " "
- Locate 15 , 1 : Lcd "POZ_MENU " ; Poz_menu
- Case 1:
- Locate 1 , 1 : Lcd "TEMP_S1 : " ; T1_bok ; " C "
- Locate 2 , 1 : Lcd "TEMP_SET: " ; T_set_p2 ; "C "
- Locate 3 , 1 : Lcd "DEL_TEMP: " ; T_set_delta_p2 ; "C "
- Locate 4 , 1 : Lcd "PWM S1: " ; Proc_s1bok ; "% "
- Locate 5 , 1 : Lcd "TERMOSTAT OFF "
- '--------------------------------------------------------------------
- 'PONIŻEJ CHWILOWO WYŚWIETLANE SĄ DANE POMOCNICZE
- 'CO BYM WIDZIAŁ CO SIĘ DZIEJE
- Locate 11 , 1 : Lcd "ADC0: " ; Adc_s1bok ; " "
- Locate 12 , 1 : Lcd "PWM3A: " ; Pwm3a ; " "
- Locate 13 , 1 : Lcd "T_set_delta: " ; T_set_delta_p1 ; " "
- Locate 14 , 1 : Lcd "T_set_p1: " ; T_set_p1 ; " "
- Locate 15 , 1 : Lcd "POZ_MENU " ; Poz_menu
- Case 2:
- Locate 1 , 1 : Lcd "TEMP_S1 : " ; T1_bok ; " C "
- Locate 2 , 1 : Lcd "TEMP_SET: " ; T_set_p2 ; "C "
- Locate 3 , 1 : Lcd "DEL_TEMP: " ; T_set_delta_p2 ; "C "
- Locate 4 , 1 : Lcd "PWM S1: " ; Proc_s1bok ; "% "
- Locate 5 , 1 : Lcd "TERMOSTAT OFF "
- '--------------------------------------------------------------------
- 'PONIŻEJ CHWILOWO WYŚWIETLANE SĄ DANE POMOCNICZE
- 'CO BYM WIDZIAŁ CO SIĘ DZIEJE
- Locate 11 , 1 : Lcd "ADC0: " ; Adc_s1bok ; " "
- Locate 12 , 1 : Lcd "PWM3A: " ; Pwm3a ; " "
- Locate 13 , 1 : Lcd "T_set_delta: " ; T_set_delta_p1 ; " "
- Locate 14 , 1 : Lcd "T_set_p1: " ; T_set_p1 ; " "
- Locate 15 , 1 : Lcd "POZ_MENU " ; Poz_menu
- Case 3:
- Locate 1 , 1 : Lcd "TEMP_S1 : " ; T1_bok ; " C "
- Locate 2 , 1 : Lcd "TEMP_SET: " ; T_set_p2 ; "C "
- Locate 3 , 1 : Lcd "DEL_TEMP: " ; T_set_delta_p2 ; "C "
- Locate 4 , 1 : Lcd "PWM S1: " ; Proc_s1bok ; "% "
- Locate 5 , 1 : Lcd "TERMOSTAT ON "
- '--------------------------------------------------------------------
- 'PONIŻEJ CHWILOWO WYŚWIETLANE SĄ DANE POMOCNICZE
- 'CO BYM WIDZIAŁ CO SIĘ DZIEJE
- Locate 11 , 1 : Lcd "ADC0: " ; Adc_s1bok ; " "
- Locate 12 , 1 : Lcd "PWM3A: " ; Pwm3a ; " "
- Locate 13 , 1 : Lcd "T_set_delta: " ; T_set_delta_p1 ; " "
- Locate 14 , 1 : Lcd "T_set_p1: " ; T_set_p1 ; " "
- Locate 15 , 1 : Lcd "POZ_MENU " ; Poz_menu
- End Select
- End Sub
- '--------------------------------------------------------------------
- 'MRUGANIE DIODĄ LED CO 1 SEKUNDĘ
- ' CO BY BYŁO WIDAĆ ŻE UKŁAD ŻYJE
- Sub Mruganie
- Toggle Led_live
- End Sub
- '--------------------------------------------------------------------
- ' podprogram przerwań Timer1
- Przertimer1:
- Timer1 = 45536 'wstawienie do Timer1 wartości 45536
- Incr Dziel(1) 'zwiększaj dzielnik 1
- If Dziel(1) = 1 Then 'jeśli dzielnik 1 zwiększy się 1 razy
- Dziel(1) = 0 'wyzeruj dzielnik 1
- Set Flaga10ms 'ustaw Flaga10ms
- Incr Dziel(2) 'zwiększaj dzielnik 2
- If Dziel(2) = 10 Then 'jeśli dzielnik 2 zwiększy się 10 razy
- Dziel(2) = 0 'wyzeruj dzielnik 2
- Set Flaga100ms 'ustaw Flaga100ms
- Incr Dziel(3) 'zwiększaj dzielnik 3
- If Dziel(3) = 5 Then 'jeśli dzielnik 3 zwiększy się 5 razy
- Dziel(3) = 0 'wyzeruj dzielnik 3
- Set Flaga500ms 'ustaw Flaga500ms
- Incr Dziel(4) 'zwiększaj dzielnik 4
- If Dziel(4) = 2 Then 'jeśli dzielnik 4 zwiększy się 2 razy
- Dziel(4) = 0 'wyzeruj dzielnik 4
- Set Flaga1s 'ustaw Flaga1s
- Incr Dziel(5) 'zwiększaj dzielnik 5
- If Dziel(5) = 2 Then 'jeśli dzielnik 5 zwiększy się 2 razy
- Dziel(5) = 0 'wyzeruj dzielnik 5
- Set Flaga2s 'ustaw Flaga2s
- Incr Dziel(6) 'zwiększaj dzielnik 6
- If Dziel(6) = 5 Then 'jeśli dzielnik 6 zwiększy się 5 razy
- Dziel(6) = 0 'wyzeruj dzielnik 6
- Set Flaga10s ' Ustaw Flaga10s
- End If 'koniec warunku
- End If 'koniec warunku
- End If 'koniec warunku
- End If 'koniec warunku
- End If 'koniec warunku
- End If 'koniec warunku
- Return 'powrót
- '--------------------------------------------------------------------
- 'ZNAK STOPNIA NA RAZIE NIE UMIEM ZAŁADOWAĆ DO WYŚWIETLACZA
- 'WŁASNYCH ZNAKÓW STOPNIA POPRZEZ WŁASNE FONTY
- Stopien_c:
- $bgf "stopien_C.bgf"
viewtopic.php?f=16&t=55
(mam nadzieję że Bartek nie będzie miał nic przeciwko że go użyje).
Nie wiem w którym miejscu umieścić program Bartka i jak go połączyć w całość.
W tej chwili mój program działa tak że aby dojść do załączenia termostatu muszę przejść za każdym razem
przez ustawienie temperatury zadanej jak i delty.
Miłe było by również poprawienie moich wypocin
pozdrawiam Jacek.