$regfile = "m1284pdef.dat"
$crystal = 64915200

$hwstack = 188                                              ' default
$swstack = 188                                              ' default
$framesize = 256                                            ' minimum for this library is 128. Increase for your application needs!
$lib "ds1307clock.lib"                                      ' biblioteka do obsługi zegarka ds1307
$lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI
'$baud = 38400
'Config Com1 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0       'dla ELM327
Config Com1 = 2400 , Synchrone = 0 , Parity = Even , Stopbits = 1 , Databits = 8 , Clockpol = 1       'dla sterownika webasto
Config Serialout = Buffered , Size = 20                     'konfiguracja bufora wyjściowego dla rs232
'Config Serialin = Buffered , Size = 44 , Bytematch = 62     'bytematch=62 po odebraniu znaku ">" skocz do podprogramu "Serial0charmatch"
'Config Serialout1 = Buffered , Size = 10                    'konfiguracja bufora wyjściowego dla webasta (bufor z dużym zapasem)
'Config Input = Crlf , Echo = Cr
'////////////////////////////////////////////////////////////////////////
'************************************************************************
'//////////// ZMIENNE UŻYWANE DLA ZEGARKA     ///////////////////////////
Const Ds1307w = &HD0                                        ' Addresses of Ds1307 clock
Const Ds1307r = &HD1
Config Clock = User                                         ' this will dim the bytes automatic
Dim Weekday As Byte                                         ', Zmienna As Byte
Dim Dzien_tygodnia As String * 3
Dim Pomoc_string As String * 3
Dim Flaga_zmiany_czasu As Bit
'_day = 04 : _month = 09 : _year = 13 : Weekday = 3          'przekonwertuj
'Gosub Setdate
'_sec = 0 : _min = 29 : _hour = 17
'Gosub Settime
'ZE WZGLĘDU NA WEBASTO ZMIENIONE ŚWIATŁA I ZAPŁON (W STOSUNKU DO PIERWOTNEJ WERSJI) ORAZ DODANO PRZEKAZNIK_WLE
Declare Sub Sprawdzanie_swiatel
Declare Sub Zmiana_czasu
Config Pind.= Output                                      'przekaznik
Config Pind.= Input                                       'światła
Config Pind.= Input                                       'zapłon
Config Pinc.= Input                                       'ciśnienie oleju
Config Pind.= Output                                      'podświetlenie
Config Pind.= Output                                      'buzzer
Przekaznik Alias Portd.7
Swiatla Alias Pind.2
Zaplon Alias Pind.3
Cisn_oleju Alias Pinc.7
Podswietlenie Alias Portd.4
Buzzer Alias Portd.5
Portd.= 1 : Portd.= 1 : Portd.= 1 : Portc.= 1
'////////////////////////////////////////////////////////////////////////
'************************************************************************
'//////////// ZMIENNE UŻYWANE DLA MENU ////////////////////
Config Pinc.= Input
Config Pinc.= Input
Config Pinc.= Input
Config Pinb.= Input
Portc.= 1 : Portc.= 1 : Portc.= 1 : Portb.= 1
Config Timer0 = Timer , Prescale = 1024                     'konfiguracja timera0 do odmierzania czasu (zamiast wait)
On Ovf0 Odliczanie_czasu                                    'po przepełnieniu timera skocz do odliczanie_czasu
Const Timer0_counter = 252                                  'stała
Load Timer0 , Timer0_counter                                'odmierza ok. 42 ms dla prescale 1024 i freq=6144000Hz
Enable Timer0                                               'włącz timer0
'config timer1 = timer , prescale = 64
'on ovf1 przerwanie_timer1
'const timer1_counter = 17536                                'dla Q=6144000 i prescale=64 przerwanie wywoływane co 0,5 sekundy
'enable TIMER1
'Pcmsk2 = &B00001000                                         'ustawia które piny mają być aktywne dla przerwań (1-aktywne) str.68 z ds M1284p
'Enable Pcint2
'On Pcint2 Pcie21_intr                                       'PCINT2 zakres: PCINT23-16
Config Int2 = Falling                                       'konf. przerwania na zbocze narastające
'Enable Int2                                                 'włączenie przerwania int2
On Int2 Int2_intr                                           'po wykryciu zbocza narastającego skocz do int2_intr
'Enable Pcint19
'Enable Pcint20
Dim Aktywuj_menu As Bit                                     'zmienna pomocnicza (z przerwania, żeby obsluga impulsatora nie była w przerwaniu)
Dim Sekunda As Byte
Dim Timer0_stan As Byte
Dim Timer0_stan2 As Byte
Dim Timer0_stan3 As Byte
Dim Tryb As Byte                                            ' , Rezultat As Integer
Dim Licznik As Byte , C As Bit , Podmenu_1 As Byte          ', A As Byte , C As Byte
Dim Liczba_sekund As Byte
'Aktywuj_menu = 1                                            'wyłączone wejście do menu
Sw3 Alias Pinc.4
Sw2 Alias Pinb.2                                            'wejście switch
Sw1 Alias Pinc.5                                            '
Declare Sub Menu
'Declare Sub Wyswietlacz
'///////////////////////////////////////////////////////////////////
'*******************************************************************
'//////////// ZMIENNE UŻYWANE DLA TEMPERATURY  ////////////////////
'Declare Sub Procedura_odczytu
Declare Sub Odczyt_temperatury
Declare Sub Mierz_napiecie
'Declare Sub Porownanie_temperatur
'Declare Sub Odczyt_nr_ident
'Declare Sub Weryfikacja_adresu
Config 1wire = Portc.6

'Dim Liczba_ukl As Byte                                      'liczba czujników na magistrali
Dim Ia As Byte
Dim Adres(8) As Byte                                        'adres pastylki                                        'deklaracja tablicy zmiennych
Dim T As Integer                                            ', T11 As Single
Dim T1 As Integer
Dim Ktory_czujnik As Bit
'Dim X As Byte , Y As Byte
Dim Tz As Byte , Tw As Byte                                 ', Czy_ujemna As Bit
Dim Napiecie As Word , Wolt As Single
Dim Wolt_cale As Byte , Wolt_dziesiate As Byte
Dim Pomiar_temp As Bit                                      'wskaźnik mówiący, czy konwersja temperatury jest zakończona
Dim Znak_temp_zewn As Bit , Znak_temp_wewn As Bit

'///////////////////////////////////////////////////////////////////
'*******************************************************************
'///////////////// ZMIENNE UŻYWANE DLA ELM327 i WEBASTO /////////////////////
Config Pina.= Output                                      'wentylator nadmuchu
Config Pina.= Output                                      'pompka wody
Config Pina.= Input                                       'impuls z pilota
Wle_nadmuchu Alias Porta.7
Pompa_wody Alias Porta.6
Sterowanie_pilotem Alias Pina.5
'Pilot Alias Pina.5
Porta.= 1 : Porta.= 1 : Porta.= 1
'Declare Sub Komunikacja_z_elm327
'Declare Sub Komunikacja_z_elm327_2
Declare Sub Webasto
'Dim Odebrano_dane As Bit                                    'znacznik odebranych danych
'Dim Iii As Byte
'Dim Names As String * 1
'Dim Ilosc_znakow_w_buforze_odb_rs232 As Byte
Dim Ekran As Byte                                           'który ekran ma być wyświetlony (1-temp, 2-elm str 1, 3-elm str2)
Dim Minuta_webasto As Byte , Godzina_webasto As Byte
Dim Zezwolenie_zal_webasto As Bit , Wyslij_sygnal As Bit , Czas_palenia As Bit
Dim Czas_pracy_webasto As Word , Czuwanie_webasto As Bit
Dim Opoznienie_zal_wle_nadmuchu As Word
'Dim Zalaczenie_z_pilota As Bit
'LCD VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
Config Pinb.= Output
Config Pinb.= Output
Config Pinb.= Output
Config Pinb.= Output
Config Pinb.= Output
Config Pinb.= Output                                      'PIN SPI SS musi być zdefiniowany jako wyjście
Spi_ss Alias Portb.4
Set Spi_ss                                                  ' i SPI SS musi być ustawiony w stan wysoki
Config Adc = Single , Prescaler = Auto , Reference = Avcc   'konfiguracja przetwornika analogowo-cyfrowego
Config Scl = Portc.0                                        'choć nadal trzeba określić jakie końcówki
Config Sda = Portc.1                                        'będą liniami SCL i SDA
I2cinit
Enable Interrupts
Enable Spi
Disable Int0 : Disable Int1
Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
Spiinit

'---------------------- LCD vars  ----------------------------
Dim Lcd_data As Byte
Dim Updatelcd As Bit                                        '1 = Update
Dim Lcd_cache(504) As Byte                                  'data to send to LCD RAM
Dim Lcdcacheidx As Word                                     'pointer
Dim Ch As Byte
Dim Abc As Byte , Iji As Byte , Kk As Byte
Dim Xy As Byte , Yx As Byte                                 'pozycja na wyświetlaczu
Dim Mm As Byte , Nn As Byte                                 'rodzaj napisu (zwykły lub podwójny) oraz (normalnie lub negatyw)
Dim Sposob_wyswietlania As Bit
'---------------------- Aliases ------------------------------------
Lcd_dc Alias Portb.0                                        'low = command mode, high = data
Lcd_sce Alias Portb.1                                       'low = enable LCD SPI, high = SPI disable
Lcd_rst Alias Portb.3                                       'low = reset

'--------------------- LCD constants -----------------------------
Const Lcd_inver = &H0D                                      'inverted  screen (after normal command mode)
Const Lcd_normal = &H0C                                     'normal  screen (after normal command mode)
Const Test = &H09                                           'All pixels on (after normal command mode)
Const Normal_command = &H20                                 'normal command mode

'--------------------- LCD Sub declarations -------------------------
Declare Sub Lcd_cmd(byval Command As Byte )
Declare Sub Lcdinit
Declare Sub Lcdclear
Declare Sub Lcdupdate
Declare Sub Lcdgoxy(byval X As Byte , Byval Y As Byte)
'from 1,1 to 14,6
Declare Sub Lcdchr(byval Ch As Byte , Byval Lcdfontsize As Byte , Byval Ch_inv As Byte)
'ch=character, Lcdfontsize 1 = high 1, Lcdfontsize 2=high 2, Ch_inv 1=inverse
Declare Sub Lcdstr(byval Lcdstring As String , Byval Lcdfontsize As Byte , Byval Ch_inv As Byte)
'lcdstring = string to LCD, Lcdfontsize 1 = high 1, Lcdfontsize 2=high 2, Ch_inv 1=inverse
Declare Sub Lcdpixel(byval X As Byte , Byval Y As Byte , Byval Pixelmode As Byte )
'x 1-84, y 1-48, pixelmode 0=OFF, pixelmode 1=ON, pixelmode 2=XOR
Declare Sub Lcdline(byval X1 As Byte , Byval Y1 As Byte , Byval X2 As Byte , Byval Y2 As Byte , Byval Pixelmode As Byte )
'xy1=start, xy2=end of line, pixelmode as in Lcdpixel
Declare Sub Lcdrectangle(byval X3 As Byte , Byval Y3 As Byte , Byval Wide As Byte , Byval Height As Byte)
Declare Sub Show(byval Xx As Byte , Byval Yy As Byte)
'show bitmap from program memory. XX 1 to (84-_width), YY 1 to 6 (n*8)
Declare Sub Clearshow(byval Xx As Byte , Byval Yy As Byte)
'clear window last show
'LCD ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'Gosub Getdatetime : Gosub Wyswietlanie
'--------------------- LCD Init ----------------------------------
Call Lcdinit                                                'must be first in program!!

Dim Ii As Byte
Dim Wsk As Byte
Aktywuj_menu = 1 : Pomiar_temp = 0 : Timer0_stan = 0 : Sekunda = 0 : Ekran = 1 : Buzzer = 1 : Podswietlenie = 1 : Sposob_wyswietlania = 1
Wle_nadmuchu = 1 : Pompa_wody = 1 : Czas_palenia = 0        ': Zalaczenie_z_pilota = 0
Enable Interrupts
Wsk = 0
Load Timer0 , Timer0_counter : Start Timer0
Enable Int2
   Lcdclear
'   Restore Mazda
'   Show 20 , 1
'   Lcdupdate
   Lcdgoxy 1 , 2
   Lcdstr "   Sterownik  " , 1 , 0
   Lcdgoxy 1 , 3
   Lcdstr "Mazda by Remus" , 1 , 0
   Lcdgoxy 1 , 5
   Lcdstr "   ver. 1.5f  " , 1 , 1
   Lcdupdate
   Wait 3
   Lcdclear

Do

   Gosub Getdatetime : Gosub Wybor_dnia_tygodnia : Odczyt_temperatury
   Mierz_napiecie : Gosub Wyswietlanie : Webasto

   If Sw3 = 0 Then
      Buzzer = 0 : Waitms 500 : Buzzer = 1
      Toggle Sposob_wyswietlania
      Lcdclear
      Ekran = 1
   End If

   If Sw1 = 0 Then
'      Buzzer = 0 : Waitms 500 : Buzzer = 1
'      Toggle Wle_nadmuchu : Toggle Pompa_wody
   End If

   If Aktywuj_menu = 0 Then Menu

   Sprawdzanie_swiatel : Zmiana_czasu

'   if zalaczenie_z_pilota = 1 then
'      przekaznik = 0 : zalaczenie_z_pilota = 0 : wait 1
'   else
'       przekaznik = 1
'   end if
Loop

'/////////////////////////////////////////////////
'///////////////////    WYŚWIETLACZ    ///////////////
'/////////////////////////////////////////////////
Wyswietlanie:

    If Sposob_wyswietlania = 0 Then                         'jeśli chcesz wyświetlić zegarek+Tz+Tw+datę
          If Czuwanie_webasto = 1 Then                      'jeśli webasto czuwa
              Nn = 1                                        'wyświetl w negatywie godzinę
          Else                                              'inaczej w pozytywie
              Nn = 0
          End If
          Lcdgoxy 3 , 1
          Pomoc_string = Str(_hour)
          If _hour < 10 Then
             Lcdstr " " , 2 , 0 : Lcdstr Pomoc_string , 2 , Nn : Lcdstr ":" , 2 , Nn
          Else
             Lcdstr Pomoc_string , 2 , Nn : Lcdstr ":" , 2 , Nn
          End If
          Pomoc_string = Str(_min)
          If _min < 10 Then
             Lcdstr "0" , 2 , Nn : Lcdstr Pomoc_string , 2 , Nn
          Else
              Lcdstr Pomoc_string , 2 , Nn
          End If
          Lcdupdate

          Lcdgoxy 1 , 4
          Pomoc_string = Str(_day)
          If _day < 10 Then
             Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
          Else
             Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
          End If
          Pomoc_string = Str(_month)
          If _month < 10 Then
             Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
          Else
             Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
          End If
          Pomoc_string = Str(_year)
          If _year < 10 Then
             Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0
          Else
              Lcdstr Pomoc_string , 1 , 0
          End If
          Lcdstr "  " , 1 , 0
          Lcdstr Dzien_tygodnia , 1 , 0
          Lcdupdate

          Lcdgoxy 1 , 5
          If Tz = 198 Then                                  ' jeśli nie ma czujnika na magistrali
            Gosub Kreski                                    ' wyświetl "*****" na LCD
          Else
            Lcdstr "Tz=" , 1 , 0                            'wyświetl na poz."1,1" "Tz="
            Lcdgoxy 4 , 5                                   'określenie pozycji na wyświetlaczu LCD
            If Tz > 9 Then                                  'jeśli temperatura jest dwucyfrowa
              If Znak_temp_zewn = 1 Then                    'i jest ujemna
                  Lcdstr "-" , 1 , 0                        'wyświetl na poz."1,3" minus
              Else                                          'jeśli dodatnia
                  Lcdstr " " , 1 , 0                        'na pozycji "1,3" spacja
              End If
            Else                                            'jeśli jednocyfrowa
              If Znak_temp_zewn = 1 Then                    'i ujemna
                  If Tz = 0 Then                            'jeśli T=0 wtedy nie wyświetlaj minusa tylko spacje
                    Lcdstr "  " , 1 , 0                     'na pozycji "1,3" i "1,4"  spacja
                  Else
                    Lcdstr " -" , 1 , 0                     'na poz."1,3" spacja, na "1,4" minus
                  End If
              Else                                          'jeśli dodatnia
                  Lcdstr "  " , 1 , 0                       'na "1,3" i "1,4" pozycji spacja
              End If
            End If
            Pomoc_string = Str(tz)
            Gosub Wyswietl_temp
          End If

          Lcdgoxy 1 , 6
          If Tw = 198 Then                                  'jeśli go nie ma
            Gosub Kreski
          Else
            Lcdstr "Tw=" , 1 , 0                            'wyświetl na poz."2,1" "Tw="
            Lcdgoxy 4 , 6                                   'określenie pozycji na wyświetlaczu LCD
            If Tw > 9 Then                                  'jeśli temperatura jest dwucyfrowa
              If Znak_temp_wewn = 1 Then                    'i jest ujemna
                  Lcdstr "-" , 1 , 0                        'wyświetl na poz."1,3" minus
              Else                                          'jeśli dodatnia
                  Lcdstr " " , 1 , 0                        'na pozycji "1,3" spacja
              End If
            Else                                            'jeśli jednocyfrowa
              If Znak_temp_wewn = 1 Then                    'i ujemna
                  If Tw = 0 Then                            'jeśli T=0 wtedy nie wyświetlaj minusa tylko spacje
                    Lcdstr "  " , 1 , 0                     'na pozycji "1,3" i "1,4"  spacja
                  Else
                    Lcdstr " -" , 1 , 0                     'na poz."1,3" spacja, na "1,4" minus
                  End If
              Else                                          'jeśli dodatnia
                  Lcdstr "  " , 1 , 0                       'na "1,3" i "1,4" pozycji spacja
              End If
            End If
            Pomoc_string = Str(tw)
            Gosub Wyswietl_temp                             'Temperatura wyświetlana na pozycji "2,1"
          End If
    End If

    If Sposob_wyswietlania = 1 Then                         'jeśli chcesz wyświetlić Tz+Tw+U+zegarek
          If Czuwanie_webasto = 1 Then                      'jeśli webasto czuwa
              Nn = 1                                        'wyświetl w negatywie godzinę
          Else                                              'inaczej w pozytywie
              Nn = 0
          End If
          Lcdgoxy 1 , 6
          Pomoc_string = Str(_hour)
          If _hour < 10 Then
             Lcdstr " " , 1 , 0 : Lcdstr Pomoc_string , 1 , Nn : Lcdstr ":" , 1 , Nn
          Else
             Lcdstr Pomoc_string , 1 , Nn : Lcdstr ":" , 1 , Nn
          End If
          Pomoc_string = Str(_min)
          If _min < 10 Then
             Lcdstr "0" , 1 , Nn : Lcdstr Pomoc_string , 1 , Nn
          Else
              Lcdstr Pomoc_string , 1 , Nn
          End If
          Lcdupdate

          Lcdgoxy 1 , 3
          Pomoc_string = Str(wolt_cale)
          Lcdstr Pomoc_string , 2 , 0 : Lcdstr "." , 2 , 0
          Pomoc_string = Str(wolt_dziesiate)
          Lcdstr Pomoc_string , 2 , 0
          Lcdupdate

         Lcdgoxy 1 , 1
         If Tz = 198 Then                                   ' jeśli nie ma czujnika na magistrali
             Gosub Kreski                                   ' wyświetl "*****" na LCD
         Else
            If Tz > 9 Then                                  'jeśli temperatura jest dwucyfrowa
              If Znak_temp_zewn = 1 Then                    'i jest ujemna
                  Lcdstr "-" , 2 , 0                        'wyświetl na poz."1,3" minus
              Else                                          'jeśli dodatnia
                  Lcdstr " " , 2 , 0                        'na pozycji "1,3" spacja
              End If
            Else                                            'jeśli jednocyfrowa
              If Znak_temp_zewn = 1 Then                    'i ujemna
                  If Tz = 0 Then                            'jeśli T=0 wtedy nie wyświetlaj minusa tylko spacje
                    Lcdstr "  " , 2 , 0                     'na pozycji "1,3" i "1,4"  spacja
                  Else
                    Lcdstr " -" , 2 , 0                     'na poz."1,3" spacja, na "1,4" minus
                  End If
              Else                                          'jeśli dodatnia
                  Lcdstr "  " , 2 , 0                       'na "1,3" i "1,4" pozycji spacja
              End If
            End If
            Pomoc_string = Str(tz)
            Lcdstr Pomoc_string , 2 , 0
            Lcdupdate
         End If

         Lcdgoxy 8 , 1
         If Tw = 198 Then                                   'jeśli go nie ma
            Gosub Kreski
         Else
            If Tw > 9 Then                                  'jeśli temperatura jest dwucyfrowa
              If Znak_temp_wewn = 1 Then                    'i jest ujemna
                  Lcdstr "-" , 2 , 1                        'wyświetl na poz."1,3" minus
              Else                                          'jeśli dodatnia
                  Lcdstr " " , 2 , 0                        'na pozycji "1,3" spacja
              End If
            Else                                            'jeśli jednocyfrowa
              If Znak_temp_wewn = 1 Then                    'i ujemna
                  If Tw = 0 Then                            'jeśli T=0 wtedy nie wyświetlaj minusa tylko spacje
                    Lcdstr "  " , 2 , 0                     'na pozycji "1,3" i "1,4"  spacja
                  Else
                    Lcdstr " -" , 2 , 1                     'na poz."1,3" spacja, na "1,4" minus
                  End If
              Else                                          'jeśli dodatnia
                  Lcdstr "  " , 2 , 0                       'na "1,3" i "1,4" pozycji spacja
              End If
            End If
            Pomoc_string = Str(tw)
            Lcdstr Pomoc_string , 2 , 1                     'Temperatura wyświetlana na pozycji "2,1"
            Lcdupdate
         End If
    End If

Return

Kreski:
   Lcdstr "********" , 1 , 0                                ' wyświetl "***** " na LCD
Return

Wyswietl_temp:
   Lcdstr Pomoc_string , 1 , 0                              ' CRC OK, print T*10 on LCD
   Lcdstr "^C" , 1 , 0
   Lcdstr " " , 1 , 0
   Lcdupdate
Return

'*******************************************************************************************************************************************
'/////////////////////////////////////////////////////////////
'////    POMIARY TEMPERATUR     ///////////////
'/////////////////////////////////////////////////////////////
Sub Odczyt_temperatury

      If Pomiar_temp = 0 Then
         Stop Timer0 : Timer0_stan = 0 : Load Timer0 , Timer0_counter       '26
         1wreset : 1wwrite &HCC : 1wwrite &H44              'wysłanie do wszystkich czujników rozkazu konwersji temp.
         Pomiar_temp = 1
         If Wyslij_sygnal = 1 Then                          'jeśli załączona jest praca webasto 'dodane w celu kontynuacji palenia
            Print 
"TU SYGNAŁ PODTRZYMANIA PRACY WEBASTA"
         End If
         Start Timer0
      End If

     If Sekunda = 1 And Pomiar_temp = 1 Then                'jeśli minęła sekunda (timer0_stan=250) i było czekanie na konwersję (pomiar_temp=2)
         For Ia = 1 To 8
            Adres(ia) = Lookup(ia , Czujnik_zewnetrzny)     'odczyt adresu czujnika z zewnętrznego
            Ktory_czujnik = 0                               'czujnik zewnętrzny  "0"
         Next Ia

         Gosub Weryfikacja_adresu                           'sprawdź, czy urządzenie jest na magistrali

         If Err = 1 Then                                    'jeśli go nie ma wtedy wyświetlimy kreski
             Tz = 198
         Else
             Gosub Procedura_odczytu
         End If

         For Ia = 1 To 8
            Adres(ia) = Lookup(ia , Czujnik_wewnetrzny)     'TEMPERATURA WEWNĘTRZNA
            Ktory_czujnik = 1                               'czujnik wewnętrzny "1"
         Next Ia

         Gosub Weryfikacja_adresu                           'sprawdź, czy urządzenie jest na magistrali

         If Err = 1 Then                                    'jeśli go nie ma wtedy wyświetlimy kreski
             Tw = 198
         Else
             Gosub Procedura_odczytu
         End If
         Pomiar_temp = 0 : Sekunda = 0                      ':Timer0_stan = 0
     End If

End Sub

Weryfikacja_adresu:
    Stop Timer0                                             'zatrzymaj timery na czas komunikacji 1wire, żeby nie zakłócały komunikacji
    1wverify Adres(1)                                       'zweryfikuj adres
'    Start Timer0                                            'wystartuj timery
Return

Procedura_odczytu:
         Stop Timer0                                        'zatrzymaj timery na czas komunikacji 1wire, żeby nie zakłócały komunikacji
         1wreset : 1wwrite &H55 : 1wwrite Adres(1) , 8 : 1wwrite &HBE       'dokonaj odczytu po konwersji
         Adres(1) = 1wread(2)                               'odczytaj 2 bajty (dla oszczędności wykorzystuję zmienne adres)
         Start Timer0
         If Adres(2) >= 248 Then                            'jeśli temperatura ujemna
            Adres(1) = 255 - Adres(1) : Adres(2) = 255 - Adres(2)       'dokonaj przeliczeń
            If Ktory_czujnik = 0 Then Znak_temp_zewn = 1    'zaznacz, że temp zewnętrzna jest ujemna
            If Ktory_czujnik = 1 Then Znak_temp_wewn = 1    'zaznacz, że temp wewnętrzna jest ujemna
         Else
            If Ktory_czujnik = 0 Then Znak_temp_zewn = 0    'zaznacz, że temp zewnętrzna jest ujemna
            If Ktory_czujnik = 1 Then Znak_temp_wewn = 0    'zaznacz, że temp wewnętrzna jest ujemna
         End If
         T1 = Adres(1) \ 16                                 'podziel przez 16
         T = Adres(2) * 16
         T1 = T1 + T                                        'i dodaj obydwie części temperatury
         If Ktory_czujnik = 1 Then Tw = T1                  'T1                  'a jeśli wewnętrznej t1 do tw
         If Ktory_czujnik = 0 Then Tz = T1                  'jeśli następuje pomiar temperatury zewnętrznej to przepisz zmienną  t1 do tz
Return

Sub Mierz_napiecie
      Start Adc                                             'zaczęcie odczytu napięcia
      Napiecie = Getadc(0)                                  'odczytanie napięcia cyfrowo
      Stop Adc                                              'koniec odczytu napięcia
      Wolt = Napiecie
      Wolt = Wolt * 1.926                                   'wynik 1199 dla 12V                      'przelicznik (dla 12V odczyt to 623)
      T1 = Wolt
      T1 = T1 / 100
      Wolt_cale = T1
      T1 = Wolt
      T1 = T1 Mod 100 : T1 = T1 / 10
      Wolt_dziesiate = T1
End Sub

Sub Sprawdzanie_swiatel
      If Swiatla = 0 Then
         Restore Swiatla_on
         Show 1 , 2
         Lcdupdate
         Przekaznik = 0
         If Zaplon = 1 Or Cisn_oleju = 0 Then Przekaznik = 1
      Else
         Restore Swiatla_on
         Clearshow 1 , 2
         Lcdupdate
         If Zaplon = 0 And Cisn_oleju = 1 Then
            If Wolt_cale >= 13 Then                         'jeśli napięcie przekracza 13 V wtedy załącz światła
               Lcdclear
               Restore Mazda
               Show 20 , 1
               Lcdupdate
               Wait 2
               Przekaznik = 0 : Lcdclear
            End If
         Else
            Przekaznik = 1
         End If
      End If
End Sub

$include "zegarek.bas"

Wybor_dnia_tygodnia:
  Select Case Weekday
    Case 1 : Dzien_tygodnia = "pon"
    Case 2 : Dzien_tygodnia = " wt"
    Case 3 : Dzien_tygodnia = " sr"
    Case 4 : Dzien_tygodnia = "czw"
    Case 5 : Dzien_tygodnia = "pia"
    Case 6 : Dzien_tygodnia = "sob"
    Case 7 : Dzien_tygodnia = "nie"
  End Select
Return


'/////////////////////////////////////////////////
'////    IMPULSATOR  CZYLI MENU    ///////////////
'/////////////////////////////////////////////////
'Pcie21_intr:
'   Aktywuj_menu = 0
'Return

Int2_intr:
   Disable Int2
   Aktywuj_menu = 0
   Enable Int2
Return

Sub Menu
   Disable Int2                                             'wyłącz przerwanie zewnętrzne (na bieżąco są monitorowane knefle)
   Timer0_stan3 = 0 : Liczba_sekund = 0
'   load timer1 , timer0_counter : start timer1              'zacznij odliczać minutę
'   Disable Pcint2
'   Pcmsk2.3 = 0                                             'wyłączenie przerwania na pinie
   Lcdclear                                                 'wyczyść wyświetlacz
   Buzzer = 0 : Wait 1 : Buzzer = 1
   Licznik = 3                                              'domyślnie wchodzimy od razu na Webasto
   Do
      Gosub Knefle
      If Licznik < 1 Then Licznik = 1
      If Licznik > 5 Then Licznik = 5
      Select Case Licznik
         Case 5:
               Lcdgoxy 1 , 2 : Lcdstr "data i czas" , 1 , 1 : Podmenu_1 = 1
               Lcdgoxy 1 , 3 : Lcdstr "Odswiez ekran" , 1 , 0
               Lcdgoxy 1 , 4 : Lcdstr "Webasto" , 1 , 0
               Lcdgoxy 1 , 5 : Lcdstr "WYL. Webasto " , 1 , 0
               Lcdgoxy 1 , 6 : Lcdstr "ZAL. Webasto " , 1 , 0
               Lcdupdate
         Case 4:
               Lcdgoxy 1 , 2 : Lcdstr "data i czas" , 1 , 0
               Lcdgoxy 1 , 3 : Lcdstr "Odswiez ekran" , 1 , 1 : Podmenu_1 = 2
               Lcdgoxy 1 , 4 : Lcdstr "Webasto" , 1 , 0
               Lcdgoxy 1 , 5 : Lcdstr "WYL. Webasto  " , 1 , 0
               Lcdgoxy 1 , 6 : Lcdstr "ZAL. Webasto  " , 1 , 0
               Lcdupdate
         Case 3:
               Lcdgoxy 1 , 2 : Lcdstr "data i czas" , 1 , 0
               Lcdgoxy 1 , 3 : Lcdstr "Odswiez ekran" , 1 , 0
               Lcdgoxy 1 , 4 : Lcdstr "Webasto" , 1 , 1 : Podmenu_1 = 3
               Lcdgoxy 1 , 5 : Lcdstr "WYL. Webasto " , 1 , 0
               Lcdgoxy 1 , 6 : Lcdstr "ZAL. Webasto " , 1 , 0
               Lcdupdate
         Case 2:
               Lcdgoxy 1 , 2 : Lcdstr "data i czas" , 1 , 0
               Lcdgoxy 1 , 3 : Lcdstr "Odswiez ekran" , 1 , 0
               Lcdgoxy 1 , 4 : Lcdstr "Webasto" , 1 , 0
               Lcdgoxy 1 , 5 : Lcdstr "WYL. Webasto " , 1 , 1 : Podmenu_1 = 4
               Lcdgoxy 1 , 6 : Lcdstr "ZAL. Webasto " , 1 , 0
               Lcdupdate
         Case 1:
               Lcdgoxy 1 , 2 : Lcdstr "data i czas" , 1 , 0
               Lcdgoxy 1 , 3 : Lcdstr "Odswiez ekran" , 1 , 0
               Lcdgoxy 1 , 4 : Lcdstr "Webasto" , 1 , 0
               Lcdgoxy 1 , 5 : Lcdstr "WYL. Webasto " , 1 , 0
               Lcdgoxy 1 , 6 : Lcdstr "ZAL. Webasto " , 1 , 1 : Podmenu_1 = 5
               Lcdupdate
     End Select
     If Sw2 = 0 Then Exit Do                                'Liczba_sekund = 57
     If Liczba_sekund > 57 Then
         Podmenu_1 = 2
         Exit Do
     End If
   Loop                                                     'Until Liczba_sekund = 57
'   stop timer1

   If Podmenu_1 = 1 Then                                    'jeśli wybrane podmenu "USTAW CZAS" wtedy wykonaj
       Reset Buzzer : Waitms 300 : Set Buzzer : C = 1
       Lcdclear
       Gosub Getdatetime                                    'pobranie czasu
       Licznik = _min                                       'przypisanie zmiennej 'licznik' 'MINUTY'
       Lcdgoxy 1 , 2 : Lcdstr "  USTAW CZAS  " , 1 , 0
       Lcdgoxy 1 , 3 : Lcdstr " ustaw minuty " , 1 , 0
       Lcdgoxy 3 , 4
       Pomoc_string = Str(_hour)
       If _hour < 10 Then
          Lcdstr " " , 2 , 0 : Lcdstr Pomoc_string , 2 , 0 : Lcdstr ":" , 2 , 0
       Else
          Lcdstr Pomoc_string , 2 , 0 : Lcdstr ":" , 2 , 0
       End If
       Pomoc_string = Str(_min)
       If _min < 10 Then
          Lcdstr "0" , 2 , 0 : Lcdstr Pomoc_string , 2 , 0
       Else
           Lcdstr Pomoc_string , 2 , 0
       End If
       Lcdupdate
       Do                                                   'ustawianie minut
         Gosub Knefle
         If Licznik > 59 Then Licznik = 0
         If Licznik < 0 Then Licznik = 59
         If C = 0 Then
            _min = Licznik : _sec = 0
            Pomoc_string = Str(licznik)
            Lcdgoxy 9 , 4
            If _min < 10 Then
               Lcdstr "0" , 2 , 0 : Lcdstr Pomoc_string , 2 , 0       ': Lcdstr " " , 2 , 0
            Else
               Lcdstr Pomoc_string , 2 , 0                  ': Lcdstr " " , 2 , 0
            End If
            Lcdupdate : C = 1
         End If
         If Sw2 = 0 Then Exit Do
      Loop                                                  'Until Sekundy = 900                              'opuść pętle, gdy upłynęła minuta
      Reset Buzzer : Gosub Settime
      Waitms 300 : Set Buzzer : Lcdclear

      Gosub Getdatetime : Licznik = _hour                   ' : _hour = Makedec(_hour)            'przypisanie zmiennej
      Lcdgoxy 1 , 2 : Lcdstr "  USTAW CZAS  " , 1 , 0
      Lcdgoxy 1 , 3 : Lcdstr " ustaw godzine" , 1 , 0
      Lcdgoxy 3 , 4
      Pomoc_string = Str(_hour)
      If _hour < 10 Then
         Lcdstr " " , 2 , 0 : Lcdstr Pomoc_string , 2 , 0 : Lcdstr ":" , 2 , 0
      Else
         Lcdstr Pomoc_string , 2 , 0 : Lcdstr ":" , 2 , 0
      End If
      Pomoc_string = Str(_min)
      If _min < 10 Then
         Lcdstr "0" , 2 , 0 : Lcdstr Pomoc_string , 2 , 0
      Else
          Lcdstr Pomoc_string , 2 , 0
      End If
      Lcdupdate
      Do
         Gosub Knefle
         If Licznik > 23 Then Licznik = 0
         If Licznik < 0 Then Licznik = 23
         If C = 0 Then
            _hour = Licznik : _sec = 0                      ': _hour = Makebcd(_hour)  : _sec = Makebcd(_sec)
            Pomoc_string = Str(licznik)
            Lcdgoxy 3 , 4
            If _hour < 10 Then
               Lcdstr " " , 2 , 0 : Lcdstr Pomoc_string , 2 , 0       ': Lcdstr " " , 2 , 0
            Else
               Lcdstr Pomoc_string , 2 , 0                  ': Lcdstr " " , 2 , 0
            End If
            Lcdupdate : C = 1
         End If
         If Sw2 = 0 Then Exit Do
      Loop                                                  'Until Sekundy = 900                              'opuść pętle, gdy upłynęła minuta
      Reset Buzzer : Gosub Settime
      Waitms 300 : Set Buzzer : Lcdclear

      Gosub Getdatetime : Licznik = _year                   'przypisanie zmiennej
      Lcdgoxy 1 , 2 : Lcdstr "  USTAW DATE  " , 1 , 0
      Lcdgoxy 1 , 3 : Lcdstr "  ustaw rok   " , 1 , 0
      Lcdgoxy 4 , 5
      Pomoc_string = Str(_day)
      If _day < 10 Then
         Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
      Else
         Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
      End If
      Pomoc_string = Str(_month)
      If _month < 10 Then
         Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
      Else
          Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
      End If
      Pomoc_string = Str(_year)
      If _year < 10 Then
         Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0
      Else
          Lcdstr Pomoc_string , 1 , 0
      End If
      Lcdupdate
      Do
         Gosub Knefle
         If Licznik > 99 Then Licznik = 0
         If Licznik < 0 Then Licznik = 99
         If C = 0 Then
            _year = Licznik
            Pomoc_string = Str(_year)
            Lcdgoxy 10 , 5
            If _year < 10 Then
               Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0
            Else
                Lcdstr Pomoc_string , 1 , 0
            End If
            Lcdupdate : C = 1
         End If
         If Sw2 = 0 Then Exit Do
      Loop                                                  'Until Sekundy = 900                              'opuść pętle, gdy upłynęła minuta
      Reset Buzzer : Gosub Setdate
      Waitms 300 : Set Buzzer : Lcdclear

      Gosub Getdatetime : Licznik = _month                  ':_month = Makedec(_month)             'przypisanie zmiennej
      Lcdgoxy 1 , 2 : Lcdstr "  USTAW DATE  " , 1 , 0
      Lcdgoxy 1 , 3 : Lcdstr " ustaw miesiac" , 1 , 0
      Lcdgoxy 4 , 5
      Pomoc_string = Str(_day)
      If _day < 10 Then
         Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
      Else
         Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
      End If
      Pomoc_string = Str(_month)
      If _month < 10 Then
         Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
      Else
          Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
      End If
      Pomoc_string = Str(_year)
      If _month < 10 Then
         Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0
      Else
          Lcdstr Pomoc_string , 1 , 0
      End If
      Lcdupdate
      Do
         Gosub Knefle
         If Licznik > 12 Then Licznik = 1
         If Licznik < 1 Then Licznik = 12
         If C = 0 Then
            _month = Licznik                                ' przypisanie zmiennej
            Pomoc_string = Str(_month)
            Lcdgoxy 7 , 5
            If _month < 10 Then
               Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0
            Else
                Lcdstr Pomoc_string , 1 , 0
            End If
            Lcdupdate : C = 1
         End If
         If Sw2 = 0 Then Exit Do
      Loop                                                  'Until Sekundy = 900                              'opuść pętle, gdy upłynęła minuta
      Reset Buzzer : Gosub Setdate
      Waitms 300 : Set Buzzer : Lcdclear

      Gosub Getdatetime : Licznik = _day                    'przypisanie zmiennej
      Lcdgoxy 1 , 2 : Lcdstr "  USTAW DATE  " , 1 , 0
      Lcdgoxy 1 , 3 : Lcdstr "  ustaw dzien " , 1 , 0
      Lcdgoxy 4 , 5
      Pomoc_string = Str(_day)
      If _day < 10 Then
         Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
      Else
         Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
      End If
      Pomoc_string = Str(_month)
      If _month < 10 Then
         Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
      Else
          Lcdstr Pomoc_string , 1 , 0 : Lcdstr ":" , 1 , 0
      End If
      Pomoc_string = Str(_year)
      If _month < 10 Then
         Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0
      Else
          Lcdstr Pomoc_string , 1 , 0
      End If
      Lcdupdate
      Do
         Gosub Knefle
         If Licznik > 31 Then Licznik = 1
         If Licznik < 1 Then Licznik = 31
         If C = 0 Then
            _day = Licznik
            Pomoc_string = Str(_day)
            Lcdgoxy 4 , 5
            If _day < 10 Then
               Lcdstr "0" , 1 , 0 : Lcdstr Pomoc_string , 1 , 0
            Else
                Lcdstr Pomoc_string , 1 , 0
            End If
            Lcdupdate : C = 1
         End If
         If Sw2 = 0 Then Exit Do
      Loop                                                  'Until Sekundy = 900                              'opuść pętle, gdy upłynęła minuta
      Reset Buzzer : Gosub Setdate
      Waitms 300 : Set Buzzer : Lcdclear

      Gosub Getdatetime : Licznik = Weekday                 'przypisanie zmiennej
      Gosub Wybor_dnia_tygodnia
      Lcdgoxy 1 , 2 : Lcdstr "  USTAW DATE  " , 1 , 0
      Lcdgoxy 1 , 3 : Lcdstr "dzien tygodnia" , 1 , 0
      Lcdgoxy 5 , 4
      Lcdstr Dzien_tygodnia , 2 , 0
      Lcdupdate
      Do
         Gosub Knefle
         If Licznik > 7 Then Licznik = 1
         If Licznik < 1 Then Licznik = 7
         If C = 0 Then
            Weekday = Licznik
            Gosub Wybor_dnia_tygodnia
            Lcdgoxy 5 , 4
            Lcdstr Dzien_tygodnia , 2 , 0
            Lcdupdate : C = 1
         End If
         If Sw2 = 0 Then Exit Do
      Loop                                                  'Until Sekundy = 900                              'opuść pętle, gdy upłynęła minuta
   End If

   If Podmenu_1 = 2 Then                                    '///////////////////////////////////////// RESET EKRANU i BUZZERA
      Set Buzzer                                            ': Sposob_wyswietlania = 1
      Lcdclear
   End If

   If Podmenu_1 = 3 Then                                    '///////////////////////////////////////// USTAWIENIE CZASU ZAŁĄCZENIA WEBASTO
       Reset Buzzer : Waitms 300 : Set Buzzer : C = 1
       Lcdclear
       Licznik = Minuta_webasto                             'przypisanie zmiennej 'licznik' 'MINUTY'
       Lcdgoxy 1 , 2 : Lcdstr " ZAL. WEBASTO " , 1 , 0
       Lcdgoxy 1 , 3 : Lcdstr " ustaw minute " , 1 , 0
       Lcdgoxy 3 , 4
       Pomoc_string = Str(godzina_webasto)
       If Godzina_webasto < 10 Then
          Lcdstr " " , 2 , 0 : Lcdstr Pomoc_string , 2 , 0 : Lcdstr ":" , 2 , 0
       Else
          Lcdstr Pomoc_string , 2 , 0 : Lcdstr ":" , 2 , 0
       End If
       Pomoc_string = Str(minuta_webasto)
       If Minuta_webasto < 10 Then
          Lcdstr "0" , 2 , 0 : Lcdstr Pomoc_string , 2 , 0
       Else
           Lcdstr Pomoc_string , 2 , 0
       End If
       Lcdupdate
       Do                                                   'ustawianie minut
         Gosub Knefle
         If Licznik > 80 Then Licznik = 59                  'dla instrukcji "decr" licznik po 0 przyjmie wartość 255
         If Licznik > 59 Then Licznik = 0                   'a tu już normalnie, incr powyżej 59 daje 0
         If C = 0 Then
            Minuta_webasto = Licznik
            Pomoc_string = Str(licznik)
            Lcdgoxy 9 , 4
            If Minuta_webasto < 10 Then
               Lcdstr "0" , 2 , 0 : Lcdstr Pomoc_string , 2 , 0       ': Lcdstr " " , 2 , 0
            Else
               Lcdstr Pomoc_string , 2 , 0                  ': Lcdstr " " , 2 , 0
            End If
            Lcdupdate : C = 1
         End If
         If Sw2 = 0 Then Exit Do
      Loop                                                  'Until Sekundy = 900                              'opuść pętle, gdy upłynęła minuta
      Reset Buzzer : Waitms 300 : Set Buzzer : Lcdclear

      Licznik = Godzina_webasto                             'przypisanie zmiennej
      Lcdgoxy 1 , 2 : Lcdstr " ZAL. WEBASTO  " , 1 , 0
      Lcdgoxy 1 , 3 : Lcdstr " ustaw godzine " , 1 , 0
      Lcdgoxy 3 , 4
      Pomoc_string = Str(godzina_webasto)
      If Godzina_webasto < 10 Then
         Lcdstr " " , 2 , 0 : Lcdstr Pomoc_string , 2 , 0 : Lcdstr ":" , 2 , 0
      Else
         Lcdstr Pomoc_string , 2 , 0 : Lcdstr ":" , 2 , 0
      End If
      Pomoc_string = Str(minuta_webasto)
      If Minuta_webasto < 10 Then
         Lcdstr "0" , 2 , 0 : Lcdstr Pomoc_string , 2 , 0
      Else
          Lcdstr Pomoc_string , 2 , 0
      End If
      Lcdupdate
      Do
         Gosub Knefle
         If Licznik > 80 Then Licznik = 23                  'podobnie jak poprzednio
         If Licznik > 23 Then Licznik = 0                   ' i tu także
         If C = 0 Then
            Godzina_webasto = Licznik
            Pomoc_string = Str(licznik)
            Lcdgoxy 3 , 4
            If Godzina_webasto < 10 Then
               Lcdstr " " , 2 , 0 : Lcdstr Pomoc_string , 2 , 0       ': Lcdstr " " , 2 , 0
            Else
               Lcdstr Pomoc_string , 2 , 0                  ': Lcdstr " " , 2 , 0
            End If
            Lcdupdate : C = 1
         End If
         If Sw2 = 0 Then Exit Do
      Loop
      Reset Buzzer : Waitms 300 : Set Buzzer : Lcdclear

      Licznik = 0 : Licznik.= Czuwanie_webasto
      Lcdgoxy 1 , 2 : Lcdstr "WLACZYC CZUW. " , 1 , 0
      Lcdgoxy 1 , 3 : Lcdstr "   WEBASTO?   " , 1 , 0
      Lcdgoxy 1 , 4
      If Czuwanie_webasto = 1 Then
         Mm = 1 : Nn = 0
      Else
         Mm = 0 : Nn = 1
      End If
      Lcdstr "TAK" , 2 , Mm : Lcdstr "/" , 2 , 0 : Lcdstr "NIE" , 2 , Nn
      Lcdupdate
      Do
         Gosub Knefle
         If Licznik <> 1 Then Licznik = 0                   'jeśli licznik ma wartość jakąkolwiek inną oprócz 1 to przyjmuje wartość 0
         If C = 0 Then
            Czuwanie_webasto = Licznik.0
            'Print "czuwanie webasto=" ; : Print Czuwanie_webasto
            Lcdgoxy 1 , 4
            If Czuwanie_webasto = 1 Then
               Lcdstr "TAK" , 2 , 1 : Lcdstr "/" , 2 , 0 : Lcdstr "NIE" , 2 , 0
            Else
               Lcdstr "TAK" , 2 , 0 : Lcdstr "/" , 2 , 0 : Lcdstr "NIE" , 2 , 1
            End If
            Lcdupdate : C = 1
         End If
         If Sw2 = 0 Then Exit Do
      Loop
      Reset Buzzer : Waitms 300 : Set Buzzer : Lcdclear
   End If

   If Podmenu_1 = 4 Then                                    '///////////////////////////////////////// WYŁĄCZENIE WEBASTO Z MENU
      Reset Buzzer : Waitms 300 : Set Buzzer
      Print 
"TU SYGNAŁ WYŁĄCZ WEBASTO"      'wyslij WYLACZ
      Pompa_wody = 1 : Wle_nadmuchu = 1                     'wyłącz pompkę i wentylator
      Czuwanie_webasto = 0 : Wyslij_sygnal = 0              'skończ też pracować w automacie
   End If

   If Podmenu_1 = 5 Then                                    '////////////////////////////////////////// ZAŁĄCZENIE WEBASTO Z MENU
      Reset Buzzer : Waitms 300 : Set Buzzer
      Print 
"TU SYGNAŁ ZAŁĄCZ WEBASTO" 'i powtarzamy na wszelki wypadek 3 razy
      Waitms 60
      Print 
"TU SYGNAŁ ZAŁĄCZ WEBASTO" 'i powtarzamy na wszelki wypadek 3 razy
      Waitms 60
      Print 
"TU SYGNAŁ ZAŁĄCZ WEBASTO" 'i powtarzamy na wszelki wypadek 3 razy
      Wait 2                                                'żeby poczekać przed wysłaniem pierwszego sygnału podtrzymania
      Pompa_wody = 0 : Wle_nadmuchu = 0                     'wyłącz pompkę i wentylator
      Wyslij_sygnal = 1                                     'musi być aktywne w celu nadawania sygnału podtrzymującego
   End If

   Lcdclear
   Reset Buzzer : Waitms 300 : Set Buzzer
   Enable Int2
   Eifr = 0                                                 'wyzerowanie flagi zgłoszenia przerwań zewnętrznych (na wszelki wypadek)
   Aktywuj_menu = 1
End Sub

Knefle:
   If Sw1 = 0 Then
      Incr Licznik : C = 0 : Waitms 200
   End If
'   If Sw2 = 0 Then Exit Do
   If Sw3 = 0 Then
      Decr Licznik : C = 0 : Waitms 200
   End If
Return

'PODPROGRAM ZMIANY CZASU Z LETNIEGO NA ZIMOWY I ODWROTNIE
Sub Zmiana_czasu
'Miesiac = _month
'Dzien = _day

If _month = 3 And _day >= 25 Then                           'zmiana czasu na letni (ostatnia niedziela marca)
   If Weekday = 7 Then                                      'jeśli dniem tygodnia jest ostatnia niedziela marca wtedy
      If _hour = 2 And _min = 0 Then                        'jeśli jest 2 w nocy
         _hour = 3 : Gosub Settime                          'przestaw czas na letni (godzina do przodu)
      End If
   End If
End If

If _month = 10 And _day >= 25 Then                          'zmiana czasu na zimowy (ostatnia niedziela października)
   Gosub Polnoc
   If Weekday = 7 Then                                      'jeśli akurat jest ostatnia niedziela października
      If _hour = 3 And _min = 0 Then                        'jeśli jest 3 w nocy wtedy
         If Flaga_zmiany_czasu = 0 Then                     'jeśli ustawiona flaga zmiany czasu, gdyż zapętliło by się
            _hour = 2 : Flaga_zmiany_czasu = 1              'cofnij czas o godzinę i zmień flagę, żeby ponownie nie przestawiać czasu
            Gosub Settime
         End If
      End If
   End If
End If
End Sub

Polnoc:
   If _hour = 0 And _min = 0 Then                           'jeśli jest północ
         Flaga_zmiany_czasu = 0                             'przestaw flagę zmiany czasu
   End If
Return

Odliczanie_czasu:                                           'podprogramu obsługi przerwania od przepełnienia Timer0
  Stop Timer0
'(
  If Pilot = 0 Then                                         'jeśli wykrył sygnał z pilota
     Zalaczenie_z_pilota = 1                                'ustaw flagę
  Else                                                      'w przeciwnym wypadku
     Zalaczenie_z_pilota = 0                                'zeruj flagę
  End If
')
  If Pomiar_temp = 1 Then                                   'jeśli teraz następuje konwersja w dallasach to musimy odczekać
     Incr Timer0_stan
     If Timer0_stan = 24 Then                               'jeśli licznik przewinięty 24 razy to
        Sekunda = 1                                         ' minęła sekunda
        Timer0_stan = 0                                     'i zaś trza liczyć od nowa
     End If
  End If

  Incr Timer0_stan3
  If Timer0_stan3 = 24 Then
      Incr Liczba_sekund
      If Liczba_sekund = 60 Then Liczba_sekund = 0
      Timer0_stan3 = 0
  End If

  If Wyslij_sygnal = 1 Then                                 'jeśli rozpoczęto grzanie
     Incr Timer0_stan2                                      'dodatkowa zmienna liczona cały czas
     If Timer0_stan2 = 24 Then
         Timer0_stan2 = 0
         Incr Opoznienie_zal_wle_nadmuchu
         Incr Czas_pracy_webasto
     End If
  End If

  If Sterowanie_pilotem = 0 Then                            'jeśli wciśnięty knefel z pilota
     Czuwanie_webasto = 1                                   ': Zalaczenie_z_pilota = 1         'ustaw zmienne żeby webasto mogło się załączyć 
     If _min = 59 Then                                      'jeśli jest za minutę któraś godzina
        Minuta_webasto = 0
        If _hour = 23 Then                                  'trzeba wziąć pod uwagę, że zmienia się godzina
           Godzina_webasto = 0
        Else
           Godzina_webasto = _hour + 1
        End If
     Else
         Minuta_webasto = _min + 1 : Godzina_webasto = _hour       'najpóźniej za minutę załącz webasto (zależy ile jest sekund)
     End If
  End If

  Load Timer0 , Timer0_counter : Start Timer0
Return

Przerwanie_timer1:
'  stop timer1

'  Load Timer1 , Timer1_counter                              'odmierza czas równy 0,0042s dla Q=6,144MHz i prescale=1024
'  Start Timer1
Return

Sub Webasto

    If Czuwanie_webasto = 1 Then                            'jeśli webasto czuwa nad załączeniem

         If Czas_pracy_webasto > 2100 Then                  'jeśli czas pracy webasto odliczył już 35 minut (35*60sekund)
            Czas_palenia = 1                                'tzn że minął czas palenia i trzeba wyłączyć webasto
         End If

         If Tw < 9 Or Znak_temp_wewn = 1 Then               'jeśli temp. w środku jest < 9 albo ujemna
            If Minuta_webasto = _min And Godzina_webasto = _hour Then       'i zgadza się czas startu webasta
               If Wyslij_sygnal = 0 Then                    'żeby tylko 1 raz wlazło, potem zmienia się na 1 a 0 przyjmie dopiero po zakończeniu grzania lub ręcznym wyłączeniu
                  Czas_pracy_webasto = 0                    'i trzeba zacząć odliczać czas załączenia
                  Pompa_wody = 0                            'załącz też pompę wodną
                  Print 
"TU SYGNAŁ ZAŁĄCZ WEBASTO" 'i powtarzamy na wszelki wypadek 3 razy
                  Waitms 200                                'po 20ms powtórz jeszcze raz komendę załączenia
                  Print 
"TU SYGNAŁ ZAŁĄCZ WEBASTO" 'i powtarzamy na wszelki wypadek 3 razy;
                  Waitms 200                                'po 20ms powtórz jeszcze raz komendę załączenia
                  Print 
"TU SYGNAŁ ZAŁĄCZ WEBASTO" 'i powtarzamy na wszelki wypadek 3 razy
                  Wait 5                                    'poczekaj 5 sekund
'                  load timer1 , timer1_counter : start TIMER1
                  Wyslij_sygnal = 1 : Timer0_stan2 = 0 : Opoznienie_zal_wle_nadmuchu = 0       'wyzeruj zmienną opóźnienia
               End If
            End If
         End If

         If Czas_palenia = 1 Then                           'jeśli czas pracy webasto odliczył już 35 minut (35*60sekund) (webasto pracuje do 40 minut zgodnie z ustawieniami fabrycznymi)
               Wyslij_sygnal = 0
               Print 
"TU SYGNAŁ WYŁĄCZ WEBASTO" 'i powtarzamy na wszelki wypadek 2 razy
               Waitms 60                                    'wyślij sygnał wyłączenia webasta
               Print 
"TU SYGNAŁ WYŁĄCZ WEBASTO"
               Czas_palenia = 0 : Czas_pracy_webasto = 0
               Pompa_wody = 1 : Wle_nadmuchu = 1            'wyłącz pompkę i wentylator
               Czuwanie_webasto = 0                         'czuwanie webasto wyłączone
   '            stop TIMER1
               If Tw < 11 Then                              'jeśli tw<11 wtedy załącz webasto za 5 minut ponownie
                    Czuwanie_webasto = 1                    'ustaw zmienne żeby webasto mogło się załączyć
                    If _min > 54 Then                       'jeśli minuta większ od 54 wtedy załączenie w następnej godzinie liczonej od zera
                        Minuta_webasto = Minuta_webasto + _min       'wyjdzie ponad 60
                        Minuta_webasto = Minuta_webasto Mod 10       'więc podziel przez 10 i weź co zostaje (np. będzie 64 to minuta_webasto będzie 4)
                        If _hour = 23 Then                  'jeśli jest akurat 23
                           Godzina_webasto = 0              ' to następna godzina jest 0
                        Else                                'w przeciwnym wypadku
                           Godzina_webasto = _hour + 1      'następna godzina to _hour+1
                        End If
                    Else                                    'jeśli jest mniejsza od 54
                        Minuta_webasto = _min + 5           'wtedy normalnie dodaj 5 minut (czas do kolejnego załączenia)
                        Godzina_webasto = _hour             'no i weź aktualną godzinę
                    End If
   '            Else                                            'jeśli temp. w środku przekroczyła już 11 stopni

   '               Czas_palenia = 0     'grzej dalej kolejne 35 minut
               End If
         End If

         If Wyslij_sygnal = 1 Then                          'jeśli jest załączone webasto
            If Zaplon = 0 Then Czas_pracy_webasto = 2105    'jeśli włączony zapłon wtedy wyłącz webasto
            If Opoznienie_zal_wle_nadmuchu > 300 Then       'po 5 minutach od uruchomienia pieca
               Wle_nadmuchu = 0                             'załącz wle nadmuchu
               Opoznienie_zal_wle_nadmuchu = 0
            End If
         Else
            Wle_nadmuchu = 1 : Pompa_wody = 1
         End If
    End If
End Sub

'Sub Komunikacja_z_elm327
'(
    Disable Int2
    Lcdclear
    Do
       Print "0104" ; Chr(13) ;                             'polecenie odczytu OBLICZONEJ WARTOŚCI OBCIĄŻENIA SILNIKA (A*100/255) w %
       Do
         If Sw3 = 0 Then
            Odebrano_dane = 0 : Buzzer = 0 : Waitms 500 : Buzzer = 1       'awaryjne wyjście
         End If
       Loop Until Odebrano_dane = 0
       Ilosc_znakow_w_buforze_odb_rs232 = Bufspace(1)       'ilość wolnego miejsca w buforze odbiorczym rs232
       Ilosc_znakow_w_buforze_odb_rs232 = 44 - Ilosc_znakow_w_buforze_odb_rs232       'ilość znaków w buforze odbiorczym
       For Iii = 1 To Ilosc_znakow_w_buforze_odb_rs232
          Names = Inkey()                                   ' Bufor = Val(names)
          If Iii = 12 Then Pomoc_string = Names             'przepisanie starszej części wartości HEX
          If Iii = 13 Then Pomoc_string = Pomoc_string + Names
       Next Ilosc_znakow_w_buforze_odb_rs232
       T1 = Hexval(pomoc_string)                            'przekonwertowanie wartości ze stringa-hex na integer lub byte
       T1 = T1 * 100                                        'przeliczenie zgodnie ze wzorem
       T1 = T1 / 255                                        'dokładność do jedności (inaczej trzebaby użyć zmiennej single)
       Pomoc_string = Str(t1)                               'przekonwertowanie wyniku na string
       Lcdgoxy 1 , 1
       Lcdstr "Obc. sil=" , 1 , 0
       Lcdstr Pomoc_string , 1 , 0
       Lcdstr "% " , 1 , 0
       Lcdupdate
       Odebrano_dane = 1

       Print "010F" ; Chr(13) ;                             'polecenie odczytu  TEMPERATURY POWIETRZA DOLOTOWEGO  (A-40) w st. Celsjusza
       Do
          If Sw3 = 0 Then
             Odebrano_dane = 0 : Buzzer = 0 : Waitms 500 : Buzzer = 1       'awaryjne wyjście
          End If
       Loop Until Odebrano_dane = 0
       Ilosc_znakow_w_buforze_odb_rs232 = Bufspace(1)       'ilość wolnego miejsca w buforze odbiorczym rs232
       Ilosc_znakow_w_buforze_odb_rs232 = 44 - Ilosc_znakow_w_buforze_odb_rs232       'ilość znaków w buforze odbiorczym
       For Iii = 1 To Ilosc_znakow_w_buforze_odb_rs232
          Names = Inkey()                                   ' Bufor = Val(names)
          If Iii = 12 Then Pomoc_string = Names             'przepisanie starszej części wartości HEX
          If Iii = 13 Then Pomoc_string = Pomoc_string + Names
        Next Ilosc_znakow_w_buforze_odb_rs232
       T1 = Hexval(pomoc_string)                            'przekonwertowanie wartości ze stringa-hex na integer lub byte
       T1 = T1 - 40                                         'przeliczenie zgodnie ze wzorem
       Pomoc_string = Str(t1)                               'przekonwertowanie wyniku na string
       Lcdgoxy 1 , 2
       Lcdstr "T. pow.=" , 1 , 0
       Lcdstr Pomoc_string , 1 , 0
       Lcdstr "^C " , 1 , 0
       Lcdupdate
       Odebrano_dane = 1


       Print "0105" ; Chr(13) ;                             'polecenie odczytu TEMPERATURY PŁYNU CHŁODZĄCEGO (A-40) w st. Celsjusza
       Do
         If Sw3 = 0 Then
             Odebrano_dane = 0 : Buzzer = 0 : Waitms 500 : Buzzer = 1       'awaryjne wyjście
          End If
       Loop Until Odebrano_dane = 0
       Ilosc_znakow_w_buforze_odb_rs232 = Bufspace(1)       'ilość wolnego miejsca w buforze odbiorczym rs232
       Ilosc_znakow_w_buforze_odb_rs232 = 44 - Ilosc_znakow_w_buforze_odb_rs232       'ilość znaków w buforze odbiorczym
       For Iii = 1 To Ilosc_znakow_w_buforze_odb_rs232
          Names = Inkey()                                   ' Bufor = Val(names)
          If Iii = 12 Then Pomoc_string = Names             'przepisanie starszej części wartości HEX
          If Iii = 13 Then Pomoc_string = Pomoc_string + Names
       Next Ilosc_znakow_w_buforze_odb_rs232
       T1 = Hexval(pomoc_string)                            'przekonwertowanie wartości ze stringa-hex na integer lub byte
       T1 = T1 - 40                                         'przeliczenie zgodnie ze wzorem
       Pomoc_string = Str(t1)                               'przekonwertowanie wyniku na string
       Lcdgoxy 1 , 3
       Lcdstr "T. plynu=" , 1 , 0
       Lcdstr Pomoc_string , 1 , 0
       Lcdstr "^C " , 1 , 0
       Lcdupdate
       Odebrano_dane = 1

       Print "0110" ; Chr(13) ;                             'polecenie odczytu PRZEPŁYWU POWIETRZA MAF (A*256+B)/100 w gramach/sekundę
       Do
         If Sw3 = 0 Then
            Odebrano_dane = 0 : Buzzer = 0 : Waitms 500 : Buzzer = 1       'awaryjne wyjście
         End If
       Loop Until Odebrano_dane = 0
       Ilosc_znakow_w_buforze_odb_rs232 = Bufspace(1)       'ilość wolnego miejsca w buforze odbiorczym rs232
       Ilosc_znakow_w_buforze_odb_rs232 = 44 - Ilosc_znakow_w_buforze_odb_rs232       'ilość znaków w buforze odbiorczym
       For Iii = 1 To Ilosc_znakow_w_buforze_odb_rs232
          Names = Inkey()                                   ' Bufor = Val(names)
          If Iii = 12 Then Pomoc_string = Names             'przepisanie starszej części wartości HEX
          If Iii = 13 Then Pomoc_string = Pomoc_string + Names       'wartość 2bajtowa i dlatego tak robimy
          If Iii = 15 Then Pomoc_string = Pomoc_string + Names
          If Iii = 16 Then Pomoc_string = Pomoc_string + Names
       Next Ilosc_znakow_w_buforze_odb_rs232
       Napiecie = Hexval(pomoc_string)                      'przekonwertowanie wartości ze stringa-hex na word
       Napiecie = Napiecie / 100                            'przeliczenie zgodnie ze wzorem
       Pomoc_string = Str(napiecie)                         'przekonwertowanie wyniku na string
       Lcdgoxy 1 , 4
       Lcdstr "MAF=" , 1 , 0
       Lcdstr Pomoc_string , 1 , 0
       Lcdstr "g/s  " , 1 , 0
       Lcdupdate
       Odebrano_dane = 1

       Print "010D" ; Chr(13) ;                             'polecenie odczytu  PRĘDKOŚĆ POJAZDU  (A) km/h
       Do
          If Sw3 = 0 Then
             Odebrano_dane = 0 : Buzzer = 0 : Waitms 500 : Buzzer = 1       'awaryjne wyjście
          End If
       Loop Until Odebrano_dane = 0
       Ilosc_znakow_w_buforze_odb_rs232 = Bufspace(1)       'ilość wolnego miejsca w buforze odbiorczym rs232
       Ilosc_znakow_w_buforze_odb_rs232 = 44 - Ilosc_znakow_w_buforze_odb_rs232       'ilość znaków w buforze odbiorczym
       For Iii = 1 To Ilosc_znakow_w_buforze_odb_rs232
          Names = Inkey()                                   ' Bufor = Val(names)
          If Iii = 12 Then Pomoc_string = Names             'przepisanie starszej części wartości HEX
          If Iii = 13 Then Pomoc_string = Pomoc_string + Names
        Next Ilosc_znakow_w_buforze_odb_rs232
       T1 = Hexval(pomoc_string)                            'przekonwertowanie wartości ze stringa-hex na integer lub byte
       Pomoc_string = Str(t1)                               'przekonwertowanie wyniku na string
       Lcdgoxy 1 , 5
       Lcdstr "V= " , 1 , 0
       Lcdstr Pomoc_string , 1 , 0
       Lcdstr "km/h   " , 1 , 0
       Lcdupdate
       Odebrano_dane = 1

       Print "010C" ; Chr(13) ;                             'polecenie odczytu OBROTY (A*256+B)/4 w rpm
       Do
         If Sw3 = 0 Then
            Odebrano_dane = 0 : Buzzer = 0 : Waitms 500 : Buzzer = 1       'awaryjne wyjście
         End If
       Loop Until Odebrano_dane = 0
       Ilosc_znakow_w_buforze_odb_rs232 = Bufspace(1)       'ilość wolnego miejsca w buforze odbiorczym rs232
       Ilosc_znakow_w_buforze_odb_rs232 = 44 - Ilosc_znakow_w_buforze_odb_rs232       'ilość znaków w buforze odbiorczym
       For Iii = 1 To Ilosc_znakow_w_buforze_odb_rs232
          Names = Inkey()                                   ' Bufor = Val(names)
          If Iii = 12 Then Pomoc_string = Names             'przepisanie starszej części wartości HEX
          If Iii = 13 Then Pomoc_string = Pomoc_string + Names       'wartość 2bajtowa i dlatego tak robimy
          If Iii = 15 Then Pomoc_string = Pomoc_string + Names
          If Iii = 16 Then Pomoc_string = Pomoc_string + Names
       Next Ilosc_znakow_w_buforze_odb_rs232
       Napiecie = Hexval(pomoc_string)                      'przekonwertowanie wartości ze stringa-hex na word
       Napiecie = Napiecie / 4                              'przeliczenie zgodnie ze wzorem
       Pomoc_string = Str(napiecie)                         'przekonwertowanie wyniku na string
       Lcdgoxy 1 , 6
       Lcdstr "Obroty=" , 1 , 0
       Lcdstr Pomoc_string , 1 , 0
       Lcdstr "   " , 1 , 0
       Lcdupdate
       Odebrano_dane = 1

       If Sw3 = 0 Then
            Odebrano_dane = 1 : Buzzer = 0 : Wait 1 : Buzzer = 1 : Ekran = 3
       End If
     Loop Until Ekran = 3
     Lcdclear
     Enable Int2
')
'End Sub

'Sub Komunikacja_z_elm327_2
'(
    Disable Int2
    Lcdclear
    Do
       Print "010B" ; Chr(13) ;                             'polecenie odczytu CIŚNIENIE ABSOLUTNE W KOLEKTORZE DOLOTOWYM (A) w kPa
       Do
         If Sw3 = 0 Then
            Odebrano_dane = 0 : Buzzer = 0 : Waitms 500 : Buzzer = 1       'awaryjne wyjście
         End If
       Loop Until Odebrano_dane = 0
       Ilosc_znakow_w_buforze_odb_rs232 = Bufspace(1)       'ilość wolnego miejsca w buforze odbiorczym rs232
       Ilosc_znakow_w_buforze_odb_rs232 = 44 - Ilosc_znakow_w_buforze_odb_rs232       'ilość znaków w buforze odbiorczym
       For Iii = 1 To Ilosc_znakow_w_buforze_odb_rs232
          Names = Inkey()                                   ' Bufor = Val(names)
          If Iii = 12 Then Pomoc_string = Names             'przepisanie starszej części wartości HEX
          If Iii = 13 Then Pomoc_string = Pomoc_string + Names
       Next Ilosc_znakow_w_buforze_odb_rs232
       T1 = Hexval(pomoc_string)                            'przekonwertowanie wartości ze stringa-hex na integer lub byte
       Pomoc_string = Str(t1)                               'przekonwertowanie wyniku na string
       Lcdgoxy 1 , 1
       Lcdstr "Cisn. d=" , 1 , 0
       Lcdstr Pomoc_string , 1 , 0
       Lcdstr "kPa" , 1 , 0
       Lcdupdate
       Odebrano_dane = 1

       Print "010A" ; Chr(13) ;                             'polecenie odczytu CIŚNIENIE PALIWA (A*3) w kPa
       Do
         If Sw3 = 0 Then
            Odebrano_dane = 0 : Buzzer = 0 : Waitms 500 : Buzzer = 1       'awaryjne wyjście
         End If
       Loop Until Odebrano_dane = 0
       Ilosc_znakow_w_buforze_odb_rs232 = Bufspace(1)       'ilość wolnego miejsca w buforze odbiorczym rs232
       Ilosc_znakow_w_buforze_odb_rs232 = 44 - Ilosc_znakow_w_buforze_odb_rs232       'ilość znaków w buforze odbiorczym
       For Iii = 1 To Ilosc_znakow_w_buforze_odb_rs232
          Names = Inkey()                                   ' Bufor = Val(names)
          If Iii = 12 Then Pomoc_string = Names             'przepisanie starszej części wartości HEX
          If Iii = 13 Then Pomoc_string = Pomoc_string + Names
       Next Ilosc_znakow_w_buforze_odb_rs232
       T1 = T1 * 3
       T1 = Hexval(pomoc_string)                            'przekonwertowanie wartości ze stringa-hex na integer lub byte
       Pomoc_string = Str(t1)                               'przekonwertowanie wyniku na string
       Lcdgoxy 1 , 2
       Lcdstr "C. paliwa=" , 1 , 0
       Lcdstr Pomoc_string , 1 , 0
       Lcdstr "kPa" , 1 , 0
       Lcdupdate
       Odebrano_dane = 1

'      Print "0121" ; chr(13) ;                             'polecenie odczytu DYSTANS OD ZAŚWIECENIA MIL (A*256+B) w km

       If Sw3 = 0 Then
            Odebrano_dane = 1 : Buzzer = 0 : Wait 1 : Buzzer = 1 : Ekran = 1
       End If
     Loop Until Ekran = 1
     Lcdclear
     Enable Int2
')
'End Sub


'Serial0charmatch:
'   Odebrano_dane = 0
'Return

$include "3310ab.bas"
End                                                         'end program                                                                             'end program


'                              Character generator

'     This table defines the standard ASCII characters in a 5x7 dot format.
'------------------------------------------------------------------------------/
$data
Fontlookup:
Data &H00 , &H00 , &H00 , &H00 , &H00 ,                     ' sp
Data &H00 , &H00 , &H2F , &H00 , &H00 ,                     ' !
Data &H00 , &H07 , &H00 , &H07 , &H00 , ' "
Data &H14 , &H7F , &H14 , &H7F , &H14 ,                     ' #
Data &H24 , &H2A , &H7F , &H2A , &H12 ,                     ' $
Data &HC4 , &HC8 , &H10 , &H26 , &H46 ,                     ' %
Data &H36 , &H49 , &H55 , &H22 , &H50 ,                     ' &
Data &H00 , &H05 , &H03 , &H00 , &H00 ,                     ' '
Data &H00 , &H1C , &H22 , &H41 , &H00 ,                     ' (
Data &H00 , &H41 , &H22 , &H1C , &H00 ,                     ' )
Data &H14 , &H08 , &H3E , &H08 , &H14 ,                     ' -
Data &H08 , &H08 , &H3E , &H08 , &H08 ,                     ' +
Data &H00 , &H00 , &H50 , &H30 , &H00 ,                     ' ,
Data &H10 , &H10 , &H10 , &H10 , &H10 ,                     ' -
Data &H00 , &H60 , &H60 , &H00 , &H00 ,                     ' .
Data &H20 , &H10 , &H08 , &H04 , &H02 ,                     ' /
Data &H3E , &H51 , &H49 , &H45 , &H3E ,                     ' 0
Data &H00 , &H42 , &H7F , &H40 , &H00 ,                     ' 1
Data &H42 , &H61 , &H51 , &H49 , &H46 ,                     ' 2
Data &H21 , &H41 , &H45 , &H4B , &H31 ,                     ' 3
Data &H18 , &H14 , &H12 , &H7F , &H10 ,                     ' 4
Data &H27 , &H45 , &H45 , &H45 , &H39 ,                     ' 5
Data &H3C , &H4A , &H49 , &H49 , &H30 ,                     ' 6
Data &H01 , &H71 , &H09 , &H05 , &H03 ,                     ' 7
Data &H36 , &H49 , &H49 , &H49 , &H36 ,                     ' 8
Data &H06 , &H49 , &H49 , &H29 , &H1E ,                     ' 9
Data &H00 , &H36 , &H36 , &H00 , &H00 ,                     ' :
Data &H00 , &H56 , &H36 , &H00 , &H00 ,                     ' ;
Data &H08 , &H14 , &H22 , &H41 , &H00 ,                     ' <
Data &H14 , &H14 , &H14 , &H14 , &H14 ,                     ' =
Data &H00 , &H41 , &H22 , &H14 , &H08 ,                     ' >
Data &H02 , &H01 , &H51 , &H09 , &H06 ,                     ' ?
Data &H32 , &H49 , &H59 , &H51 , &H3E ,                     ' @
Data &H7E , &H11 , &H11 , &H11 , &H7E ,                     ' A
Data &H7F , &H49 , &H49 , &H49 , &H36 ,                     ' B
Data &H3E , &H41 , &H41 , &H41 , &H22 ,                     ' C
Data &H7F , &H41 , &H41 , &H22 , &H1C ,                     ' D
Data &H7F , &H49 , &H49 , &H49 , &H41 ,                     ' E
Data &H7F , &H09 , &H09 , &H09 , &H01 ,                     ' F
Data &H3E , &H41 , &H49 , &H49 , &H7A ,                     ' G
Data &H7F , &H08 , &H08 , &H08 , &H7F ,                     ' H
Data &H00 , &H41 , &H7F , &H41 , &H00 ,                     ' I
Data &H20 , &H40 , &H41 , &H3F , &H01 ,                     ' J
Data &H7F , &H08 , &H14 , &H22 , &H41 ,                     ' K
Data &H7F , &H40 , &H40 , &H40 , &H40 ,                     ' L
Data &H7F , &H02 , &H0C , &H02 , &H7F ,                     ' M
Data &H7F , &H04 , &H08 , &H10 , &H7F ,                     ' N
Data &H3E , &H41 , &H41 , &H41 , &H3E ,                     ' O
Data &H7F , &H09 , &H09 , &H09 , &H06 ,                     ' P
Data &H3E , &H41 , &H51 , &H21 , &H5E ,                     ' Q
Data &H7F , &H09 , &H19 , &H29 , &H46 ,                     ' R
Data &H46 , &H49 , &H49 , &H49 , &H31 ,                     ' S
Data &H01 , &H01 , &H7F , &H01 , &H01 ,                     ' T
Data &H3F , &H40 , &H40 , &H40 , &H3F ,                     ' U
Data &H1F , &H20 , &H40 , &H20 , &H1F ,                     ' V
Data &H3F , &H40 , &H38 , &H40 , &H3F ,                     ' W
Data &H63 , &H14 , &H08 , &H14 , &H63 ,                     ' X
Data &H07 , &H08 , &H70 , &H08 , &H07 ,                     ' Y
Data &H61 , &H51 , &H49 , &H45 , &H43 ,                     ' Z
Data &H00 , &H7F , &H41 , &H41 , &H00 ,                     ' [
Data &H55 , &H2A , &H55 , &H2A , &H55 ,                     ' 55
Data &H00 , &H41 , &H41 , &H7F , &H00 ,                     ' ]
'Data &H04 , &H02 , &H01 , &H02 , &H04 ,                     ' ^
Data &H06 , &H09 , &H09 , &H06 , &H00 ,                     ' stopień wywołuje się go: ^
Data &H40 , &H40 , &H40 , &H40 , &H40 ,                     ' _
Data &H00 , &H01 , &H02 , &H04 , &H00 ,                     ' '
Data &H20 , &H54 , &H54 , &H54 , &H78 ,                     ' a
Data &H7F , &H48 , &H44 , &H44 , &H38 ,                     ' b
Data &H38 , &H44 , &H44 , &H44 , &H20 ,                     ' c
Data &H38 , &H44 , &H44 , &H48 , &H7F ,                     ' d
Data &H38 , &H54 , &H54 , &H54 , &H18 ,                     ' e
Data &H08 , &H7E , &H09 , &H01 , &H02 ,                     ' f
Data &H0C , &H52 , &H52 , &H52 , &H3E ,                     ' g
Data &H7F , &H08 , &H04 , &H04 , &H78 ,                     ' h
Data &H00 , &H44 , &H7D , &H40 , &H00 ,                     ' i
Data &H20 , &H40 , &H44 , &H3D , &H00 ,                     ' j
Data &H7F , &H10 , &H28 , &H44 , &H00 ,                     ' k
Data &H00 , &H41 , &H7F , &H40 , &H00 ,                     ' l
Data &H7C , &H04 , &H18 , &H04 , &H78 ,                     ' m
Data &H7C , &H08 , &H04 , &H04 , &H78 ,                     ' n
Data &H38 , &H44 , &H44 , &H44 , &H38 ,                     ' o
Data &H7C , &H14 , &H14 , &H14 , &H08 ,                     ' p
Data &H08 , &H14 , &H14 , &H18 , &H7C ,                     ' q
Data &H7C , &H08 , &H04 , &H04 , &H08 ,                     ' r
Data &H48 , &H54 , &H54 , &H54 , &H20 ,                     ' s
Data &H04 , &H3F , &H44 , &H40 , &H20 ,                     ' t
Data &H3C , &H40 , &H40 , &H20 , &H7C ,                     ' u
Data &H1C , &H20 , &H40 , &H20 , &H1C ,                     ' v
Data &H3C , &H40 , &H30 , &H40 , &H3C ,                     ' w
Data &H44 , &H28 , &H10 , &H28 , &H44 ,                     ' x
Data &H0C , &H50 , &H50 , &H50 , &H3C ,                     ' y
Data &H44 , &H64 , &H54 , &H4C , &H44



Mazda:
Data 48 , 6,                                                '84 , 3,                                                ' Image Table Name, Xbytes, N of Lines, 254 bytes

Data &H00 , &H00 , &H00 , &H00 , &H80 , &H00 , &H80 , &HC0 , &HE0 , &HE0 , &HE0 , &H70 , &H70 , &H30 , &H30 , &H38,
Data &H18 , &H18 , &H18 , &H18 , &H18 , &H08 , &H18 , &H18 , &H18 , &H18 , &H18 , &H18 , &H18 , &H18 , &H30 , &H30,
Data &H70 , &H60 , &HE0 , &HE0 , &HC0 , &HC0 , &H00 , &H80 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00,
Data &H00 , &H00 , &H98 , &HF0 , &HE0 , &HE3 , &HC7 , &HC7 , &HC3 , &H81 , &HA0 , &H60 , &H40 , &HC0 , &H80 , &H80,
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H80 , &H80 , &HC0 , &HC0,
Data &H40 , &H80 , &HA0 , &H81 , &HD3 , &HC7 , &HC7 , &HE3 , &HE1 , &HFE , &HFE , &HF0 , &HC0 , &H00 , &H00 , &H00,
Data &HA0 , &H80 , &HFF , &HFF , &HFF , &HDB , &H01 , &H03 , &H03 , &H03 , &H07 , &H07 , &H07 , &H0F , &H0E , &H0E,
Data &H1D , &H1E , &H3C , &H70 , &HE0 , &HC0 , &H80 , &HF0 , &HF8 , &H78 , &H3E , &H1E , &H1F , &H0F , &H0E , &H0E,
Data &H07 , &H07 , &H03 , &H03 , &H03 , &H01 , &H01 , &H01 , &HAF , &H03 , &HFF , &HFF , &HFF , &H18 , &H00 , &H00,
Data &H00 , &H0F , &H3F , &H7F , &HFF , &HDF , &H9E , &H70 , &H80 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00,
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H07 , &H07 , &H01 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00,
Data &H00 , &H00 , &H00 , &H80 , &HC0 , &HF0 , &HF8 , &HFF , &HF8 , &HFF , &H3F , &H0F , &H03 , &H00 , &H00 , &H00,
Data &H00 , &H00 , &H00 , &H00 , &H01 , &H03 , &H03 , &H07 , &H06 , &H0D , &H0D , &H18 , &H18 , &H30 , &H30 , &H30,
Data &H30 , &H30 , &H30 , &H30 , &H30 , &H30 , &H30 , &H30 , &H30 , &H30 , &H30 , &H30 , &H30 , &H30 , &H38 , &H18,
Data &H18 , &H1C , &HCC , &H0F , &H07 , &H07 , &H03 , &H03 , &H01 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00,
Data &H00 , &H00 , &H00 , &H00 , &HFE , &H04 , &H02 , &H02 , &H06 , &H04 , &H02 , &H02 , &H02 , &HFC , &H00 , &H00,
Data &HE4 , &H92 , &H92 , &H92 , &HFC , &H00 , &H00 , &HC2 , &HA2 , &H8A , &H86 , &H00 , &H00 , &H7C , &H82 , &H82,
Data &H82 , &H44 , &HFF , &H00 , &H00 , &HE4 , &H92 , &H92 , &H92 , &HFC , &H00 , &H00 , &H00 , &H00 , &H00 , &H00,
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00,
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00,
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00,

Swiatla_on:
Data 26 , 2,

Data &H00 , &H80 , &HF0 , &H18 , &H0C , &H06 , &H02 , &H02 , &H02 , &HFE , &H00 , &H62 , &H46 , &H46 , &H44 , &HC4,
Data &HCC , &H8C , &H8C , &H88 , &H98 , &H98 , &H18 , &H10 , &H10 , &H00 , &H00 , &H03 , &H0E , &H18 , &H30 , &H60,
Data &HC0 , &H80 , &HC0 , &HFF , &H00 , &H44 , &HC4 , &HCC , &H88 , &H88 , &H88 , &H98 , &H18 , &H11 , &H11 , &H31,
Data &H31 , &H31 , &H00 , &H00,

'(
Swiatla_off:
Data 26 , 2,

Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00,
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00,
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00,
Data &H00 , &H00 , &H00 , &H00,
')

Czujnik_zewnetrzny:
'Data &H00 , &H28 , &H7E , &H00 , &H00 , &H01 , &H00 , &H00 , &H3E
Data 0 , 40 , 146 , 223 , 177 , 4 , 0 , 0 , 112

Czujnik_wewnetrzny:
'Data 0 , 40 , 145 , 0 , 0 , 16 , 0 , 0 , 210
Data 0 , 40 , 4 , 250 , 177 , 4 , 0 , 0 , 89                '