Bascom hc-05 i 3 PWM jak ???
-
- Posty: 58
- Rejestracja: 23 wrz 2018, 11:28
Bascom hc-05 i 3 PWM jak ???
Witam , pisze prosty programik sterujący PWM 3 ledy RGB przez androida po BT. Zatrzymałem się na rozbiciu składni wysyłanej przez androida np.
wysyłam apką "serial bluetooth terminal" G128 czyli zielona o poziomie 128 PWM (50% jasniści)
w odbioeniku:
IF dane = "G128" then... , oczywiście odbiera lecz tylko konkretny rozkaz i steruje PWM , można stworzyć tablice itp. lecz chodzi o to jak " rozbić " daną zmienna żeby odpowiednio sterować poszczególne wyjścia pwm np.
R128G64B0 , czyli żeby na PWM było odpowiednio PWM1 = 50% czerwona , PWM2 = 25% zielona , PWM3 = 0% niebieska , za pomoc dziękuje i pozdrawiam
wysyłam apką "serial bluetooth terminal" G128 czyli zielona o poziomie 128 PWM (50% jasniści)
w odbioeniku:
IF dane = "G128" then... , oczywiście odbiera lecz tylko konkretny rozkaz i steruje PWM , można stworzyć tablice itp. lecz chodzi o to jak " rozbić " daną zmienna żeby odpowiednio sterować poszczególne wyjścia pwm np.
R128G64B0 , czyli żeby na PWM było odpowiednio PWM1 = 50% czerwona , PWM2 = 25% zielona , PWM3 = 0% niebieska , za pomoc dziękuje i pozdrawiam
- Pikczu
- Posty: 390
- Rejestracja: 17 sie 2015, 13:46
- Lokalizacja: Dublin, Ireland
- Kontakt:
Re: Bascom hc-05 i 3 PWM jak ???
A jesteś w stanie wysłać z aplikacji tablice albo trzy bajty na raz ?
jeśli tak to reszta jest już z górki.
W programie robisz tablice na trzy zmienne i odbierasz przez input bin.
Wysyłasz je wszystkie na raz czyli:255255255 bez dodatkowych znaków najlepiej binarnie.
Wtedy wszystkie trzy trafiają do tablicy i automatycznie w komórce pierwszej jest twój pierwszy bajt itd.
Jeśli będziesz chciał zmienić wartość tylko jednej nadal wysyłasz dwie pozostałe.
tak w wielkim skrócie.
jeśli tak to reszta jest już z górki.
W programie robisz tablice na trzy zmienne i odbierasz przez input bin.
Wysyłasz je wszystkie na raz czyli:255255255 bez dodatkowych znaków najlepiej binarnie.
Wtedy wszystkie trzy trafiają do tablicy i automatycznie w komórce pierwszej jest twój pierwszy bajt itd.
Jeśli będziesz chciał zmienić wartość tylko jednej nadal wysyłasz dwie pozostałe.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- Dim Led_r As Byte
- Dim Led_g As Byte
- Dim Led_b As Byte
- Dim Serial_flag As Byte
- Dim Serial_rx(3) As Byte
- Config Serialin = Buffered , Size = 20
- Do
- Serial_flag = Ischarwaiting()
- If Serial_flag = 1 Then
- Inputbin Serial_rx(1) , 3
- End If
- Led_r = Serial_rx(1) , 1 'twoja led czerwona
- Led_g = Serial_rx(2) , 1 'twoja led zielona
- Led_b = Serila_rx(3) , 1 'twoja led niebieska
- Loop
- End
-
- Posty: 58
- Rejestracja: 23 wrz 2018, 11:28
Re: Bascom hc-05 i 3 PWM jak ???
Witam , sęk w tym że apka wysyła dodatkowy znak przed daną jaką ma mieć wypełnienie pwm np R1 lub G200 itd...
Oczywiście można to rozbić po 3 bajty lub zamienić R i G na byte 52 1 i 47 200 i co wtedy program z tym zrobi , abstrahując od tego , co jeżeli PWN dla każdego kanału będzie 2 , R2G2B2 czyli 52 2 , 47 2 , 42 2 lub bez znaków poprzedzających 222 jak ma to zdefiniować program bo tak wysyła apka . Gdy przesuwam jeden z suwaków w apce to wysyła ciąg np. R12R13R15R22 itd.
Oczywiście można to rozbić po 3 bajty lub zamienić R i G na byte 52 1 i 47 200 i co wtedy program z tym zrobi , abstrahując od tego , co jeżeli PWN dla każdego kanału będzie 2 , R2G2B2 czyli 52 2 , 47 2 , 42 2 lub bez znaków poprzedzających 222 jak ma to zdefiniować program bo tak wysyła apka . Gdy przesuwam jeden z suwaków w apce to wysyła ciąg np. R12R13R15R22 itd.
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Bascom hc-05 i 3 PWM jak ???
Napisz dokładniej czy ta aplikacja wysyła Enter po każdej wiadomości R11R12R13 itd?
Czy możliwe jest że wyśle ciąg R12G30B100 ?
To nie jest skomplikowane tylko trzeba tę kwestię uściślić.
Czy możliwe jest że wyśle ciąg R12G30B100 ?
To nie jest skomplikowane tylko trzeba tę kwestię uściślić.
-
- Posty: 58
- Rejestracja: 23 wrz 2018, 11:28
Re: Bascom hc-05 i 3 PWM jak ???
Tak jest możliwy ciąg R12G30B100 ale nie wysyła entera tylko leci jeden za drugim .
Na elektrodzie zadałem to samo pytanie i w odpowiedzi ktoś zasugerował funkcje SPLIT , przyznam że o tej funkcji nie wiedziałem
Na elektrodzie zadałem to samo pytanie i w odpowiedzi ktoś zasugerował funkcje SPLIT , przyznam że o tej funkcji nie wiedziałem
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Bascom hc-05 i 3 PWM jak ???
Zobacz tak. Sprawdziłem kilka możliwych stringów w symulatorze i wszystko wygląda dobrze. Łap i testuj
Wartości PWM masz w zmiennych R_val, G_val i B_val
Komenda Split też pewnie dałaby radę. Jest jeszcze komenda CHARPOS
Cały myk polega na tym że w tym długim R100G1B200 B może czasem mieć tylko jedną literkę i o tym trzeba pamiętać pisząc kod.
Wartości PWM masz w zmiennych R_val, G_val i B_val
Komenda Split też pewnie dałaby radę. Jest jeszcze komenda CHARPOS
Cały myk polega na tym że w tym długim R100G1B200 B może czasem mieć tylko jedną literkę i o tym trzeba pamiętać pisząc kod.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m328pdef.dat"
- $crystal = 16000000
- $hwstack = 64
- $swstack = 16
- $framesize = 64
- $sim 'USUNĄĆ/ZAREMOWAĆ BO TO TYLKO DO SYMULATORA
- Config Submode = New
- Const _valcheck = 1 'sprawdzanie czy dla instrukcji Val podaliśmy tylko cyfry
- Dim Command As String * 25 , Helpstr As String * 3
- Dim R_val As Byte , G_val As Byte , B_val As Byte
- Dim R_pos As Byte , G_pos As Byte , B_pos As Byte
- Dim Helpb As Byte , Char_cnt As Byte
- Command = "R5G6B7"
- 'Command = "R20G30B40"
- 'Command = "R120G130B140"
- 'Command = "R255"
- 'Command = "G255"
- 'Command = "B255"
- Sub Parse_command()
- B_pos = Instr(command , "B") 'zaczynamy od końca stringa
- If B_pos > 0 Then 'jeśli znaleziono B
- Helpb = B_pos + 1 'pomijamy literkę B
- Helpstr = Mid(command , Helpb) 'i łapiemy wartość
- Helpb = Val(helpstr) 'zamień string na wartość
- If Err = 0 Then B_val = Helpb 'jeśli w stringu nie było liter...
- End If
- G_pos = Instr(command , "G")
- If G_pos > 0 Then 'jeśli znaleziono G
- Helpb = G_pos + 1
- If B_pos > 0 Then 'jeśli w stringu było też B
- Char_cnt = B_pos - Helpb 'to oblicz ile liter jest od G do B (1-3 literki)
- Helpstr = Mid(command , Helpb , Char_cnt) 'łapiemy string
- Else
- Helpstr = Mid(command , Helpb)
- End If
- Helpb = Val(helpstr) 'zamieniamy na wartość
- If Err = 0 Then G_val = Helpb 'jeśli w stringu były tylko cyfry...
- End If
- R_pos = Instr(command , "R") 'dla R to samo co dla G
- If R_pos > 0 Then
- Helpb = R_pos + 1
- If G_pos > 0 Then
- Char_cnt = G_pos - Helpb
- Helpstr = Mid(command , Helpb , Char_cnt)
- Else
- Helpstr = Mid(command , Helpb)
- End If
- Helpb = Val(helpstr)
- If Err = 0 Then R_val = Helpb
- End If
- End Sub
- Call Parse_command()
- Print "R_val=" ; R_val ; " G_val=" ; G_val ; " B_val=" ; B_val
- End
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
-
- Posty: 58
- Rejestracja: 23 wrz 2018, 11:28
Re: Bascom hc-05 i 3 PWM jak ???
ok przetestuje i dam znać . Jak zachowa się program w chwili gdy ciąg będzie B12B45B244B33B210B11 cyfry po znaczniku b są przypadkowe .
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Bascom hc-05 i 3 PWM jak ???
Nie napisałeś jaki procesor, jakie taktowanie i najważniejsze o co już pytałem : Czy aplikacja wystawia na końcu enter.
Ważne po prostu jest to czy tam coś rozdziela nowe wiadomości.
Inne podejście jak Enter jest a inne gdy go nie ma. Wtedy można to rozwiązać jak w Modbus mierząc czas od ostatnio odebranego znaku.
Ważne po prostu jest to czy tam coś rozdziela nowe wiadomości.
Inne podejście jak Enter jest a inne gdy go nie ma. Wtedy można to rozwiązać jak w Modbus mierząc czas od ostatnio odebranego znaku.
-
- Posty: 58
- Rejestracja: 23 wrz 2018, 11:28
Re: Bascom hc-05 i 3 PWM jak ???
Wcześniej...Tak jest możliwy ciąg R12G30B100 ale nie wysyła entera tylko leci jeden za drugim ...
atmega 328 , 16 Mhz
atmega 328 , 16 Mhz
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Bascom hc-05 i 3 PWM jak ???
Teraz widzę, nie zauważyłem. Jaki jest baudrate? Mamy jakiś wolny Timer?