- $regfile = "m16adef.dat" ' specify the used micro ' generated. Take care that the chip supports all fuse bytes.
- $crystal = 8000000
- $baud = 19200
- ' used crystal frequency ' generated. Take care that the chip supports all fuse bytes.
- Config Lcd = 16 * 2
- Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
- Config Pind.0 = Input
- Config Pinc.2 = Output
- Config Pinc.3 = Output
- Config Pinc.4 = Output
- Config Pinc.5 = Output
- Startknop Alias Pind.0
- Relais1 Alias Portc.2
- Relais2 Alias Portc.3
- Relais3 Alias Portc.4
- Relais4 Alias Portc.5
- Dim Compoort As String * 3
- Dim Klaar As Byte
- Dim Minute As Byte
- Dim Second As Byte
- Dim Vanity_once As Bit
- Dim Klepnummer As Byte
- Dim Multiplier As Byte
- Declare Sub Rainmaker(byval Klepnummer As Byte , Byval Minute As Byte)
- Declare Sub Wacht_seconde
- Declare Sub Start_sequence
- Declare Sub Serial_input
- Declare Sub Reset_relays
- Declare Sub Set_zero
- Hier:
- Vanity_once = 1
- Klaar = 1
- Do
- If Vanity_once = 1 Then
- Cls
- Locate 1 , 1 : Lcd "COS TAM" 'Tell the amased spectators what you do
- Locate 2 , 3 : Lcd "COS TAM"
- End If
- Vanity_once = 0
- If Startknop = 0 Then Start_sequence
- Serial_input
- Loop
- Sub Serial_input
- Compoort = Inkey()
- Select Case Compoort
- Case "1"
- Set_zero
- Reset_relays
- Rainmaker 1 , 20
- Case "2"
- Set_zero
- Reset_relays
- Rainmaker 2 , 20
- Case "3"
- Set_zero
- Reset_relays
- Rainmaker 3 , 20
- Case "4"
- Set_zero
- Reset_relays
- Rainmaker 4 , 20
- Case "5"
- Start_sequence
- Case "6"
- Goto Gestopt
- End Select
- End Sub
- Sub Start_sequence
- Rainmaker 1 , 1 'open valve 1 for 20 minutes
- Rainmaker 2 , 1 'open valve 2 ...
- Rainmaker 3 , 1 'and so on
- Rainmaker 4 , 1
- End Sub
- Sub Rainmaker(byval Klepnummer As Byte , Byval Minute As Byte)
- Compoort = ""
- Second = 1
- Cls
- If Klepnummer < 1 Or Klepnummer > 5 Then Goto Gestopt
- If Klepnummer = 1 Then Set Relais1
- If Klepnummer = 2 Then Set Relais2
- If Klepnummer = 3 Then Set Relais3
- If Klepnummer = 4 Then Set Relais4
- Do
- Second = Second - 1
- If Second < 0 Then Goto Gestopt
- Locate 1 , 1 : Lcd "Zawor"
- Locate 1 , 6 : Lcd Klepnummer
- Locate 1 , 8 : Lcd "otwarty"
- Locate 2 , 1 : Lcd "Nadal"
- If Minute > 9 Then Locate 2 , 5 : Lcd Minute
- If Minute < 10 Then
- Locate 2 , 4 : Lcd " "
- Locate 2 , 5 : Lcd "0"
- Locate 2 , 6 : Lcd Minute
- End If
- Locate 2 , 7 : Lcd ":"
- If Second > 9 Then Locate 2 , 8 : Lcd Second
- If Second < 10 Then
- Locate 2 , 8 : Lcd "0"
- Locate 2 , 9 : Lcd Second
- End If
- Locate 2 , 11 : Lcd "Min."
- Klaar = Second + Minute
- If Second = 0 Then Minute = Minute - 1
- If Second = 0 Then Second = 60
- Multiplier = 100
- Do
- Decr Multiplier
- Waitus 9550 '100 x 10000us = 1 second <-- this number makes 1 sec
- Loop Until Multiplier = 0
- Serial_input
- If Startknop = 0 Then Goto Gestopt 'stop op nogmaals startknop drukken
- Loop Until Klaar = 0
- Reset_relays
- Vanity_once = 1
- End Sub
- Gestopt:
- Cls
- Set_zero
- Reset_relays
- Locate 1 , 5 : Lcd "STOP!"
- Wait 3
- Goto Hier
- Sub Reset_relays
- Reset Relais1
- Reset Relais2
- Reset Relais3
- Reset Relais4
- End Sub
- Sub Set_zero
- Compoort = "0"
- Klepnummer = 0
- Second = 0
- Minute = 0
- Klaar = 0
- End Sub
Jak zmienić kod do obsługi 4 przekaźników.
-
- Posty: 7
- Rejestracja: 27 maja 2020, 22:01
Jak zmienić kod do obsługi 4 przekaźników.
Witam dopiero zaczynam przygodę z Bascom i mam problem chciałbym dodać do tego kodu obsługę ustawiania czasu czy jest możliwość dodania, czy pisać od nowa. Nowy program.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- niveasoft
- Posty: 1216
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Jak zmienić kod do obsługi 4 przekaźników.
To chyba nieskomplikowane. Widać że to program do jakiegoś zraszacza z czterema wyjściami sterowany poprzez SerialPort i ma jeden przycisk Start.
Można włączyć każde z wyjść na stałą wartość czasu 20min lub przyciskiem wszystkie na raz na 1min.
Teraz pytanie czy chcesz czasem sterować przyciskami czy poprzez SerialPort? Przyciski pewnie musiałbyś dodać,ale to pewnie nie problem.
Dodaj dwa przyciski i jedną zmienną. Klikając góra dół zmniejszysz ją lub zwiekszysz a potem odpalajac zdalnie wyjście zamiast sztywno ustawionych 20min przekazujesz wartość zmiennej i program gotowy.
Na koniec można dodać obsługę poprzez SerialPort. Program, na razie, wykorzystuje z klawiatury komputera cyfry od 1 do 6. Możesz dopisać kod że jak otrzyma np, 7 to zmniejsza tę zmienną czasową i nawet zwraca potwierdzenie "Ok now time period is "; Zmienna. Tak samo gdy otrzyma 8 to zwiekszy i potwierdzi.
Wszystko wydaje sie bardzo proste
Można włączyć każde z wyjść na stałą wartość czasu 20min lub przyciskiem wszystkie na raz na 1min.
Teraz pytanie czy chcesz czasem sterować przyciskami czy poprzez SerialPort? Przyciski pewnie musiałbyś dodać,ale to pewnie nie problem.
Dodaj dwa przyciski i jedną zmienną. Klikając góra dół zmniejszysz ją lub zwiekszysz a potem odpalajac zdalnie wyjście zamiast sztywno ustawionych 20min przekazujesz wartość zmiennej i program gotowy.
Na koniec można dodać obsługę poprzez SerialPort. Program, na razie, wykorzystuje z klawiatury komputera cyfry od 1 do 6. Możesz dopisać kod że jak otrzyma np, 7 to zmniejsza tę zmienną czasową i nawet zwraca potwierdzenie "Ok now time period is "; Zmienna. Tak samo gdy otrzyma 8 to zwiekszy i potwierdzi.
Wszystko wydaje sie bardzo proste
-
- Posty: 7
- Rejestracja: 27 maja 2020, 22:01
Re: Jak zmienić kod do obsługi 4 przekaźników.
Chciałbym sterować przyciskami.
Dopisanie przycisków to nie problem, zwiększanie czasu może być co minute.
Tylko jak się zabrać za te zmienne i dalej.
Dopisanie przycisków to nie problem, zwiększanie czasu może być co minute.
Tylko jak się zabrać za te zmienne i dalej.
- niveasoft
- Posty: 1216
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Jak zmienić kod do obsługi 4 przekaźników.
Łap na zachętę, ale następnym razem tak łatwo nie będzie. Widziałem Cię chyba na Elektrodzie. Musisz trochę poczytać. Na przykład Helpa. Jest też po polsku ale trochę stary. Na Twoim poziomie wystarczy.
W programie dodałem dwa przyciski na PD1 i PD2. Zmieniają domyślny czas 20min na 10min - 30min. Dodatkowo czas jest wyświetlany na LCD.
Zmieniają zmienną Minuty i potem ta zmienna jest przekazywana jako czas do kolejnego Sub zamiast oryginalnych 20min.
Dodałem tez dyrektywę $projecttime która mierzy czas spędzony nad kodem. Jak widać zmiany zajęły mi 10minut
W programie dodałem dwa przyciski na PD1 i PD2. Zmieniają domyślny czas 20min na 10min - 30min. Dodatkowo czas jest wyświetlany na LCD.
Zmieniają zmienną Minuty i potem ta zmienna jest przekazywana jako czas do kolejnego Sub zamiast oryginalnych 20min.
Dodałem tez dyrektywę $projecttime która mierzy czas spędzony nad kodem. Jak widać zmiany zajęły mi 10minut
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m16adef.dat" ' specify the used micro ' generated. Take care that the chip supports all fuse bytes.
- $crystal = 8000000
- $baud = 19200
- $projecttime = 10
- Config Lcd = 16x2
- Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
- Config Pind.0 = Input
- Config Pinc.2 = Output
- Config Pinc.3 = Output
- Config Pinc.4 = Output
- Config Pinc.5 = Output
- Startknop Alias Pind.0
- Relais1 Alias Portc.2
- Relais2 Alias Portc.3
- Relais3 Alias Portc.4
- Relais4 Alias Portc.5
- Sw_plus Alias Pind.1 : Set Portd.1
- Sw_minus Alias Pind.2 : Set Portd.2
- Dim Compoort As String * 3
- Dim Klaar As Byte
- Dim Minute As Byte
- Dim Second As Byte
- Dim Vanity_once As Bit
- Dim Klepnummer As Byte
- Dim Multiplier As Byte
- Dim Minuty As Byte , Timestr As String * 2
- Declare Sub Rainmaker(byval Klepnummer As Byte , Byval Minute As Byte)
- Declare Sub Wacht_seconde
- Declare Sub Start_sequence
- Declare Sub Serial_input
- Declare Sub Reset_relays
- Declare Sub Set_zero
- Declare Sub Format_time
- Hier:
- Vanity_once = 1
- Klaar = 1
- Minuty = 20
- Call Format_time()
- Do
- If Vanity_once = 1 Then
- Cls
- Locate 1 , 1 : Lcd "COS TAM" 'Tell the amased spectators what you do
- Locate 2 , 3 : Lcd "COS TAM"
- Locate 1 , 14 : Lcd Timestr
- End If
- Vanity_once = 0
- If Startknop = 0 Then Start_sequence
- Serial_input
- Debounce Sw_plus , 0 , Plus_sub , Sub
- Debounce Sw_minus , 0 , Minus_sub , Sub
- Loop
- Sub Serial_input
- Compoort = Inkey()
- Select Case Compoort
- Case "1"
- Set_zero
- Reset_relays
- Rainmaker 1 , Minuty
- Case "2"
- Set_zero
- Reset_relays
- Rainmaker 2 , Minuty
- Case "3"
- Set_zero
- Reset_relays
- Rainmaker 3 , Minuty
- Case "4"
- Set_zero
- Reset_relays
- Rainmaker 4 , Minuty
- Case "5"
- Start_sequence
- Case "6"
- Goto Gestopt
- End Select
- End Sub
- Sub Start_sequence
- Rainmaker 1 , 1 'open valve 1 for 20 minutes
- Rainmaker 2 , 1 'open valve 2 ...
- Rainmaker 3 , 1 'and so on
- Rainmaker 4 , 1
- End Sub
- Sub Rainmaker(byval Klepnummer As Byte , Byval Minute As Byte)
- Compoort = ""
- Second = 1
- Cls
- If Klepnummer < 1 Or Klepnummer > 5 Then Goto Gestopt
- If Klepnummer = 1 Then Set Relais1
- If Klepnummer = 2 Then Set Relais2
- If Klepnummer = 3 Then Set Relais3
- If Klepnummer = 4 Then Set Relais4
- Do
- Second = Second - 1
- If Second < 0 Then Goto Gestopt
- Locate 1 , 1 : Lcd "Zawor"
- Locate 1 , 6 : Lcd Klepnummer
- Locate 1 , 8 : Lcd "otwarty"
- Locate 2 , 1 : Lcd "Nadal"
- If Minute > 9 Then Locate 2 , 5 : Lcd Minute
- If Minute < 10 Then
- Locate 2 , 4 : Lcd " "
- Locate 2 , 5 : Lcd "0"
- Locate 2 , 6 : Lcd Minute
- End If
- Locate 2 , 7 : Lcd ":"
- If Second > 9 Then Locate 2 , 8 : Lcd Second
- If Second < 10 Then
- Locate 2 , 8 : Lcd "0"
- Locate 2 , 9 : Lcd Second
- End If
- Locate 2 , 11 : Lcd "Min."
- Klaar = Second + Minute
- If Second = 0 Then Minute = Minute - 1
- If Second = 0 Then Second = 60
- Multiplier = 100
- Do
- Decr Multiplier
- Waitus 9550 '100 x 10000us = 1 second <-- this number makes 1 sec
- Loop Until Multiplier = 0
- Serial_input
- If Startknop = 0 Then Goto Gestopt 'stop op nogmaals startknop drukken
- Loop Until Klaar = 0
- Reset_relays
- Vanity_once = 1
- End Sub
- Gestopt:
- Cls
- Set_zero
- Reset_relays
- Locate 1 , 5 : Lcd "STOP!"
- Wait 3
- Goto Hier
- Sub Reset_relays
- Reset Relais1
- Reset Relais2
- Reset Relais3
- Reset Relais4
- End Sub
- Sub Set_zero
- Compoort = "0"
- Klepnummer = 0
- Second = 0
- Minute = 0
- Klaar = 0
- End Sub
- Plus_sub:
- If Minuty < 30 Then Incr Minuty
- Call Format_time()
- Return
- Minus_sub:
- If Minuty > 10 Then Decr Minuty
- Call Format_time
- Return
- Sub Format_time
- Timestr = Str(minuty)
- Timestr = Format(timestr , "00")
- End Sub
-
- Posty: 7
- Rejestracja: 27 maja 2020, 22:01
Re: Jak zmienić kod do obsługi 4 przekaźników.
Ok.
Po pracy będę testował.
I porównywał stary do nowego.
Jak się umie pisać w Bascom to zajmuje to chwilkę ale dla zielonego to miesiąc.
Po pracy będę testował.
I porównywał stary do nowego.
Jak się umie pisać w Bascom to zajmuje to chwilkę ale dla zielonego to miesiąc.
-
- Posty: 7
- Rejestracja: 27 maja 2020, 22:01
Re: Jak zmienić kod do obsługi 4 przekaźników.
Witam jestem po próbach ale ustawianie przyciskami nie dzała.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m16adef.dat" ' specify the used micro ' generated. Take care that the chip supports all fuse bytes.
- $crystal = 8000000
- $baud = 19200
- $projecttime = 33
- Config Lcd = 16 * 2
- Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
- Config Pind.0 = Input
- Config Pina.2 = Input
- Config Pina.3 = Input
- Config Pinc.2 = Output
- Config Pinc.3 = Output
- Config Pinc.4 = Output
- Config Pinc.5 = Output
- '$sim
- Startknop Alias Pind.0
- Relais1 Alias Portc.2
- Relais2 Alias Portc.3
- Relais3 Alias Portc.4
- Relais4 Alias Portc.5
- Sw_plus Alias Pina.2 : Set Porta.2
- Sw_minus Alias Pina.3 : Set Porta.3
- Dim Compoort As String * 3
- Dim Klaar As Byte
- Dim Minute As Byte
- Dim Second As Byte
- Dim Vanity_once As Bit
- Dim Klepnummer As Byte
- Dim Multiplier As Byte
- Dim Minuty As Byte , Timestr As String * 2
- Declare Sub Rainmaker(byval Klepnummer As Byte , Byval Minute As Byte)
- Declare Sub Wacht_seconde
- Declare Sub Start_sequence
- Declare Sub Serial_input
- Declare Sub Reset_relays
- Declare Sub Set_zero
- Declare Sub Format_time
- Hier:
- Vanity_once = 1
- Klaar = 1
- Minuty = 20
- Call Format_time()
- Do
- If Vanity_once = 1 Then
- Cls
- Locate 1 , 1 : Lcd "COS TAM" 'Tell the amased spectators what you do
- Locate 2 , 3 : Lcd "COS TAM"
- Locate 1 , 14 : Lcd Timestr
- End If
- Vanity_once = 0
- If Startknop = 0 Then Start_sequence
- Serial_input
- Debounce Sw_plus , 0 , Plus_sub , Sub
- Debounce Sw_minus , 0 , Minus_sub , Sub
- Loop
- Sub Serial_input
- Compoort = Inkey()
- Select Case Compoort
- Case "1"
- Set_zero
- Reset_relays
- Rainmaker 1 , Minuty
- Case "2"
- Set_zero
- Reset_relays
- Rainmaker 2 , Minuty
- Case "3"
- Set_zero
- Reset_relays
- Rainmaker 3 , Minuty
- Case "4"
- Set_zero
- Reset_relays
- Rainmaker 4 , Minuty
- Case "5"
- Start_sequence
- Case "6"
- Goto Gestopt
- End Select
- End Sub
- Sub Start_sequence
- Rainmaker 1 , 1 'open valve 1 for 20 minutes
- Rainmaker 2 , 1 'open valve 2 ...
- Rainmaker 3 , 1 'and so on
- Rainmaker 4 , 1
- End Sub
- Sub Rainmaker(byval Klepnummer As Byte , Byval Minute As Byte)
- Compoort = ""
- Second = 1
- Cls
- If Klepnummer < 1 Or Klepnummer > 5 Then Goto Gestopt
- If Klepnummer = 1 Then Set Relais1
- If Klepnummer = 2 Then Set Relais2
- If Klepnummer = 3 Then Set Relais3
- If Klepnummer = 4 Then Set Relais4
- Do
- Second = Second - 1
- If Second < 0 Then Goto Gestopt
- Locate 1 , 1 : Lcd "Zawor"
- Locate 1 , 6 : Lcd Klepnummer
- Locate 1 , 8 : Lcd "otwarty"
- Locate 2 , 1 : Lcd "Nadal"
- If Minute > 9 Then Locate 2 , 5 : Lcd Minute
- If Minute < 10 Then
- Locate 2 , 4 : Lcd " "
- Locate 2 , 5 : Lcd "0"
- Locate 2 , 6 : Lcd Minute
- End If
- Locate 2 , 7 : Lcd ":"
- If Second > 9 Then Locate 2 , 8 : Lcd Second
- If Second < 10 Then
- Locate 2 , 8 : Lcd "0"
- Locate 2 , 9 : Lcd Second
- End If
- Locate 2 , 11 : Lcd "Min."
- Klaar = Second + Minute
- If Second = 0 Then Minute = Minute - 1
- If Second = 0 Then Second = 60
- Multiplier = 100
- Do
- Decr Multiplier
- Waitus 9550 '100 x 10000us = 1 second <-- this number makes 1 sec
- Loop Until Multiplier = 0
- Serial_input
- If Startknop = 0 Then Goto Gestopt 'stop op nogmaals startknop drukken
- Loop Until Klaar = 0
- Reset_relays
- Vanity_once = 1
- End Sub
- Gestopt:
- Cls
- Set_zero
- Reset_relays
- Locate 1 , 5 : Lcd "STOP!"
- Wait 3
- Goto Hier
- Sub Reset_relays
- Reset Relais1
- Reset Relais2
- Reset Relais3
- Reset Relais4
- End Sub
- Sub Set_zero
- Compoort = "0"
- Klepnummer = 0
- Second = 0
- Minute = 0
- Klaar = 0
- End Sub
- Plus_sub:
- If Minuty < 30 Then Incr Minuty
- Call Format_time()
- Return
- Minus_sub:
- If Minuty > 10 Then Decr Minuty
- Call Format_time
- Return
- Sub Format_time
- Timestr = Str(minuty)
- Timestr = Format(timestr , "00")
- Return
- End Sub
-
- Posty: 7
- Rejestracja: 27 maja 2020, 22:01
Re: Jak zmienić kod do obsługi 4 przekaźników.
Witam sam program do ustawiania czasu przyciskami działa ale coś jest nie tak bo z resztom programu już nie działa.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $crystal = 8000000
- $baud = 19200
- Config Lcd = 16 * 2
- Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
- Config Pind.0 = Input
- Config Pind.1 = Input
- Config Pind.2 = Input
- Sw_plus Alias Pind.1 : Set Portd.1
- Sw_minus Alias Pind.2 : Set Portd.2
- Dim Minuty As Byte , Timestr As String * 2
- Declare Sub Format_time
- Minuty = 20
- Call Format_time()
- Do
- Locate 1 , 14 : Lcd Timestr
- Debounce Sw_plus , 0 , Plus_sub , Sub
- Debounce Sw_minus , 0 , Minus_sub , Sub
- Loop
- Plus_sub:
- If Minuty < 40 Then Incr Minuty
- Call Format_time()
- Return
- Minus_sub:
- If Minuty > 10 Then Decr Minuty
- Call Format_time
- Return
- Sub Format_time
- Timestr = Str(minuty)
- Timestr = Format(timestr , "00")
- End Sub
- niveasoft
- Posty: 1216
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Jak zmienić kod do obsługi 4 przekaźników.
W tych subach Plus i Minus dopisz "Vanity_once = 1" żeby odświeżyło wyświetlacz. W moich programach ta zmienna nazywa się "Refresh".
-
- Posty: 7
- Rejestracja: 27 maja 2020, 22:01
Re: Jak zmienić kod do obsługi 4 przekaźników.
Problem rozwiązany ale mam następny bo gdy dodam CLS to mam przygaszony wyswietlacz a gdy nie mam CLS to mieszają sie dwa napisy z tym końcowym.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- Cursor Off
- Do
- If Vanity_once = 1 Then
- Cls
- Locate 1 , 1
- Lcd "STEROWNIK"
- Locate 2 , 3
- Lcd "13 sekcji"
- Locate 1 , 14
- Lcd Timestr
- End If
-
- Posty: 99
- Rejestracja: 20 lis 2016, 20:21
Re: Jak zmienić kod do obsługi 4 przekaźników.
Dołóż kilka spacji do napisu i wyczyści resztę wyswietlacza