Dzień dobry, HC-05

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
sp3ots
Posty: 42
Rejestracja: 08 wrz 2018, 10:26

Dzień dobry, HC-05

Post autor: sp3ots » 08 wrz 2018, 11:57

Witam Panie i Panów !
Mam na imię Stefan, nie znam j. angielskiego, "bawię" się Bascomem AVR (tylko wersja DEMO).

Chciałbym wykonać układ bezprzewodowy do sterowania pompą obiegową podłogówki.

Padło na HC-05.

Szukałem w internecie polskiego opisu/schematu HC-05 jak połączyć z AVRem zasilanym z 5 woltów.
Nic konkretnego nie znalazłem.

W tej chwili jestem na etapie prawidłowej łączności przewodowej ( TX - ATtiny2313, RX-ATmega8A ).
Mogę sterować LEDem w odbiorniku ON/OFF.

W łączności bezprzewodowej konieczne jest potwierdzenie odbioru sygnału, nie wiem jak to zrobić.
Program nadajnika:
  1.  
  2. $regfile = "attiny2313.dat"
  3. $crystal = 12000000
  4. '$prog &HFF , &HEE , &HDF , &H00
  5. $hwstack = 40
  6. $swstack = 16
  7. $framesize = 32
  8. $baud = 9600
  9. Dim A As Byte
  10.  
  11. Config Pinb.0 = Input
  12. Wej_0 Alias Pinb.0
  13. Portb.0 = 1
  14.  
  15. Config Pinb.1 = Input
  16. Wej_1 Alias Pinb.1
  17. Portb.1 = 1
  18.  
  19. Config Pind.6 = Output
  20. Led Alias Portd.6
  21.  
  22. Do
  23. If Wej_0 = 0 Then
  24. Led = 0
  25. Print 1
  26. Else
  27. Led = 1
  28. End If
  29.  
  30. If Wej_1 = 0 Then
  31. Led = 0
  32. Print 2
  33. Else
  34. Led = 1
  35. End If
  36.  
  37. Loop
  38. End
Program odbiornika:
  1. $regfile = "m8adef.dat"
  2.  
  3. $crystal = 8000000
  4. $hwstack = 40
  5. $swstack = 16
  6. $framesize = 32
  7. $baud = 9600
  8.  
  9. Config Lcd = 16 * 2
  10. Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
  11. Cls
  12. Config Portb.1 = Output
  13. Led_0 Alias Portb.1
  14. Config Portb.2 = Output
  15. Led_1 Alias Portb.2
  16.  
  17. Do
  18.  A = Inkey()                                                'get ascii value from serial port
  19.  
  20. Locate 1 , 10
  21. Lcd A                                                       ' S
  22. Waitms 200
  23.  
  24. If A = 50 Then
  25. Toggle Led_0
  26. Waitms 100
  27. End If
  28.  
  29. If A = 49 Then
  30. Toggle Led_1
  31. Waitms 100
  32. End If
  33.  
  34. Loop
  35. End

Pozdrawiam. Stefan
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Dzień dobry, HC-05

Post autor: niveasoft » 08 wrz 2018, 12:25

Jeśli masz moduł HC-05 przylutowany do takiej niebieskiej płytki i z opisanymi wyjściami szpilek goldpinów to nie musisz nic więcej robić i podpinasz bezpośrednio do AVR`a nawet jak tam pisze "Level 3.3V".
Gorzej jest tylko wtedy jak masz goły moduł taki jak na mojej stronie https://bart-projects.cba.pl/bluetooth.html to sobie doczytasz ;)

Co do programu to da się to napisać w kilka minut tylko Ty co innego napisałeś a co innego masz w programie i tu nie rozumiem.
Piszesz że możesz sterować LED`em ON/OFF a w kodzie widać dwa LED`y w odbiorniku które zmieniają stan po odebraniu wiadomości 1 lub 2.
Za to w nadajniku masz tylko jedną diodę do obydwu przycisków.
Zdecyduj się i napisz dokładniej jak to ma działać.

Czy w pilocie ma być jeden LED i do czego bo w odbiorniku masz dwa wyjścia. Sprecyzuj to się coś pomyśli ;)
sp3ots
Posty: 42
Rejestracja: 08 wrz 2018, 10:26

Re: Dzień dobry, HC-05

Post autor: sp3ots » 08 wrz 2018, 12:37

Witam !
Dziękuję za odpowiedź.

Nie mam jeszcze HC-05, połączone są tina z megą TX-RX.

W programie rzeczywiście są już dwa kanały ( dwa LEDy ).

Nadajnik ma jeszcze dodatkowe pod zespoły, które pominąłem.

LED w nadajniku ma tylko potwierdzać że program i przycisk/przyciski działają.
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Dzień dobry, HC-05

Post autor: niveasoft » 08 wrz 2018, 13:17

Sprawdź czy zadziała ;)
Dodałem drugą diodę w nadajniku dla drugiego kanału. Teraz masz potwierdzenie odbioru. Dioda w nadajniku zapali się tylko jeśli Mega8 odbierze znak i odeśle to co otrzymała.
  1. $regfile = "attiny2313.dat"
  2. $crystal = 12000000
  3. $hwstack = 40
  4. $swstack = 16
  5. $framesize = 32
  6. $baud = 9600
  7.  
  8. Dim A As Byte , Kanal1 As Byte , Kanal2 As Byte
  9.  
  10. Config Pinb.0 = Input : Wej_1 Alias Pinb.0 : Portb.0 = 1
  11. Config Pinb.1 = Input : Wej_2 Alias Pinb.1 : Portb.1 = 1
  12.  
  13. Config Pind.6 = Output : Led1 Alias Portd.6
  14. Config Pinb.2 = Output : Led2 Alias Portb.2
  15.  
  16. Do
  17.  
  18.  If 0 < Ischarwaiting() Then
  19.  
  20.    A = Inkey()
  21.  
  22.    Select Case A
  23.     Case 49 : Set Led1                                       'odebrano 1
  24.     Case 50 : Reset Led1                                     'odebrano 2
  25.     Case 51 : Set Led2                                      'odebrano 3
  26.     Case 52 : Reset Led2                                    'odebrano 4
  27.    End Select
  28.  
  29.  End If
  30.  
  31.  Debounce Wej_1 , 0 , Sw1 , Sub
  32.  Debounce Wej_2 , 0 , Sw2 , Sub
  33.  
  34. Loop
  35. End
  36.  
  37. Sw1:
  38.  If Kanal1 = 0 Then
  39.   Kanal1 = 1
  40.   Print 1
  41.  Else
  42.   Kanal1 = 0
  43.   Print 2
  44.  End If
  45. Return
  46.  
  47. Sw2:
  48.  If Kanal2 = 0 Then
  49.   Kanal2 = 1
  50.   Print 3
  51.  Else
  52.   Kanal2 = 0
  53.   Print 4
  54.  End If
  55. Return
  1. $regfile = "m8adef.dat"
  2. $crystal = 8000000
  3. $hwstack = 40
  4. $swstack = 16
  5. $framesize = 32
  6. $baud = 9600
  7.  
  8. Config Lcd = 16 * 2
  9. Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
  10. Cls
  11.  
  12. Config Portb.1 = Output : Led_1 Alias Portb.1
  13. Config Portb.2 = Output : Led_2 Alias Portb.2
  14.  
  15.  dim a as byte
  16.  
  17. Do
  18.  
  19.  if 0 < ischarwaiting() then
  20.  
  21.   A = Inkey()
  22.  
  23.    Locate 1 , 10  :Lcd A
  24.  
  25.     select case a
  26.      case 49 : set led_1
  27.      case 50 : reset led_1
  28.      case 51 : set led_2
  29.      case 52 : reset led_2
  30.     end select
  31.  
  32.     print a
  33.  
  34.  end if
  35. loop
  36. end
sp3ots
Posty: 42
Rejestracja: 08 wrz 2018, 10:26

Re: Dzień dobry, HC-05

Post autor: sp3ots » 08 wrz 2018, 13:30

Dziękuję.
Połączę na krzyż tinę z megą, zredukuję ko do jednego kanału aby poznać działanie programu.
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Dzień dobry, HC-05

Post autor: niveasoft » 08 wrz 2018, 13:37

Myślę, ze nadajnik można napisać nawet sprytniej. Niech nadaje 1 tylko kiedy LED1 niezapalony i analogicznie wciśnięcie przycisku na zapalonym LED1 będzie wysyłać tylko 2 aż LED1 się zapali ;)
  1. $regfile = "attiny2313.dat"
  2. $crystal = 12000000
  3. $hwstack = 40
  4. $swstack = 16
  5. $framesize = 32
  6. $baud = 9600
  7.  
  8. Dim A As Byte , Helpb as byte
  9.  
  10. Config Pinb.0 = Input : Wej_1 Alias Pinb.0 : Portb.0 = 1
  11. Config Pinb.1 = Input : Wej_2 Alias Pinb.1 : Portb.1 = 1
  12.  
  13. Config Pind.6 = Output : Led1 Alias Portd.6
  14. Config Pinb.2 = Output : Led2 Alias Portb.2
  15.  
  16. Do
  17.  
  18.  If 0 < Ischarwaiting() Then
  19.  
  20.    A = Inkey()
  21.  
  22.    Select Case A
  23.     Case 49 : Set Led1                                       'odebrano 1
  24.     Case 50 : Reset Led1                                     'odebrano 2
  25.     Case 51 : Set Led2                                      'odebrano 3
  26.     Case 52 : Reset Led2                                    'odebrano 4
  27.    End Select
  28.  
  29.  End If
  30.  
  31.  Debounce Wej_1 , 0 , Sw1 , Sub
  32.  Debounce Wej_2 , 0 , Sw2 , Sub
  33.  
  34. Loop
  35. End
  36.  
  37. Sw1:
  38.  Helpb = Led1
  39.  If Helpb = 0 Then
  40.    Print 1
  41.  Else
  42.    Print 2
  43.  End If
  44. Return
  45.  
  46. Sw2:
  47.  Helpb = Led2
  48.  If helpb = 0 Then
  49.   Print 3
  50.  Else
  51.   Print 4
  52.  End If
  53. Return
sp3ots
Posty: 42
Rejestracja: 08 wrz 2018, 10:26

Re: Dzień dobry, HC-05

Post autor: sp3ots » 08 wrz 2018, 14:09

Dziękuję, nie rób wszystkiego za mnie.
Ja też na starość chcę myśleć (60+).

Jeszcze nie zredukowałem do jednego kanału, ale prze tastowałem to co od Ciebie dostałem.
Działa, ledy w nadajniku tylko migają, ale wiem że sygnał wraca, bo jak rozłączę jeden kros ( TX-RX ) ledy nie migają w nadajniku.

Zauważyłem że praca na "przyciskach" z Twoim kodem działa nieco gorzej niż mój kod, nie zawsze jest zmiana stanu LED w odbiorniku.

W przyszłości nie będzie przycisków tylko w nadajniku będzie odczyt i porównywanie temperatur na DS18B20.

Jedno kanałowego kodu jeszcze nie testowałem.

Dziękuję.

Nowy program nie kompiluje się, błędy na tych liniach:
Debounce Wej_1 , 0 , Sw1 , Sub
Debounce Wej_2 , 0 , Sw2 , Sub

SW1 i Sw2 nie ma w programie, domyślam się że trzeba je skonfigurować,
Wiem że wejście pierwsze ma reagować na "0". Sw1 - nie wiem co to ma być, Sub - to podprogram.
Debounce - jakaś zwłoka czasowa.

Przepraszam, nie skopiowałem całego kodu.


Program już się kompiluje, ale nie steruje prawidłowo LEDami w odbiorniku, nawet nie umiem zrozumieć jego działania.

Każdorazowo po włączeniu zasilanie mogę tylko dwa razy włączyć i wyłączyć jeden kanał, potem odbiornik przestaje reagować.

Oba kanały tak samo się zachowują.



Nie umiem zaznaczyć kodu przez " zaznacz cały" - po naciśnięciu "zaznacz cały", strona się przewija na początek tematu.
ODPOWIEDZ