Pomiar pH wody - budowa sterownika do akwarium

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: pimowo » 03 cze 2019, 6:51

Może ja nie potrzebnie kombinuję? W tej chwili mam menu zrobione tak, że gdy chcę wejść w menu to klikam SELECT i guzikami LEFT/RIGHT przesuwam pozycję menu, a po najechaniu na wybraną pozycję klikając UP/DOWN zmieniam wartości. Na końcu menu mam "zapisz ustawienia" gdzie po kliknięciu SELECT wszytko się zapisuje i wychodzi do ekranu głównego. Problem z tym jest taki, że menu jest strasznie długie (teraz 20 pozycji, a jeszcze trochę tego dojdzie) i dlatego pomyślałem aby menu podzielić na grupy, aby wchodząc do menu można było się przesuwać po kategoriach, a jak interesuje mnie jakaś zmiana to wchodzę do kategorii i tam dopiero wybieram właściwą opcję do ustawienia.

No nic, będę jeszcze walczył. Dziękuję za kod - takiego sposobu jeszcze nie próbowałem ;)
Awatar użytkownika
niveasoft
Posty: 1239
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: niveasoft » 03 cze 2019, 8:56

Łap. Napisałem to w dwie godzinki przy jednym kubku kawy więc pewnie można to dopieścić.
W menu masz trzy główne tematy (oczywiście możesz teraz rozbudować). Po wejściu w temat masz trzy podtematy. Każdy podtemat pozwala ustawić jedną ze zmiennych "Myvars(10)" czyli na razie Myvars(1) do Myvars(9).
W menu można się cofać. Pokazuje napis "ZAPISANO", ale nie zapisuje niczego do Eeprom (na razie) bo to przykład.
Te wszystkie napisy w Menu oczywiście możesz zmienić pod siebie i wtedy łatwiej Tobie będzie zrozumieć to Menu.
Program ma teraz 14 procent flash, ale ma już większość kodu i rozbudowanie go o kolejne podmenu to już prawie nic nie kosztuje i rozrastać się nie będzie.
Co było dla Ciebie ważne - program główny cały czas się wykonuje w tle - widać to po powrocie z menu - po prostu sekundy nalicza w tle ;)

Jako że nie mam już tego LCDshielda bo był mi przysłany do oprogramowania (może kiedyś sobie kupię) to musiałem dodać sobie do kodu pięć przycisków.
Żeby jednak nie mieszać Tobie w głowie to kod jest dokładnie kompatybilny z tym Twoim. napisałem funkcję która mi zwraca te same wartości co u Ciebie więc tylko wywal przyciski i podmień funkcję Read_keypad() ;)

Teraz zapierdzielam do swojej roboty bo nie wiadomo w co ręce włożyć :D

[EDIT1] Np. pierwsza optymalizacja która przed publikacją mi się nie nasunęła to tam gdzie pisze Select case 11,12,13,21,22,23,31,32,33 można w niektórych miejscach napisać: Case 11 To 13, Case 21 To 23, Case 31 To 33 itd. :D
  1. $regfile = "m328pdef.dat"
  2. $crystal = 16000000
  3. $hwstack = 64
  4. $swstack = 32
  5. $framesize = 128
  6. debug on
  7.  
  8. Config Submode = New
  9.  
  10. Config Timer0 = Timer , Prescale = 1024 , Clear_timer = 1 : Compare0a = 155       '10ms @16MHz
  11.  
  12. Config Adc = Single , Prescaler = Auto , Reference = Avcc
  13.  
  14. Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
  15. Config Lcd = 16x2
  16. Cursor Off , Noblink
  17. Cls
  18.  
  19. '---zmienne programu
  20. 'czas
  21. Dim 100ms As Byte , 1s As Byte
  22. Dim Seconds As Word , New_key As Byte                       'na potrzeby demo
  23. 'klawiatura
  24. Dim Old_key As Byte , Key_cnt As Byte , Key As Byte
  25. Dim Adc_read_key As Word , Read_key As Byte , Key_val As Byte
  26.  
  27. Const Sw_prawo = 1
  28. Const Sw_gora = 2
  29. Const Sw_dol = 3
  30. Const Sw_lewo = 4
  31. Const Sw_select = 5
  32.  
  33. 'menu
  34. Dim Refresh As Byte , Menu_flag As Byte , Menu_pos As Byte , Menu_topic As Byte , Podmenu_topic As Byte
  35. Dim New_page As Byte , Mem_pos As Byte , Var_idx As Byte , Myvars(10) As Byte
  36.  New_page = 1                                               'odswiez od razu
  37.  Menu_topic = 1
  38.  Podmenu_topic = 1
  39.  
  40. 'klawiatura by BARTek na potrzeby testów
  41. '---------------------------------------------
  42. Config Portc = &B00000000 : Portc = &B1111110
  43. '---------------------------------------------
  44. Function Read_keypad() As Byte
  45.  'klawiatura by BARTek na potrzeby testów
  46. '---------------------------------------------
  47.  New_key = 0
  48.  Debounce Pinc.5 , 0 , Prawo_sub , Sub
  49.  Debounce Pinc.4 , 0 , Gora_sub , Sub
  50.  Debounce Pinc.3 , 0 , Dol_sub , Sub
  51.  Debounce Pinc.2 , 0 , Lewo_sub , Sub
  52.  Debounce Pinc.1 , 0 , Select_sub , Sub
  53. '---------------------------------------------
  54.  Read_keypad = New_key
  55. End Function
  56.  
  57. Sub Policz_menu
  58.  Mem_pos = Menu_pos
  59.  Menu_pos = Menu_pos * 10
  60.  Menu_pos = Menu_pos + Podmenu_topic
  61.  New_page = 1
  62.   Select Case Menu_pos
  63.    Case 11 : Var_idx = 1
  64.    Case 12 : Var_idx = 2
  65.    Case 13 : Var_idx = 3
  66.    Case 21 : Var_idx = 4
  67.    Case 22 : Var_idx = 5
  68.    Case 23 : Var_idx = 6
  69.    Case 31 : Var_idx = 7
  70.    Case 32 : Var_idx = 8
  71.    Case 33 : Var_idx = 9
  72.   End Select
  73. End Sub
  74.  
  75. Sub Show_var
  76.   Locate 2 , 8 : Lcd Myvars(var_idx) ; "  "
  77. End Sub
  78.  
  79. Sub Incr_var
  80.   Incr Myvars(var_idx)
  81.   If Myvars(var_idx) > 9 Then Myvars(var_idx) = 0
  82. End Sub
  83.  
  84. Sub Decr_var
  85.   Decr Myvars(var_idx)
  86.   If Myvars(var_idx) > 9 Then Myvars(var_idx) = 9
  87. End Sub
  88.  
  89. Sub Mem_this
  90.  Cls : Locate 2 , 4 : Lcd "ZAPISANO!"
  91.   Waitms 750 : Menu_pos = Mem_pos                           'wróć do menu
  92.   New_page = 1
  93. End Sub
  94.  
  95. Do
  96.  
  97.  
  98.    If Tifr0.ocf0a = 1 Then                                  '-[ co 10ms ]-
  99.     Tifr0.ocf0a = 1
  100.  
  101.       Key = Read_keypad()
  102.  
  103.       If Key <> 0 Then
  104.          Select Case Key
  105.  
  106.           Case Sw_prawo
  107.            If Menu_flag = 1 Then
  108.             Select Case Menu_pos
  109.              Case 0
  110.               Incr Menu_topic : If Menu_topic > 3 Then Menu_topic = 0
  111.               New_page = 1
  112.              Case 1
  113.               Incr Podmenu_topic : If Podmenu_topic > 3 Then Podmenu_topic = 0
  114.               New_page = 1
  115.              Case 2
  116.               Incr Podmenu_topic : If Podmenu_topic > 3 Then Podmenu_topic = 0
  117.               New_page = 1
  118.              Case 3
  119.               Incr Podmenu_topic : If Podmenu_topic > 3 Then Podmenu_topic = 0
  120.               New_page = 1
  121.             End Select
  122.  
  123.            End If
  124.  
  125.           Case Sw_gora
  126.            If Menu_flag = 1 Then
  127.              Select Case Menu_pos
  128.               Case 11 : Incr_var
  129.               Case 12 : Incr_var
  130.               Case 13 : Incr_var
  131.               Case 21 : Incr_var
  132.               Case 22 : Incr_var
  133.               Case 23 : Incr_var
  134.               Case 31 : Incr_var
  135.               Case 32 : Incr_var
  136.               Case 33 : Incr_var
  137.              End Select
  138.            End If
  139.  
  140.           Case Sw_dol
  141.            If Menu_flag = 1 Then
  142.              Select Case Menu_pos
  143.               Case 11 : Decr_var
  144.               Case 12 : Decr_var
  145.               Case 13 : Decr_var
  146.               Case 21 : Decr_var
  147.               Case 22 : Decr_var
  148.               Case 23 : Decr_var
  149.               Case 31 : Decr_var
  150.               Case 32 : Decr_var
  151.               Case 33 : Decr_var
  152.              End Select
  153.            End If
  154.  
  155.           Case Sw_lewo
  156.            If Menu_flag = 1 Then
  157.              Select Case Menu_pos
  158.               Case 0
  159.                Decr Menu_topic : If Menu_topic > 3 Then Menu_topic = 3
  160.                New_page = 1
  161.               Case 1
  162.                Decr Podmenu_topic : If Podmenu_topic > 3 Then Podmenu_topic = 3
  163.                New_page = 1
  164.               Case 2
  165.                Decr Podmenu_topic : If Podmenu_topic > 3 Then Podmenu_topic = 3
  166.                New_page = 1
  167.               Case 3
  168.                Decr Podmenu_topic : If Podmenu_topic > 3 Then Podmenu_topic = 3
  169.                New_page = 1
  170.              End Select
  171.            End If
  172.  
  173.           Case Sw_select                                    'klawisz wyboru/zatwierdzania
  174.            'zawsze nowa plansza
  175.            New_page = 1
  176.            If Menu_flag = 0 Then
  177.             Menu_flag = 1
  178.  
  179.            Else                                             'jestesmy w menu
  180.             Select Case Menu_pos
  181.  
  182.              Case 0
  183.               Select Case Menu_topic
  184.                Case 0
  185.                 Menu_flag = 0
  186.                Case 1 To 3 : Menu_pos = Menu_topic
  187.               End Select
  188.  
  189.              Case 1
  190.               Select Case Podmenu_topic
  191.                Case 0 : Menu_pos = 0                        'powrót do menu gł.
  192.                Case 1 To 3 : Call Policz_menu()             'idź->11,12,13
  193.               End Select
  194.  
  195.              Case 2
  196.               Select Case Podmenu_topic
  197.                Case 0 : Menu_pos = 0                        'powrót do menu gł
  198.                Case 1 To 3 : Call Policz_menu()             'idź->21,22,23 .
  199.               End Select
  200.  
  201.              Case 3
  202.               Select Case Podmenu_topic
  203.                Case 0 : Menu_pos = 0                        'powrót do menu gł.
  204.                Case 1 To 3 : Call Policz_menu()             'idź->31,32,33
  205.               End Select
  206.  
  207.              Case 11
  208.               Call Mem_this()
  209.              Case 12
  210.               Call Mem_this()
  211.              Case 13
  212.               Call Mem_this()
  213.              Case 21
  214.               Call Mem_this()
  215.              Case 22
  216.               Call Mem_this()
  217.              Case 23
  218.               Call Mem_this()
  219.              Case 31
  220.               Call Mem_this()
  221.              Case 32
  222.               Call Mem_this()
  223.              Case 33
  224.               Call Mem_this()
  225.             End Select
  226.  
  227.            End If
  228.  
  229.          End Select
  230.  
  231.        Refresh = 1                                          'zawsze od razu odświez po przycisku
  232.       End If
  233.  
  234.       If 100ms < 9 Then
  235.        Incr 100ms
  236.       Else                                                  '-[ co 100ms ]-
  237.        100ms = 0
  238.  
  239.          If 1s < 9 Then
  240.           Incr 1s
  241.          Else                                               '-[ co 1s ]-
  242.           1s = 0
  243.  
  244.           Incr Seconds                                      'niezaleznie od tego czy jesteśmy w Menu program się wykonuje
  245.  
  246.           Refresh = 1
  247.  
  248.          End If
  249.  
  250.       End If
  251.  
  252.    End If
  253.  
  254.  
  255.    If Refresh = 1 Then
  256.  
  257.  
  258.      If New_page = 1 Then                                   'to wyswietla się tylko raz
  259.       New_page = 0 : Cls
  260.       If Menu_flag = 0 Then
  261.        Lcd "Czas:"
  262.  
  263.       Else
  264.        Select Case Menu_pos
  265.  
  266.         Case 0
  267.          Locate 1 , 4 : Lcd "MAIN MENU"
  268.          Locate 2 , 1
  269.            Select Case Menu_topic
  270.             Case 0 : Lcd "Exit menu"
  271.             Case 1 : Lcd "1.Menu czegos 1"
  272.             Case 2 : Lcd "2.Menu czegos 2"
  273.             Case 3 : Lcd "3.Menu czegos 3"
  274.            End Select
  275.         Case 1
  276.           Locate 1 , 4 : Lcd "PODMENU 1"
  277.            Locate 2 , 1
  278.            Select Case Podmenu_topic
  279.             Case 0 : Lcd "Back"
  280.             Case 1 : Lcd " Var " ; Menu_topic ; "." ; Podmenu_topic
  281.             Case 2 : Lcd " Var " ; Menu_topic ; "." ; Podmenu_topic
  282.             Case 3 : Lcd " Var " ; Menu_topic ; "." ; Podmenu_topic
  283.            End Select
  284.         Case 2
  285.           Locate 1 , 4 : Lcd "PODMENU 2"
  286.            Locate 2 , 1
  287.            Select Case Podmenu_topic
  288.             Case 0 : Lcd "Back"
  289.             Case 1 : Lcd " Var " ; Menu_topic ; "." ; Podmenu_topic
  290.             Case 2 : Lcd " Var " ; Menu_topic ; "." ; Podmenu_topic
  291.             Case 3 : Lcd " Var " ; Menu_topic ; "." ; Podmenu_topic
  292.            End Select
  293.         Case 3
  294.           Locate 1 , 4 : Lcd "PODMENU 3"
  295.            Locate 2 , 1
  296.            Select Case Podmenu_topic
  297.             Case 0 : Lcd "Back"
  298.             Case 1 : Lcd " Var " ; Menu_topic ; "." ; Podmenu_topic
  299.             Case 2 : Lcd " Var " ; Menu_topic ; "." ; Podmenu_topic
  300.             Case 3 : Lcd " Var " ; Menu_topic ; "." ; Podmenu_topic
  301.            End Select
  302.  
  303.          Case 11
  304.             Locate 1 , 1 : Lcd "Set Var " ; Menu_topic ; "." ; Podmenu_topic
  305.          Case 12
  306.             Locate 1 , 1 : Lcd "Set Var " ; Menu_topic ; "." ; Podmenu_topic
  307.          Case 13
  308.             Locate 1 , 1 : Lcd "Set Var " ; Menu_topic ; "." ; Podmenu_topic
  309.          Case 21
  310.             Locate 1 , 1 : Lcd "Set Var " ; Menu_topic ; "." ; Podmenu_topic
  311.          Case 22
  312.             Locate 1 , 1 : Lcd "Set Var " ; Menu_topic ; "." ; Podmenu_topic
  313.          Case 23
  314.             Locate 1 , 1 : Lcd "Set Var " ; Menu_topic ; "." ; Podmenu_topic
  315.          Case 31
  316.             Locate 1 , 1 : Lcd "Set Var " ; Menu_topic ; "." ; Podmenu_topic
  317.          Case 32
  318.             Locate 1 , 1 : Lcd "Set Var " ; Menu_topic ; "." ; Podmenu_topic
  319.          Case 33
  320.             Locate 1 , 1 : Lcd "Set Var " ; Menu_topic ; "." ; Podmenu_topic
  321.  
  322.        End Select
  323.       End If
  324.      End If
  325.  
  326.      If Menu_flag = 0 Then                                  'to wyświetla sie co sekundę lub przy zmianie wartości
  327.       Locate 1 , 6 : Lcd Seconds
  328.      Else
  329.  
  330.         Select Case Menu_pos
  331.          Case 0 :
  332.  
  333.          Case 11 : Show_var
  334.          Case 12 : Show_var
  335.          Case 13 : Show_var
  336.          Case 21 : Show_var
  337.          Case 22 : Show_var
  338.          Case 23 : Show_var
  339.          Case 31 : Show_var
  340.          Case 32 : Show_var
  341.          Case 33 : Show_var
  342.  
  343.         End Select
  344.      End If
  345.  
  346.     Refresh = 0
  347.    End If
  348.  
  349.  Key = 0
  350. Loop
  351. End
  352.  
  353.  
  354. 'klawiatura by BARTek na potrzeby testów
  355. '---------------------------------------------
  356. Prawo_sub:
  357.  New_key = Sw_prawo
  358. Return
  359. Gora_sub:
  360.  New_key = Sw_gora
  361. Return
  362. Dol_sub:
  363.  New_key = Sw_dol
  364. Return
  365. Lewo_sub:
  366.  New_key = Sw_lewo
  367. Return
  368. Select_sub:
  369.  New_key = Sw_select
  370. Return
  371. '---------------------------------------------
  372.  
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: pimowo » 03 cze 2019, 10:39

Dzięki za kod. Dobrze, że dziś mam pierwszą zmianę, wrócę do domu i będę próbował to rozkminic ;)
Ale tak patrząc na kod to drogi kolego, Ty to potrafisz namieszać człowiekowi w głowie :D

A tak po za tematem... Bartek dlaczego piszesz w BASCOM, a nie jak większość ludzi w C? Dużo też ludzi mówi, że C jest super i można wszystko w nim zrobić, a BSCOM jest be - chociaż Ty udowadniasz, że w tym języku można zrobić wszystko.
Ja np próbowałem C czy Arduino, ale coś mi to w ogóle nie idzie. W BASCOM mam małe czy duże problemy, ale jakoś to wszytko lepiej się pisze :)
Awatar użytkownika
niveasoft
Posty: 1239
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: niveasoft » 04 cze 2019, 6:02

Znam Basic na tyle, że mi jego drobne wady nie przeszkadzają.

Chodzi też o funkcjonalność. Ci którzy uczyli się u Mirka C, potem by napisać aplikację na telefon musieli uczyć się Basica żeby coś napisać w B4A.
Mirek cwaniak, bo kiedyś pisał w Bascom to miał łatwiej ;)

Tak więc mogę sobie napisać coś na AVR`ka w Bascom. Do projektu mogę sobie napisać soft na ESP8266 czy ESP32 w basicu na B4R.
Na tym nie koniec bo mogę sobie napisać soft na PC w VB.NET lub B4J - wszystko w basicu. Nie zapominajmy o sofcie na iOS do którego też napiszę w basicu.

Kiedyś żeby napisać coś na Androida siedziałem tydzień przed Android Studio - nie chciałbym wracać :P
Arduino i C poznałem po to by móc sobie konwertować potrzebne mi biblioteki. Coś tam wiem o ASM...a zdarzyło mi się kiedyś napisać soft w C na PIC mimo iż mam tez MicroBasic for PIC :D
Żeby grzebać w moich serwerach VPS musiałem poznać podstawy Linuxa i teraz wszystko robię na nich sam.

Język programowania powinno się wybrać taki który umożliwi zrealizowanie zadania w miarę bezproblemowo.

BTW. Ostatnio, po wielu latach używania, kupiłem licencję na bascomowy AVR-DOS
Teraz projekty z MP3 czy jakieś rejestratory - na legalu :D
Awatar użytkownika
Pikczu
Posty: 392
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: Pikczu » 04 cze 2019, 8:21

Kiedy ty na to wszystko masz czas ??
A ten bascomowy avr dos co to w ogóle jest?
Ja jak mam 2 godziny w sobotę i może wieczór w niedziele to maks.
Awatar użytkownika
niveasoft
Posty: 1239
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: niveasoft » 04 cze 2019, 8:43

AVR-DOS jest do obsługi kart SD, starych MMC i czytałem, że dyski już ludzie też uruchamiali.
Np. do projektów na kolorowych wyświetlaczach to grafiki i fotki trzyma się albo na zewnętrznym flash albo własnie na karcie SD. Do tego potrzeba AVR-DOS.
Jest dołączony do Bascoma, ale jak chcesz coś komuś na tym sprzedać to powinno się wykupić licencję. Dostaje się nawet źródła.
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: pimowo » 06 cze 2019, 14:47

niveasoft pisze:
04 cze 2019, 6:02
Znam Basic na tyle, że mi jego drobne wady nie przeszkadzają.
Tak myślałem, że to jest po prostu ulubiony język, a jak się zna wady i zalety to można zrobić wszytko ;)
Strasznie mnie to ciekawiło i musiałem zapytać.

Bartek, siedzę i siedzę nad tym menu i muszę poprosić jeszcze o pomoc bo coś mi to nie idzie :(
Ułożyłem menu aby się wyświetlało jak bym chciał, ale jak zacząłem dodawać opcje zmiany wartości to mi się wszytko rozjechało.

Kod na tą chwilę wygląda tak:
  1. '$regfile = "m328pdef.dat"
  2. $regfile = "m2560def.dat"
  3.  
  4. $crystal = 16000000
  5. $hwstack = 64
  6. $swstack = 32
  7. $framesize = 128
  8. Debug On
  9.  
  10. Config Submode = New
  11.  
  12. Config Timer0 = Timer , Prescale = 1024 , Clear_timer = 1 : Compare0a = 155       '10ms @16MHz/1024
  13.  
  14. Config Adc = Single , Prescaler = Auto , Reference = Avcc
  15.  
  16. 'UNO
  17. 'Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
  18.  
  19. 'MEGA
  20. Config Lcdpin = Pin , Db4 = Portg.5 , Db5 = Porte.3 , Db6 = Porth.3 , Db7 = Porth.4 , E = Porth.6 , Rs = Porth.5
  21.  
  22. Config Lcd = 16x2
  23. Cursor Off , Noblink
  24. Cls
  25.  
  26. 'nietypowe znaki
  27. Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32            'stopien Celciusza
  28. Deflcdchar 1 , 4 , 10 , 10 , 10 , 17 , 17 , 17 , 14         'termometr
  29. Deflcdchar 2 , 224 , 224 , 224 , 236 , 242 , 228 , 232 , 254       '2
  30. Deflcdchar 3 , 224 , 245 , 238 , 255 , 238 , 245 , 224 , 224       'grzanie
  31. Deflcdchar 4 , 234 , 228 , 245 , 238 , 245 , 228 , 234 , 224       'chlodzenie
  32. Deflcdchar 5 , 224 , 228 , 228 , 228 , 245 , 238 , 228 , 224       'strzałka w dol
  33. Deflcdchar 6 , 224 , 228 , 238 , 245 , 228 , 228 , 228 , 224       'strzałka w gore
  34. Deflcdchar 7 , 238 , 234 , 238 , 224 , 234 , 236 , 234 , 224       'CO2 OK
  35.  
  36. 'czas
  37. Dim 100ms As Byte , 1s As Byte
  38. Dim Seconds As Word , New_key As Byte                       'na potrzeby demo
  39.  
  40. 'klawiatura
  41. Dim Old_key As Byte , Key_cnt As Byte , Key As Byte
  42. Dim Adc_read_key As Word , Read_key As Byte , Key_val As Byte
  43.  
  44. Const Sw_prawo = 1
  45. Const Sw_gora = 2
  46. Const Sw_dol = 3
  47. Const Sw_lewo = 4
  48. Const Sw_select = 5
  49.  
  50. 'menu
  51. Dim Refresh As Byte , Menu_flag As Byte , Menu_pos As Byte , Menu_topic As Byte , Podmenu_topic As Byte
  52. Dim New_page As Byte , Mem_pos As Byte , Var_idx As Byte , Myvars(10) As Byte
  53.  New_page = 1                                               'odswiez od razu
  54.  Menu_topic = 1
  55.  Podmenu_topic = 1
  56.  
  57. 'LED Arduino
  58. Config Portb.7 = Output : Portb.7 = 1 : Led Alias Portb.7
  59.  
  60. 'klawiatura by BARTek na potrzeby testów
  61. '---------------------------------------------
  62. 'Config Portc = &B00000000 : Portc = &B1111110
  63. '---------------------------------------------
  64. 'Function Read_keypad() As Byte
  65. ' 'klawiatura by BARTek na potrzeby testów
  66. '---------------------------------------------
  67. ' New_key = 0
  68. ' Debounce Pinc.5 , 0 , Prawo_sub , Sub
  69. ' Debounce Pinc.4 , 0 , Gora_sub , Sub
  70. ' Debounce Pinc.3 , 0 , Dol_sub , Sub
  71. ' Debounce Pinc.2 , 0 , Lewo_sub , Sub
  72. ' Debounce Pinc.1 , 0 , Select_sub , Sub
  73. '---------------------------------------------
  74. ' Read_keypad = New_key
  75. 'End Function
  76.  
  77. 'klawiatura ADC
  78. Function Read_keypad() As Byte
  79.  
  80. '---   function with autorepeat
  81.  
  82.    Local Adc_read_key As Word , Read_key As Byte , Key_val As Byte
  83.  
  84.    Adc_read_key = Getadc(0)
  85.  
  86.    Select Case Adc_read_key
  87.  
  88.       Case 0 To 100 : Read_key = Sw_prawo                   'prawo = 0
  89.       Case 101 To 250 : Read_key = Sw_gora                  'gora = 145
  90.       Case 251 To 400 : Read_key = Sw_dol                   'dol = 330
  91.       Case 401 To 600 : Read_key = Sw_lewo                  'lewo = 506
  92.       Case 601 To 850 : Read_key = Sw_select                'select = 743
  93.       Case Is > 851 : Read_key = 0                          'brak klawisza = 1023
  94.  
  95.    End Select
  96.  
  97.    If Read_key <> 0 Then
  98.  
  99.       If Old_key = Read_key Then
  100.  
  101.          If Key_cnt < 20 Then
  102.  
  103.             Incr Key_cnt
  104.             Key_val = 0
  105.  
  106.          Else
  107.  
  108.             Key_cnt = 0
  109.             Key_val = Read_key
  110.  
  111.          End If
  112.  
  113.       End If
  114.  
  115.    Else
  116.  
  117.       Key_cnt = 15
  118.       Key_val = 0
  119.  
  120.    End If
  121.  
  122.    Old_key = Read_key
  123.    Read_keypad = Key_val
  124.  
  125. End Function
  126.  
  127. Sub Policz_menu
  128.  Mem_pos = Menu_pos
  129.  Menu_pos = Menu_pos * 10
  130.  Menu_pos = Menu_pos + Podmenu_topic
  131.  New_page = 1
  132.   Select Case Menu_pos
  133.    Case 1 : Var_idx = 1
  134.    Case 2 : Var_idx = 2
  135.    Case 3 : Var_idx = 3
  136.    Case 4 : Var_idx = 4
  137.    Case 5 : Var_idx = 5
  138.    Case 21 : Var_idx = 8
  139.    Case 22 : Var_idx = 9
  140.    Case 23 : Var_idx = 10
  141.    Case 31 : Var_idx = 11
  142.    Case 32 : Var_idx = 12
  143.    Case 33 : Var_idx = 13
  144.   End Select
  145. End Sub
  146.  
  147. 'Sub Show_var
  148. '  Locate 2 , 8 : Lcd Myvars(var_idx) ; "  "
  149. 'End Sub
  150.  
  151. 'Sub Incr_var
  152. '  Incr Myvars(var_idx)
  153. '  If Myvars(var_idx) > 9 Then Myvars(var_idx) = 0
  154. 'End Sub
  155.  
  156. 'Sub Decr_var
  157. '  Decr Myvars(var_idx)
  158. '  If Myvars(var_idx) > 9 Then Myvars(var_idx) = 9
  159. 'End Sub
  160.  
  161. Sub Mem_this
  162.  Cls : Locate 1 , 4 : Lcd "ZAPISANO!"
  163.   Waitms 750 : Menu_pos = Mem_pos                           'wróć do menu
  164.   New_page = 1
  165. End Sub
  166.  
  167. 'dane tymczasowe
  168. Dim Twoje_ph As Single : Twoje_ph = 7.55
  169. Dim Wymagane_ph As Single : Wymagane_ph = 6.70
  170. Dim Histereza_ph As Single : Histereza_ph = 0.05
  171. Dim Ph_buf_4 As Single : Ph_buf_4 = 4.01
  172. Dim Ph_buf_7 As Single : Ph_buf_7 = 6.98
  173. Dim Kh As Single : Kh = 3.50
  174. Dim Kh_co2_min As Single : Kh_co2_min = 15
  175. Dim Kh_co2_max As Single : Kh_co2_max = 35
  176. Dim Wymagana_temp As Single : Wymagana_temp = 25.5
  177. Dim Histereza_temp As Single : Histereza_temp = 0.5
  178. Dim Lcd_led As Byte : Lcd_led = 1
  179. Dim Lcd_czas As Byte : Lcd_czas = 120
  180. Dim Dzwiek As Byte : Dzwiek = 1
  181. Dim Dzwiek_klawisz As Byte : Dzwiek_klawisz = 1
  182. Dim Dzwiek_alarm As Byte : Dzwiek_alarm = 1
  183. Dim Wifi_siec As String * 16 : Wifi_siec = "siecWIFIwifiSIEC"
  184. Dim Wifi_haslo As String * 16 : Wifi_haslo = "0123456789012345"
  185. Dim Serwer As Byte : Serwer = 3
  186. Dim Ip_1 As Byte : Ip_1 = 192
  187. Dim Ip_2 As Byte : Ip_2 = 168
  188. Dim Ip_3 As Byte : Ip_3 = 92
  189. Dim Ip_4 As Byte : Ip_4 = 68
  190. Dim Serwer_haslo As String * 16 : Serwer_haslo = "a1b2c3d4e5f6g7h8"
  191.  
  192. Do
  193.  
  194.    If Tifr0.ocf0a = 1 Then                                  '-[ co 10ms ]-
  195.     Tifr0.ocf0a = 1
  196.  
  197.       Key = Read_keypad()
  198.  
  199.       If Key <> 0 Then
  200.          Select Case Key
  201.  
  202.           Case Sw_prawo
  203.            If Menu_flag = 1 Then
  204.             Select Case Menu_pos
  205.              Case 0
  206.               Incr Menu_topic : If Menu_topic > 9 Then Menu_topic = 9
  207.               New_page = 1
  208.              Case 1
  209.               Incr Podmenu_topic : If Podmenu_topic > 9 Then Podmenu_topic = 9
  210.               New_page = 1
  211.              Case 2
  212.               Incr Podmenu_topic : If Podmenu_topic > 5 Then Podmenu_topic = 5
  213.               New_page = 1
  214.              Case 3
  215.               Incr Podmenu_topic : If Podmenu_topic > 4 Then Podmenu_topic = 4
  216.               New_page = 1
  217.              Case 4
  218.               Incr Podmenu_topic : If Podmenu_topic > 4 Then Podmenu_topic = 4
  219.               New_page = 1
  220.              Case 5
  221.               Incr Podmenu_topic : If Podmenu_topic > 5 Then Podmenu_topic = 5
  222.               New_page = 1
  223.              Case 6
  224.               Incr Podmenu_topic : If Podmenu_topic > 4 Then Podmenu_topic = 4
  225.               New_page = 1
  226.              Case 7
  227.               Incr Podmenu_topic : If Podmenu_topic > 5 Then Podmenu_topic = 5
  228.               New_page = 1
  229.             End Select
  230.  
  231.            End If
  232.  
  233.           Case Sw_gora
  234.            If Menu_flag = 1 Then
  235.              Select Case Menu_pos
  236.               Case 1
  237.                Twoje_ph = Twoje_ph + 0.01
  238.                If Twoje_ph > 9.99 Then Twoje_ph = 9.99
  239.               Case 2
  240.                Wymagane_ph = Wymagane_ph + 0.01
  241.                If Twoje_ph > 9.99 Then Twoje_ph = 9.99
  242.               Case 3
  243.                Histereza_ph = Histereza_ph + 0.01
  244.                If Twoje_ph > 1.99 Then Twoje_ph = 1.99
  245.               Case 4
  246.                Ph_buf_4 = Ph_buf_4 + 0.01
  247.                If Twoje_ph > 4.50 Then Twoje_ph = 4.50
  248.               Case 5
  249.                Ph_buf_7 = Ph_buf_7 + 0.01
  250.                If Twoje_ph > 7.50 Then Twoje_ph = 7.50
  251.              End Select
  252.            End If
  253.  
  254.           Case Sw_dol
  255.            If Menu_flag = 1 Then
  256.              Select Case Menu_pos
  257.               Case 1
  258.                Twoje_ph = Twoje_ph - 0.01
  259.                If Twoje_ph < 3.99 Then Twoje_ph = 3.99
  260.               Case 2
  261.                Wymagane_ph = Wymagane_ph - 0.01
  262.                If Twoje_ph < 3.99 Then Twoje_ph = 3.99
  263.               Case 3
  264.                Histereza_ph = Histereza_ph - 0.01
  265.                If Twoje_ph < 0.01 Then Twoje_ph = 0.01
  266.               Case 4
  267.                Ph_buf_4 = Ph_buf_4 + 0.01
  268.                If Twoje_ph < 3.50 Then Twoje_ph = 3.50
  269.               Case 5
  270.                Ph_buf_7 = Ph_buf_7 - 0.01
  271.                If Twoje_ph < 6.50 Then Twoje_ph = 6.50
  272.              End Select
  273.            End If
  274.  
  275.           Case Sw_lewo
  276.            If Menu_flag = 1 Then
  277.              Select Case Menu_pos
  278.               Case 0
  279.                Decr Menu_topic : If Menu_topic < 1 Then Menu_topic = 1
  280.                New_page = 1
  281.               Case 1
  282.                Decr Podmenu_topic : If Podmenu_topic < 1 Then Podmenu_topic = 1
  283.                New_page = 1
  284.               Case 2
  285.                Decr Podmenu_topic : If Podmenu_topic < 1 Then Podmenu_topic = 1
  286.                New_page = 1
  287.               Case 3
  288.                Decr Podmenu_topic : If Podmenu_topic < 1 Then Podmenu_topic = 1
  289.                New_page = 1
  290.               Case 4
  291.                Decr Podmenu_topic : If Podmenu_topic < 1 Then Podmenu_topic = 1
  292.                New_page = 1
  293.               Case 5
  294.                Decr Podmenu_topic : If Podmenu_topic < 1 Then Podmenu_topic = 1
  295.                New_page = 1
  296.               Case 6
  297.                Decr Podmenu_topic : If Podmenu_topic < 1 Then Podmenu_topic = 1
  298.                New_page = 1
  299.               Case 7
  300.                Decr Podmenu_topic : If Podmenu_topic < 1 Then Podmenu_topic = 1
  301.                New_page = 1
  302.              End Select
  303.            End If
  304.  
  305.           Case Sw_select                                    'klawisz wyboru/zatwierdzania
  306.            'zawsze nowa plansza
  307.            New_page = 1
  308.            If Menu_flag = 0 Then
  309.             Menu_flag = 1
  310.             Menu_topic = 1
  311.  
  312.            Else                                             'jestesmy w menu
  313.             Select Case Menu_pos
  314.  
  315.              Case 0
  316.               Select Case Menu_topic
  317.                Case 1 To 8 : Menu_pos = Menu_topic
  318.                Case 9 : Menu_flag = 0
  319.               End Select
  320.  
  321.              Case 1
  322.               Select Case Podmenu_topic
  323.                Case 1 To 8 : Call Policz_menu()             'idź->11,12,13
  324.                Case 9
  325.                 Menu_pos = 0                                'powrót do menu gł.
  326.                 Podmenu_topic = 1
  327.               End Select
  328.  
  329.              Case 2
  330.               Select Case Podmenu_topic
  331.                Case 1 To 4 : Call Policz_menu()             'idź->21,22,23
  332.                Case 5
  333.                 Menu_pos = 0                                'powrót do menu gł.
  334.                 Podmenu_topic = 1
  335.               End Select
  336.  
  337.              Case 3
  338.               Select Case Podmenu_topic
  339.                Case 1 To 3 : Call Policz_menu()             'idź->31,32,33
  340.                Case 4
  341.                 Menu_pos = 0                                'powrót do menu gł.
  342.                 Podmenu_topic = 1
  343.               End Select
  344.  
  345.              Case 4
  346.               Select Case Podmenu_topic
  347.                Case 1 To 3 : Call Policz_menu()             'idź->31,32,33
  348.                Case 4
  349.                 Menu_pos = 0                                'powrót do menu gł.
  350.                 Podmenu_topic = 1
  351.               End Select
  352.  
  353.              Case 5
  354.               Select Case Podmenu_topic
  355.                Case 1 To 4 : Call Policz_menu()             'idź->31,32,33
  356.                Case 5
  357.                 Menu_pos = 0                                'powrót do menu gł.
  358.                 Podmenu_topic = 1
  359.               End Select
  360.  
  361.              Case 6
  362.               Select Case Podmenu_topic
  363.                Case 1 To 3 : Call Policz_menu()             'idź->31,32,33
  364.                Case 4
  365.                 Menu_pos = 0                                'powrót do menu gł.
  366.                 Podmenu_topic = 1 .
  367.               End Select
  368.  
  369.              Case 7
  370.               Select Case Podmenu_topic
  371.                Case 1 To 4 : Call Policz_menu()             'idź->31,32,33
  372.                Case 5
  373.                 Menu_pos = 0                                'powrót do menu gł.
  374.                 Podmenu_topic = 1
  375.               End Select
  376.  
  377.             End Select
  378.  
  379.            End If
  380.  
  381.          End Select
  382.  
  383.        Refresh = 1                                          'zawsze od razu odświez po przycisku
  384.       End If
  385.  
  386.       If 100ms < 9 Then
  387.        Incr 100ms
  388.       Else                                                  '-[ co 100ms ]-
  389.        100ms = 0
  390.  
  391.          If 1s < 9 Then
  392.           Incr 1s
  393.          Else                                               '-[ co 1s ]-
  394.           1s = 0
  395.  
  396.           Incr Seconds                                      'niezaleznie od tego czy jesteśmy w Menu program się wykonuje
  397.  
  398.           Refresh = 1
  399.           Toggle Led
  400.  
  401.          End If
  402.  
  403.       End If
  404.  
  405.    End If
  406.  
  407.  
  408.    If Refresh = 1 Then
  409.  
  410.  
  411.      If New_page = 1 Then                                   'to wyswietla się tylko raz
  412.       New_page = 0 : Cls
  413.       If Menu_flag = 0 Then
  414.        Lcd "Czas:"
  415.  
  416.       Else
  417.        Select Case Menu_pos
  418.         'menu
  419.         Case 0
  420.          Locate 1 , 1
  421.            Select Case Menu_topic
  422.             Case 1 : Lcd "     Opcje      "
  423.             Case 2 : Lcd "    Stezenie    "
  424.             Case 3 : Lcd "  Temperatura   "
  425.             Case 4 : Lcd "  Wyswietlacz   "
  426.             Case 5 : Lcd "     Dzwiek     "
  427.             Case 6 : Lcd "      Siec      "
  428.             Case 7 : Lcd "     Serwer     "
  429.             Case 8 : Lcd "  Konfiguracja  "
  430.             Case 9 : Lcd "    Wyjscie     "
  431.            End Select
  432.          Locate 2 , 1
  433.            Select Case Menu_topic
  434.             Case 1 : Lcd "      pH        "
  435.             Case 2 : Lcd "      CO" ; Chr(2) ; "       "
  436.             Case 3 : Lcd "                "
  437.             Case 4 : Lcd "      LCD       "
  438.             Case 5 : Lcd "                "
  439.             Case 6 : Lcd "      WiFi      "
  440.             Case 7 : Lcd "     danych     "
  441.             Case 8 : Lcd "    domyslna    "
  442.             Case 9 : Lcd "    z menu      "
  443.            End Select
  444.         'pH
  445.         Case 1
  446.           Locate 1 , 1
  447.            Select Case Podmenu_topic
  448.             Case 1 : Lcd "    Twoje pH    "
  449.             Case 2 : Lcd "  Wymagane pH   "
  450.             Case 3 : Lcd "  Histereza pH  "
  451.             Case 4 : Lcd "Roztwor buforowy"
  452.             Case 5 : Lcd "Roztwor buforowy"
  453.             Case 6 : Lcd "   Kalibracja   "
  454.             Case 7 : Lcd "   Kalibracja   "
  455.             Case 8 : Lcd "     Zapisz     "
  456.             Case 9 : Lcd "   Powrot do    "
  457.            End Select
  458.           Locate 2 , 1
  459.            Select Case Podmenu_topic
  460.             'Case 1 : Lcd "      " ; Fusing(twoje_ph , "#.##") ; "      "       'krok 0.01, zakres 4.99-9.99
  461.             'Case 2 : Lcd "      " ; Fusing(wymagane_ph , "#.##") ; "      "       'krok 0.01, zakres 4.99-9.99
  462.             'Case 3 : Lcd "      " ; Fusing(histereza_ph , "#.##") ; "      "       'krok 0.01, zakres 0.01-0.99
  463.             'Case 4 : Lcd "  pH 4 = " ; Fusing(ph_buf_4 , "#.##") ; "   "       'krok 0.01, zakres 3.50-4.50
  464.             'Case 5 : Lcd "  pH 7 = " ; Fusing(ph_buf_7 , "#.##") ; "   "       'krok 0.01, zakres 6.50-7.50
  465.             Case 6 : Lcd "   sondy pH 4   "                 'przejdz do programu kalibracja pH4
  466.             Case 7 : Lcd "   sondy pH 7   "                 'przejdz do programu kalibracja pH7
  467.             Case 8 : Lcd "   ustawienia   "
  468.             Case 9 : Lcd "      menu      "
  469.            End Select
  470.         'CO2
  471.         Case 2
  472.           Locate 1 , 1
  473.            Select Case Podmenu_topic
  474.             Case 1 : Lcd " Twardosc wody  "
  475.             Case 2 : Lcd "  Stezenie CO" ; Chr(2) ; "  "
  476.             Case 3 : Lcd "  Stezenie CO" ; Chr(2) ; "  "
  477.             Case 4 : Lcd "     Zapisz     "
  478.             Case 5 : Lcd "   Powrot do    "
  479.            End Select
  480.           Locate 2 , 1
  481.            Select Case Podmenu_topic
  482.             Case 1 : Lcd " TWW(KH) " ; Fusing(kh , "#.##") ; Chr(0) ; "n "       'krok 0.5, zakres 00.0-99.5
  483.             Case 2 : Lcd "  min " ; Fusing(kh_co2_min , "#.##") ; "ppm  "       'krok 0.1, zakres 00.1-99.9
  484.             Case 3 : Lcd "  max " ; Fusing(kh_co2_max , "#.##") ; "ppm  "       'krok 0.1, zakres 00.1-99.9
  485.             Case 4 : Lcd "   ustawienia   "
  486.             Case 5 : Lcd "      menu      "
  487.            End Select
  488.         'temperatura
  489.         Case 3
  490.           Locate 1 , 1
  491.            Select Case Podmenu_topic
  492.             Case 1 : Lcd "  Temperatura   "
  493.             Case 2 : Lcd "   Histereza    "
  494.             Case 3 : Lcd "     Zapisz     "
  495.             Case 4 : Lcd "   Powrot do    "
  496.            End Select
  497.           Locate 2 , 1
  498.            Select Case Podmenu_topic
  499.             Case 1 : Lcd "wymagana " ; Fusing(wymagana_temp , "#.##") ; Chr(0) ; "C "       'krok 0.1, zakres 20.0-35.0
  500.             Case 2 : Lcd "  temp. " ; Fusing(histereza_temp , "#.##") ; Chr(0) ; "C   "       'krok 0.1, zakres 0.10-9.90
  501.             Case 3 : Lcd "   ustawienia   "
  502.             Case 4 : Lcd "      menu      "
  503.            End Select
  504.         'wyswietlacz
  505.         Case 4
  506.           Locate 1 , 1
  507.            Select Case Podmenu_topic
  508.             Case 1 : Lcd " Podswietlanie  "
  509.             Case 2 : Lcd " Podswietlenie  "
  510.             Case 3 : Lcd "     Zapisz     "
  511.             Case 4 : Lcd "   Powrot do    "
  512.            End Select
  513.           Locate 2 , 1
  514.            Select Case Podmenu_topic
  515.             Case 1
  516.              If Lcd_led = 1 Then
  517.               Lcd "    LCD TAK     "                        'podświetlenie włączone
  518.              Elseif Lcd_led = 2 Then
  519.               Lcd "    LCD NIE     "                        'podświetlenie wyłączone
  520.              Elseif Lcd_led = 3 Then
  521.               Lcd "    LCD AUTO    "                        'auto-wygaszanie podświetlenia
  522.              End If
  523.             Case 2 : Lcd "   czas " ; Lcd_czas ; "s    "    'krok 1, zakres 1-240
  524.             Case 3 : Lcd "   ustawienia   "
  525.             Case 4 : Lcd "      menu      "
  526.            End Select
  527.         'dzwiek
  528.         Case 5
  529.           Locate 1 , 1
  530.            Select Case Podmenu_topic
  531.             Case 1 : Lcd "Dzwiek klawiszy "
  532.             Case 2 : Lcd " Dzwiek alarmu  "
  533.             Case 3 : Lcd "Wylacz wszytkie "
  534.             Case 4 : Lcd "     Zapisz     "
  535.             Case 5 : Lcd "   Powrot do    "
  536.            End Select
  537.           Locate 2 , 1
  538.            Select Case Podmenu_topic
  539.             Case 1
  540.              If Dzwiek_klawisz = 1 Then
  541.               Lcd "      TAK       "
  542.              Else
  543.               Lcd "      NIE       "
  544.              End If
  545.             Case 2
  546.              If Dzwiek_alarm = 1 Then
  547.               Lcd "      TAK       "
  548.              Else
  549.               Lcd "      NIE       "
  550.              End If
  551.             Case 3
  552.              If Dzwiek_alarm = 1 Then
  553.               Lcd "      TAK       "
  554.              Else
  555.               Lcd "      NIE       "
  556.               Dzwiek_klawisz = 0
  557.               Dzwiek_alarm = 0
  558.              End If
  559.             Case 4 : Lcd "   ustawienia   "
  560.             Case 5 : Lcd "      menu      "
  561.            End Select
  562.         'siec
  563.         Case 6
  564.           Locate 1 , 1
  565.            Select Case Podmenu_topic
  566.             Case 1 : Lcd "      SSID      "
  567.             Case 2 : Lcd "     Haslo      "
  568.             Case 3 : Lcd "     Zapisz     "
  569.             Case 4 : Lcd "   Powrot do    "
  570.            End Select
  571.           Locate 2 , 1
  572.            Select Case Podmenu_topic
  573.             Case 1 : Lcd Wifi_siec                          'mruganie ustawianej wartosci - zakres znaków ASCII 32-126
  574.             Case 2 : Lcd Wifi_haslo                         'mruganie ustawianej wartosci - zakres znaków ASCII 32-126
  575.             Case 3 : Lcd "   ustawienia   "
  576.             Case 4 : Lcd "      menu      "
  577.            End Select
  578.          'serwer
  579.          Case 7
  580.           Locate 1 , 1
  581.            Select Case Podmenu_topic
  582.             Case 1 : Lcd "     Serwer     "
  583.             Case 2 : Lcd "   Serwer IP    "
  584.             Case 3 : Lcd "Haslo/klucz API "
  585.             Case 4 : Lcd "     Zapisz     "
  586.             Case 5 : Lcd "   Powrot do    "
  587.            End Select
  588.           Locate 2 , 1
  589.            Select Case Podmenu_topic
  590.             Case 1
  591.              If Serwer = 1 Then
  592.               Lcd "    NetTemp     "
  593.              Elseif Serwer = 2 Then
  594.               Lcd "    Domoticz    "
  595.              Elseif Serwer = 3 Then
  596.               Lcd "   ThingSpeak   "
  597.              End If
  598.             Case 2 : Lcd " " ; Ip_1 ; "." ; Ip_2 ; "." ; Ip_3 ; "." ; Ip_4 ; "        "       'mruganie ustawianego czlonu IP - zakres 0-255
  599.             Case 3 : Lcd Serwer_haslo ; "            "      'mruganie ustawianej wartosci - zakres znaków ASCI 32-127
  600.             Case 4 : Lcd "   ustawienia   "
  601.             Case 5 : Lcd "      menu      "
  602.            End Select
  603.        End Select
  604.       End If
  605.      End If
  606.  
  607.      If Menu_flag = 0 Then                                  'to wyświetla sie co sekundę lub przy zmianie wartości
  608.       Locate 1 , 6 : Lcd Seconds
  609.      Else
  610.  
  611.         Select Case Menu_pos
  612.          Case 1
  613.           Locate 2 , 1 : Lcd "      " ; Fusing(twoje_ph , "#.##") ; "      "
  614.          Case 2
  615.           Locate 2 , 1 : Lcd "      " ; Fusing(wymagane_ph , "#.##") ; "      "
  616.          Case 3
  617.           Locate 2 , 1 : Lcd "      " ; Fusing(histereza_ph , "#.##") ; "      "
  618.          Case 4
  619.           Locate 2 , 1 : Lcd "  pH 4 = " ; Fusing(ph_buf_4 , "#.##") ; "   "
  620.          Case 5
  621.           Locate 2 , 1 : Lcd "  pH 7 = " ; Fusing(ph_buf_7 , "#.##") ; "   "
  622. '         Case 12 : Show_var
  623. '         Case 13 : Show_var
  624. '         Case 14 : Show_var
  625. '         Case 15 : Show_var
  626. '         Case 16 : Show_var
  627. '         Case 17 : Show_var
  628. '         Case 21 : Show_var
  629. '         Case 22 : Show_var
  630. '         Case 23 : Show_var
  631. '         Case 31 : Show_var
  632. '         Case 32 : Show_var
  633. '         Case 33 : Show_var
  634.  
  635.         End Select
  636.      End If
  637.  
  638.     Refresh = 0
  639.    End If
  640.  
  641.  Key = 0
  642. Loop
  643. End
  644.  
  645.  
  646. 'klawiatura by BARTek na potrzeby testów
  647. '---------------------------------------------
  648. Prawo_sub:
  649.  New_key = Sw_prawo
  650. Return
  651. Gora_sub:
  652.  New_key = Sw_gora
  653. Return
  654. Dol_sub:
  655.  New_key = Sw_dol
  656. Return
  657. Lewo_sub:
  658.  New_key = Sw_lewo
  659. Return
  660. Select_sub:
  661.  New_key = Sw_select
  662. Return
  663. '---------------------------------------------
Menu które mi pokazałeś wcześniej działa, ale chciałbym je troszkę zmienić. Chciałbym aby to działało tak:
1. ekran główny
- klikam select to wchodzę do menu
2. ekran menu
- klikam prawo/lewo przemieszczam się po menu
- aby wejść do któregoś podmenu klikam select
- gdy dojdę do końca listy menu to mam opcję "wyjdź z menu"
3. ekran podmenu
- klikam prawo/lewo przemieszczam się po menu
- aby zmienić wybraną wartość klikam góra/dól
- gdy dojdę do końca listy menu to mam opcję "powrót do menu"
DO TEGO MIEJSCA JEST OK - zrobione
Nie wiem jak zmieniać wartości (góra/dół) wybranego podmenu :(
Awatar użytkownika
niveasoft
Posty: 1239
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: niveasoft » 06 cze 2019, 17:36

Żebyś tak wszystkiego na tacy nie dostał, a przy okazji czegoś się nauczył to pokażę jak ja do takich zagadnień podchodzę.
Ewidentnie wyświetlasz, nie te dane w nie tych miejscach a o synchronizacji danych z przyciskami nie wspomnę :P

Jak się gubisz to dodajesz sobie w kodzie jedną stałą (nazwa dowolna) np. Const Cdbg = 1
Potem piszesz kod warunkowy który sie skompiluje tylko wtedy kiedy ta stała ma wartość 1. Czyli jak na końcu zmienisz na 0 to to sie samo usunie z kodu.
Tutaj, pod koniec kodu , tam gdzie wyświetla co sekundę, dodałem sobie coś takiego:
  1.      #if Cdbg = 1
  2.       Locate 1 , 15 : If Menu_pos < 10 Then Lcd " " : Lcd Menu_pos
  3.       Locate 2 , 15 : If Podmenu_topic < 10 Then Lcd " " : Lcd Podmenu_topic
  4.      #endif
Oczywiście coś podobnego można wywalić na terminal.
To pokazuje na wyświetlaczu w którym akurat menu jesteś i w którym podmenu. To pozwala zsynchronizować to co akurat wyświetlasz jako zmienne "do zmiany" i nimi sterować klawiszami UP/DN.
Może to Tobie pomoże ;) Podobno mądrej głowie dość po słowie :D
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: pimowo » 06 cze 2019, 21:06

Dzięki za wskazówkę, będę próbował dalej, może się uda - jak się nie uda, to zrobię menu bez podmenu ;)
Awatar użytkownika
Pikczu
Posty: 392
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: Pikczu » 06 cze 2019, 22:06

Możesz użyć też mojego ulubionego DEBUG
Piszesz debug on na początku softu.
W kodzie debug działa jak print wywala wszytko co jest po debug na port szeregowy.
A jak skończysz zabawę to zmieniasz na początku kodu debug na off.
Efekt podobny jak z # IF (ale nie identyczny)
ODPOWIEDZ