Witam,
jak w temacie - pracuje nad lampka RGB sterowaną jednym przyciskiem który odpowiada za szybkość przechodzenia kolorów. Dodatkowo lampka ma wyświetlacz 2x16 który wyświetla powitanie, pasek informujący o danej szybkości przechodzenia kolorów oraz na głównym ekranie tremometr pokazujący temp wewnątrz i na zewnątrz.
Co do czujnika wybór padł na DS18S20 i magistrale 1wire dlatego nawet żeby nie było problemu z zakłóceniami na dłuższym przewodzie wychodzącym na zewnątrz.
Konkrety:
Pierwszy problem -> Mógłby ktoś mi pomóc zrobić 2 czujniki na jednej magistrali? Jak to zaimplementować w kodzie. Przeszukałem elektrodę i żaden ze sposobów nie chce mi zadziałać.
Drugi problem -> Jak odświeżać co najmniej raz na ok. 30sek czujniki kiedy wykonuje się fragment programu odpowiedzialny za diody? Skakać
poleceniem gosub Termometr na końcu każdego z If'ów? Może coś bardziej optymalnego.
Oczywiście czekam też na poprawki
To mój pierwszy program w Bascomie i pierwszy kontakt z mikrokontorerami.
Jeden "obrazek", w zupełności wystarczy.
[zumek]
jak w temacie - pracuje nad lampka RGB sterowaną jednym przyciskiem który odpowiada za szybkość przechodzenia kolorów. Dodatkowo lampka ma wyświetlacz 2x16 który wyświetla powitanie, pasek informujący o danej szybkości przechodzenia kolorów oraz na głównym ekranie tremometr pokazujący temp wewnątrz i na zewnątrz.
Co do czujnika wybór padł na DS18S20 i magistrale 1wire dlatego nawet żeby nie było problemu z zakłóceniami na dłuższym przewodzie wychodzącym na zewnątrz.
Konkrety:
Pierwszy problem -> Mógłby ktoś mi pomóc zrobić 2 czujniki na jednej magistrali? Jak to zaimplementować w kodzie. Przeszukałem elektrodę i żaden ze sposobów nie chce mi zadziałać.
Drugi problem -> Jak odświeżać co najmniej raz na ok. 30sek czujniki kiedy wykonuje się fragment programu odpowiedzialny za diody? Skakać
poleceniem gosub Termometr na końcu każdego z If'ów? Może coś bardziej optymalnego.
Oczywiście czekam też na poprawki
$regfile = "m8def.dat"
$crystal = 8000000
Dim R1 As Byte
Dim G1 As Byte
Dim B1 As Byte
Dim Licznikpwm As Byte
Dim Licznik As Integer
Dim Zmiana1 As Byte
Dim Przycisk As Byte
Dim I As Byte
Dim Ii As Byte
Dim T(2) As Byte
Dim Temp As Single
Dim War As Byte
Config Portc = &B010111
Portc = &B111111
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.0 , Rs = Portb.1
Config 1wire = Portb.2
R1 = 255
Zmiana1 = 1
Przycisk = 0
Deflcdchar 0 , 32 , 4 , 31 , 2 , 4 , 8 , 31 , 32 ' litera ż
Deflcdchar 1 , 32 , 31 , 31 , 31 , 31 , 31 , 32 , 32 ' kratka
Deflcdchar 2 , 32 , 32 , 14 , 17 , 31 , 16 , 14 , 2 ' litera ę
Deflcdchar 3 , 32 , 4 , 14 , 16 , 14 , 1 , 30 , 32 ' litera ś
Deflcdchar 4 , 32 , 4 , 14 , 16 , 16 , 17 , 14 , 32 ' litera ć
Deflcdchar 5 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' stopien celciusza
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE
T(1) = 1wread()
T(2) = 1wread()
1wreset
Sound , Portc.4 , 1000 , 500
Cls
Cursor Off Noblink
Lcd " LAMPKA RGB"
Waitms 500
Lowerline
Lcd "Sebastian I" ; Chr(0) ; "****"
Waitms 2500
Cls
Lcd "POWITANIE 1234567890"
Lowerline
Lcd "1234567890 POWITANIE"
For I = 1 To 16
Shiftlcd Left
Waitms 200
Next I
Waitms 2500
For I = 1 To 16
Shiftlcd Left
Waitms 200
Next I
Gosub Obsluga_przycisku
'====================================================
Glowna_czesc:
Do
Incr Licznikpwm
If Licznikpwm > 255 Then Licznikpwm = 0
Incr Licznik
If T(2) = 0 Then
Temp = T(1) / 2
Else
Ii = 256 - T(1)
End If
If T(2) > 0 Then Lcd "-"
Debounce Pinc.3 , 0 , Obsluga_przycisku
If Licznik = 8000 Then
Select Case Przycisk
Case 1
Licznik = 0
Case 2
Licznik = 4000
Case 3
Licznik = 6000
Case 4
Licznik = 7000
Case 5
Licznik = 7500
Case 6
Licznik = 7900
Case 7
Licznik = 7950
Case 8
Licznik = 7975
End Select
If Zmiana1 = 1 Then
Incr B1
If B1 = 255 Then Zmiana1 = 2
End If
If Zmiana1 = 2 Then
Decr R1
If R1 = 0 Then Zmiana1 = 3
End If
If Zmiana1 = 3 Then
Incr G1
If G1 = 255 Then Zmiana1 = 4
End If
If Zmiana1 = 4 Then
Decr B1
If B1 = 0 Then Zmiana1 = 5
End If
If Zmiana1 = 5 Then
Incr R1
If R1 = 255 Then Zmiana1 = 6
End If
If Zmiana1 = 6 Then
Decr G1
If G1 = 0 Then Zmiana1 = 1
End If
End If
If Licznikpwm <= R1 Then Reset Portc.2 Else Set Portc.2
If Licznikpwm <= B1 Then Reset Portc.1 Else Set Portc.1
If Licznikpwm <= G1 Then Reset Portc.0 Else Set Portc.0
Loop
Obsluga_przycisku:
Sound , Portc.4 , 100 , 500
Incr Przycisk
If Przycisk = 9 Then Przycisk = 1
Cls
Lcd "Pr" ; Chr(2) ; "dko" ; Chr(3) ; Chr(4) ; " zmiany:"
Lowerline
Select Case Przycisk
Case 1
Lcd "[ ]"
Gosub Termometr
Case 2
Lcd "[" ; Chr(1) ; Chr(1) ; " ]"
Gosub Termometr
Case 3
Lcd "[" ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; " ]"
Gosub Termometr
Case 4
Lcd "[" ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; " ]"
Gosub Termometr
Case 5
Lcd "[" ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; " ]"
Gosub Termometr
Case 6
Lcd "[" ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; " ]"
Gosub Termometr
Case 7
Lcd "[" ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; " ]"
Gosub Termometr
Case 8
Lcd "[" ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; Chr(1) ; "]"
Gosub Termometr
End Select
Gosub Glowna_czesc
End
Termometr:
For War = 0 To 10
Debounce Pinc.3 , 0 , Obsluga_przycisku
Waitms 150
Next T
Cls
Lcd "Temp zew: " ; Temp ; Chr(5) ; "C"
Lowerline
Lcd "Temp wew: " ; Temp ; Chr(5) ; "C"
Gosub Glowna_czesc
EndJeden "obrazek", w zupełności wystarczy.
[zumek]