Pomiar pH wody - budowa sterownika do akwarium

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
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 » 01 cze 2019, 23:49

Zdecydowanie celest-case to jedna z najlepszych metod.
czekaj sprawdzę to w symulatorze.
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: pimowo » 02 cze 2019, 0:05

Dzięki @Pikczu ;)

Tak teraz sobie przypomniałem, że gdzieś w domu mam moduł ADS1015 - może dałoby się go użyć do tego miesięcznego pomiaru pH?
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 » 02 cze 2019, 0:33

Słaby postęp mam na razie próbuje zrozumieć co autor miał na myśli :lol:
Ale dam rade :)
______________________edit_______________
Ok kumam o co biega zmienię co nieco ale dopiero rano bo już czas iść spać.
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 » 02 cze 2019, 18:04

Pimowo jaki jest schemat tej klawiatury?
Właśnie do tego siadam i schemat by mi ciut pomógł.
Awatar użytkownika
niveasoft
Posty: 1239
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: niveasoft » 02 cze 2019, 18:12

Pisał że to LCDshield więc pewnie klawiatura drabinkowa na ADC(0) "lewo, prawo, góra, dół i select"
viewtopic.php?f=13&t=138

Funkcja czytająca zwraca takie wartości do zmiennej Key:
Const Sw_r = 1
Const Sw_u = 2
Const Sw_d = 3
Const Sw_l = 4
Const Sw_s = 5
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Pomiar pH wody - budowa sterownika do akwarium

Post autor: pimowo » 02 cze 2019, 18:20

@niveasoft już dał linka (szybki jak błyskawica) to jest dokładnie ten kod który sobie użyczyłem ;)

TU jest schemat elektryczny.

Klawiatura działa jak najbardziej OK, mi chodzi tylko (i aż) jak zbudować kilka poziomów menu - to co pokazałem wcześniej prawie działa, ale nie wiem dlaczego nie chce działać jak należy :(
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 » 02 cze 2019, 18:38

Aha kumam ona jest podciągnięta to +5V jeśli nic nie wciśnięte.
OK zobaczę może coś wymyślę.
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 » 02 cze 2019, 23:43

Coś tam skrobnąłem ale tylko jeden poziom.
Można to zrobić na CALL ale w tedy każde głębsze wejście w menu będzie odkładało na stos aż w końcu program się wysypie.
Można tez zrobić na GOTO jako label , wtedy nie będziemy odkładać na stos za każdym razem.
Kod robi się spory w szybkim tempie.
Nie miałem zbyt wiele czasu wiec wklejam co jest. :oops:
Prosze mnie nie wyszydzic :oops: :oops:
pimowo_PH.rar
projekt w protesuie 8.8 ale wysypuje sie co jakies 30s
  1. '$sim
  2. $regfile = "m328pdef.dat"
  3. $crystal = 16000000
  4. $hwstack = 64
  5. $swstack = 32
  6. $framesize = 128
  7. debug on
  8.  
  9. Config Submode = New
  10.  
  11. Config Timer0 = Timer , Prescale = 1024 , Clear_timer = 1 : Compare0a = 155       '10ms @16MHz
  12.  
  13. Config Adc = Single , Prescaler = Auto , Reference = Avcc
  14.  
  15. ''Config Scl = Portc.5
  16. 'Config Sda = Portc.4
  17. 'I2cinit : Config Twi = 100000
  18.  
  19. '$lib "bl_Lcd_i2c.lib"
  20. Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
  21.  
  22.  
  23. Config Lcd = 16x2
  24. 'Const Pcf_d4 = 4
  25. 'Const Pcf_d5 = 5
  26. 'Const Pcf_d6 = 6
  27. 'Const Pcf_d7 = 7
  28. 'Const Pcf_rs = 0
  29. 'Const Pcf_rw = 1
  30. 'Const Pcf_e1 = 2
  31.  
  32. 'Dim _lcd_e As Byte
  33. 'Dim Backlight As Byte
  34. 'Backlight_on Alias &H08
  35. 'Backlight_off Alias &H00
  36. 'Backlight = Backlight_on
  37. '_lcd_e = 128
  38. 'Const Pcf8574_lcd = &H4E
  39.  
  40. Waitms 100 : Cls
  41.  
  42. Dim Tryb As Byte
  43. 'Dim Menu_1 As Byte , Menu_2 As Byte , Menu_3 As Byte
  44. Dim X1 As Byte , X2 As Byte , X3 As Byte , X4 As Byte
  45.  
  46. Const Sw_prawo = 1
  47. Const Sw_gora = 2
  48. Const Sw_dol = 3
  49. Const Sw_lewo = 4
  50. Const Sw_select = 5
  51.  
  52. dim flaga_pokaz as byte
  53. flaga_pokaz = 0
  54. dim poziom as byte
  55. poziom = 0
  56.  
  57. Dim wyjdz as word
  58.  
  59. Dim Old_key As Byte , Key_cnt As Byte , Key As Byte
  60. dim Adc_read_key As Word , Read_key As Byte , Key_val As Byte       'przeniesc na globalne!
  61.  
  62. Function Read_keypad() As Byte
  63.  
  64.     '---   function with autorepeat
  65.  
  66.    'Local Adc_read_key As Word , Read_key As Byte , Key_val As Byte
  67.  
  68.    Adc_read_key = Getadc(0)
  69.    debug "ADC= " ; ADC_read_key
  70.    Select Case Adc_read_key
  71.  
  72.       Case 0 To 100 : Read_key = Sw_prawo                   '1                    'right = 0
  73.          debug "prawo"
  74.       Case 101 To 250 : Read_key = Sw_gora                  '2                    'up = 145
  75.          debug "gora"
  76.       Case 251 To 400 : Read_key = Sw_dol                   '3                    'dwn = 330
  77.          debug "case dol"
  78.       Case 401 To 600 : Read_key = Sw_lewo                  '4                 'left = 506
  79.          debug "case lewo"
  80.       Case 601 To 850 : Read_key = SW_select                '5                 'select = 743
  81.          Debug "case select"
  82.       Case Is > 851 : Read_key = 0                          'no key = 1023
  83.  
  84.    End Select
  85.  
  86.    If Read_key <> 0 Then
  87.  
  88.       If Old_key = Read_key Then
  89.  
  90.          If Key_cnt < 20 Then                               'zmienione dla testu
  91.  
  92.             Incr Key_cnt
  93.             Key_val = 0
  94.  
  95.          Else
  96.  
  97.             Key_cnt = 0
  98.             Key_val = Read_key
  99.  
  100.          End If
  101.  
  102.       End If
  103.  
  104.    Else
  105.  
  106.       Key_cnt = 15
  107.       Key_val = 0
  108.  
  109.    End If
  110.  
  111.    Old_key = Read_key
  112.    Read_keypad = Key_val
  113.  
  114. End Function
  115.  
  116. sub normalny()
  117.    Locate 1 , 1 : Lcd "normalny        "
  118.    Locate 2 , 1 : Lcd "ekran           "
  119.  
  120.    X1 = 1
  121.    X2 = 1
  122.    X3 = 1
  123.    X4 = 1
  124. end sub
  125.  
  126.  
  127.  
  128. Enable Interrupts
  129.  
  130. sub menu_gowne()
  131.    Locate 1 , 1 : Lcd "0.0.0           "
  132.    Locate 2 , 1 : Lcd "menu            "
  133.  
  134.  
  135.    do
  136.       Key = Read_keypad()
  137.       if key = Sw_prawo then
  138.  
  139.          Debug "wcisniety w prawo"
  140.          incr poziom
  141.         flaga_pokaz = 0
  142.       end if
  143.  
  144.       if key = sw_lewo then
  145.          Debug "wcisniety w lewo"
  146.          decr poziom
  147.        flaga_pokaz = 0
  148.       end if
  149.  
  150.       if poziom > 10 then poziom = 1
  151.       debug "poziom" ; poziom
  152.  
  153.       select case poziom                                    '
  154.  
  155.          'case 0 nie istnieje
  156.  
  157.          case 1:
  158.             if flaga_pokaz = 0 then
  159.             Locate 1 , 1 : Lcd "1.0.0           "
  160.             Locate 2 , 1 : Lcd "select -->      "
  161.             end if
  162.             flaga_pokaz = 1
  163.             if key = Sw_select then
  164.                goto menu_1
  165.             end if
  166.  
  167.  
  168.  
  169.          case 2:
  170.          if flaga_pokaz = 0 then
  171.             Locate 1 , 1 : Lcd "2.0.0           "
  172.             Locate 2 , 1 : Lcd "select -->      "
  173.             end if
  174.             flaga_pokaz = 1
  175.             if key = Sw_select then
  176.                goto menu_2
  177.             end if
  178.  
  179.  
  180.          case 3:
  181.          if flaga_pokaz = 0 then
  182.             Locate 1 , 1 : Lcd "3.0.0           "
  183.             Locate 2 , 1 : Lcd "select -->      "
  184.             end if
  185.             flaga_pokaz = 1
  186.          if key = Sw_select then
  187.                goto menu_3
  188.             end if
  189.  
  190.          case 4:
  191.            if flaga_pokaz = 0 then
  192.             Locate 1 , 1 : Lcd "4.0.0           "
  193.             Locate 2 , 1 : Lcd "select -->      "
  194.             end if
  195.             flaga_pokaz = 1
  196.          if key = Sw_select then
  197.                goto menu_4
  198.             end if
  199.  
  200.  
  201.          case 5:
  202.             if flaga_pokaz = 0 then
  203.             Locate 1 , 1 : Lcd "5.0.0           "
  204.             Locate 2 , 1 : Lcd "select -->      "
  205.             end if
  206.             flaga_pokaz = 1
  207.          if key = Sw_select then
  208.                goto menu_5
  209.             end if
  210.  
  211.  
  212.          case 6:
  213.            if flaga_pokaz = 0 then
  214.             Locate 1 , 1 : Lcd "6.0.0           "
  215.             Locate 2 , 1 : Lcd "select -->      "
  216.             end if
  217.           flaga_pokaz = 1
  218.          if key = Sw_select then
  219.                goto menu_6
  220.             end if
  221.  
  222.          case 7:
  223.            if flaga_pokaz = 0 then
  224.             Locate 1 , 1 : Lcd "7.0.0           "
  225.             Locate 2 , 1 : Lcd "select -->      "
  226.              end if
  227.           flaga_pokaz = 1
  228.  
  229.          if key = Sw_select then
  230.                goto menu_7
  231.             end if
  232.  
  233.          case 8:
  234.            if flaga_pokaz = 0 then
  235.             Locate 1 , 1 : Lcd "8.0.0           "
  236.             Locate 2 , 1 : Lcd "select -->      "
  237.             end if
  238.           flaga_pokaz = 1
  239.          if key = Sw_select then
  240.                goto menu_8
  241.             end if
  242.  
  243.  
  244.          case 9:
  245.             if flaga_pokaz = 0 then
  246.             Locate 1 , 1 : Lcd "9.0.0           "
  247.             Locate 2 , 1 : Lcd "select -->      "
  248.             end if
  249.            flaga_pokaz = 1
  250.          if key = Sw_select then
  251.                goto menu_9
  252.             end if
  253.  
  254.             case10:
  255.             if flaga_pokaz = 0 then
  256.            Locate 1 , 1 : Lcd "10.0.0           "
  257.             Locate 2 , 1 : Lcd "select -->      "
  258.            end if
  259.            flaga_pokaz = 1
  260.            if key = Sw_select then
  261.                goto menu_10
  262.             end if
  263.  
  264.  
  265.  
  266.          case else:
  267.             'exit do
  268.  
  269.       end select
  270.  
  271.       incr wyjdz
  272.       'if key = Sw_select then
  273.  
  274.          'exit do
  275.       'end if
  276.  
  277.    loop until wyjdz = 1000
  278.    Poziom = 0
  279.    wyjdz = 0
  280.  
  281. end sub
  282.  
  283.  
  284. Main:
  285.    call normalny
  286.    Poziom = 0
  287.    Do
  288.  
  289.  
  290.    'If Tifr0.ocf0a = 1 Then
  291.  
  292.       'Tifr0.ocf0a = 1
  293.  
  294.       Key = Read_keypad()
  295.  
  296.    'End If
  297.  
  298.       if key = Sw_select then
  299.          call menu_gowne()
  300.          call normalny
  301.       end if
  302.  
  303.  
  304.  
  305.    Loop
  306.  
  307.  
  308.  
  309. menu_1:
  310.    Locate 1 , 1 : Lcd "1.0.0           "
  311.    Locate 2 , 1 : Lcd "menu 1          "
  312.    do
  313.       Key = Read_keypad()
  314.  
  315.  
  316.  
  317.  
  318.       if key = Sw_select then
  319.          exit do
  320.       end if
  321.    loop
  322.    goto main
  323.  
  324. menu_2:
  325.    Locate 1 , 1 : Lcd "2.0.0           "
  326.    Locate 2 , 1 : Lcd "menu 2          "
  327.    do
  328.       Key = Read_keypad()
  329.  
  330.  
  331.  
  332.  
  333.       if key = Sw_select then
  334.          exit do
  335.       end if
  336.    loop
  337.    goto main
  338.  
  339.  
  340. menu_3:
  341.    Locate 1 , 1 : Lcd "3.0.0           "
  342.    Locate 2 , 1 : Lcd "menu 3          "
  343.    do
  344.       Key = Read_keypad()
  345.  
  346.  
  347.  
  348.  
  349.       if key = Sw_select then
  350.          exit do
  351.       end if
  352.    loop
  353.    goto main
  354.  
  355.  
  356. menu_4:
  357.    Locate 1 , 1 : Lcd "4.0.0           "
  358.    Locate 2 , 1 : Lcd "menu 4          "
  359.    do
  360.       Key = Read_keypad()
  361.  
  362.  
  363.  
  364.  
  365.  
  366.       if key = Sw_select then
  367.          exit do
  368.       end if
  369.    loop
  370.    goto main
  371.  
  372. menu_5:
  373.    Locate 1 , 1 : Lcd "5.0.0           "
  374.    Locate 2 , 1 : Lcd "menu 5          "
  375.    do
  376.       Key = Read_keypad()
  377.  
  378.  
  379.  
  380.  
  381.  
  382.       if key = Sw_select then
  383.          exit do
  384.       end if
  385.    loop
  386.    goto main
  387.  
  388. menu_6:
  389.    Locate 1 , 1 : Lcd "6.0.0           "
  390.    Locate 2 , 1 : Lcd "menu 6          "
  391.    do
  392.       Key = Read_keypad()
  393.  
  394.  
  395.  
  396.  
  397.  
  398.       if key = Sw_select then
  399.          exit do
  400.       end if
  401.    loop
  402.    goto main
  403.  
  404. menu_7:
  405.    Locate 1 , 1 : Lcd "7.0.0           "
  406.    Locate 2 , 1 : Lcd "menu 7          "
  407.    do
  408.       Key = Read_keypad()
  409.  
  410.  
  411.  
  412.  
  413.       if key = Sw_select then
  414.          exit do
  415.       end if
  416.    loop
  417.    goto main
  418.  
  419.  
  420. menu_8:
  421.    Locate 1 , 1 : Lcd "8.0.0           "
  422.    Locate 2 , 1 : Lcd "menu 8          "
  423.    do
  424.       Key = Read_keypad()
  425.  
  426.  
  427.  
  428.  
  429.  
  430.       if key = Sw_select then
  431.          exit do
  432.       end if
  433.    loop
  434.    goto main
  435.  
  436. menu_9:
  437.    Locate 1 , 1 : Lcd "9.0.0           "
  438.    Locate 2 , 1 : Lcd "menu 9          "
  439.    do
  440.       Key = Read_keypad()
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.       if key = Sw_select then
  448.          exit do
  449.       end if
  450.    loop
  451.    goto main
  452.  
  453.   menu_10:
  454.    Locate 1 , 1 : Lcd "10.0.0           "
  455.    Locate 2 , 1 : Lcd "menu            "
  456.    do
  457.       Key = Read_keypad()
  458.  
  459.  
  460.  
  461.  
  462.  
  463.       if key = Sw_select then
  464.          exit do
  465.       end if
  466.    loop
  467.    goto main
  468.  
  469.  
  470.  
  471.    End

Przypomniało mi się iż parę lat temu ktoś stworzył program do robienia menu w bascomie oto on:
http://mat.midlight.eu/index.php/Simple ... 11.2017.29
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 » 03 cze 2019, 0:00

Dziękuję za kod, będę walczył ;)
Najgorsze jest to, że dodając parę funkcji do menu to kod strasznie się rozrasta.
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 » 03 cze 2019, 0:15

No dokładnie rośnie strasznie.
Sprawdz czy da sie go otworzyć w proteusie 8.1 ten 8.8 jest niestety zle zrobiony.
Aha teraz zrobiłdm tak:
Naciskasz select wchodzi do do wyświetlania menu.

Przewijasz menu prawo lewo.
Akceptujesz wejście przez naciśnięcie Select.
Wtedy wchodzi do Label np: menu_1
Dodałem licznik zeby sam program wyszedł z menu.
ODPOWIEDZ