Z wycinków kilku programów chciałem zrobić jeden duży barkuje kilku rzeczy
i zwiazku z tez pytania
W jaki sposób mogę zwiększyć ilość wejść i wyjść żeby zmieścić wszystko ? ( patrz 1 PINY )
brakuje ustawiania podlewania względem kalendarza zielonego pojęcia nie mam jak z pcf mogłbym ustawić godzinę i czas podlewania np 18:00]przez 1 min ?
brakuje lcd , i dobrze ustawionych pinów ale szukam narazie samego procesora który opsłuży 12 urządzeń ewentualnie zmienie na 2 procesory
Kod: Zaznacz cały
-----------------------PINY
Config 1wire = Portd.7
Dht_put Alias Portb.6 ' PODŁACZONY CZUJNIK DHT11
Dht_get Alias Pinb.6 ' PODŁACZONY CZUJNIK DHT11
Dht_io_set Alias Ddrb.6 ' PODŁACZONY CZUJNIK DHT11
Grzalka1
Grzałka2
Grzałka3
Grzałka4
Lampa1
Lampa2
Lampka2
Lampka1
Pompa1
Pompa2
--------------------zakres wilgotności
Locate 1 , 1
Lcd " Humilidity ""%"
Locate 2 , 1
Lcd "USTAW: " ; Liczba ; Chr(0) ; "C"
Waitms 100
If Pinb.1 = 0 Then
Incr Liczba
End If
Waitms 200
If Pinb.2 = 0 Then
Decr Liczba
End If
If Liczba > 95 Then Liczba = 95
If Liczba < 20 Then Liczba = 20
--------------------zakres temperatury 1 czujnik ?
Sub Ustaw_temp1
Debounce Pind.4 , 0 , Up
Debounce Pind.3 , 0 , Down
Temp = Fusing(i2 , "00.0")
Cls
Locate 1 , 2
Lcd "Ustaw temp1:";
Locate 2 , 6
Lcd Temp ; Chr(0);
If Pind.3 = 1 And Pind.4 = 1 Then
Waitms 10
Incr Aktywnosc
End If
If Aktywnosc = 500 Then
A = I2
Writeeeprom A , 1
Goto Main
End If
End Sub
Up:
Aktywnosc = 0
Incr I2
Goto Ustaw
Down:
Aktywnosc = 0
Decr I2
Goto Ustaw
--------------------zakres temperatury 2 czujnik ?
Sub Ustaw_temp2
Debounce Pind.4 , 0 , Up
Debounce Pind.3 , 0 , Down
Temp = Fusing(i2 , "00.0")
Cls
Locate 1 , 2
Lcd "Ustaw temp1:";
Locate 2 , 6
Lcd Temp ; Chr(0);
If Pind.3 = 1 And Pind.4 = 1 Then
Waitms 10
Incr Aktywnosc
End If
If Aktywnosc = 500 Then
A = I2
Writeeeprom A , 1
Goto Main
End If
End Sub
Up:
Aktywnosc = 0
Incr I2
Goto Ustaw
Down:
Aktywnosc = 0
Decr I2
Goto Ustaw
--------------------zakres temperatury 3 czujnik ?
Sub Ustaw_temp3
Debounce Pind.4 , 0 , Up
Debounce Pind.3 , 0 , Down
Temp = Fusing(i2 , "00.0")
Cls
Locate 1 , 2
Lcd "Ustaw temp3:";
Locate 2 , 6
Lcd Temp ; Chr(0);
If Pind.3 = 1 And Pind.4 = 1 Then
Waitms 10
Incr Aktywnosc
End If
If Aktywnosc = 500 Then
A = I2
Writeeeprom A , 1
Goto Main
End If
End Sub
Up:
Aktywnosc = 0
Incr I2
Goto Ustaw
Down:
Aktywnosc = 0
Decr I2
Goto Ustaw
--------------------zakres temperatury 4 czujnik ?
Sub Ustaw_temp4
Debounce Pind.4 , 0 , Up
Debounce Pind.3 , 0 , Down
Temp = Fusing(i2 , "00.0")
Cls
Locate 1 , 2
Lcd "Ustaw temp4:";
Locate 2 , 6
Lcd Temp ; Chr(0);
If Pind.3 = 1 And Pind.4 = 1 Then
Waitms 10
Incr Aktywnosc
End If
If Aktywnosc = 500 Then
A = I2
Writeeeprom A , 1
Goto Main
End If
End Sub
Up:
Aktywnosc = 0
Incr I2
Goto Ustaw
Down:
Aktywnosc = 0
Decr I2
Goto Ustaw
---------------------------ustawienie świecenia światła1
Sub Ustaw_świecenie1
If T > Liczba Then
Przek = 1
Led = 1
End If
If T < Tmin Then
Przek = 0
Led = 0
end
If Pinb.3 = 0 Then
Waitms 500
Do
Cls
Locate 1 , 1
Lcd " Swiecenie "
Locate 2 , 1
Lcd "USTAW lampa1: " ; Liczba ; Chr(0) ; "C"
Waitms 100
If Pinb.1 = 0 Then
Incr Liczba
End If
Waitms 200
If Pinb.2 = 0 Then
Decr Liczba
End If
If Liczba > 80 Then Liczba = 80
If Liczba < 20 Then Liczba = 20
If Pinb.3 = 0 Then
Writeeeprom Liczba , Eliczba
Waitms 100
Exit Do
End If
---------------------------ustawienie świecenia światła2
Sub Ustaw_świecenie2
If T > Liczba Then
Przek = 1
Led = 1
End If
If T < Tmin Then
Przek = 0
Led = 0
end
If Pinb.3 = 0 Then
Waitms 500
Do
Cls
Locate 1 , 1
Lcd " Swiecenie "
Locate 2 , 1
Lcd "USTAW lampa2: " ; Liczba ; Chr(0) ; "C"
Waitms 100
If Pinb.1 = 0 Then
Incr Liczba
End If
Waitms 200
If Pinb.2 = 0 Then
Decr Liczba
End If
If Liczba > 80 Then Liczba = 80
If Liczba < 20 Then Liczba = 20
If Pinb.3 = 0 Then
Writeeeprom Liczba , Eliczba
Waitms 100
Exit Do
End If
----------------------------krata sd
******************** Deklaracje zmiennych karty SD
Dim Blad_sd As Bit
Dim Zapisano As Bit
Dim B As Word
'********************* Deklaracje Aliasów
Sd_dioda Alias Porta.6
Dioda Alias Porta.7 'Przypisanie przyjaznych nazw do poszczególnych portów do których
'********************* Konfiguracja SD/MMC
'MMC -->ATMega32
'DATA3 -> PORTB.4
'DI -> PORTB.5
'CLK -> PORTB.7
'DATA0 -> PORTB.6
'********************* Konfiguracja SD/MMC
'MMC -->ATMega32
'DATA3 -> PORTB.4
'DI -> PORTB.5
'CLK -> PORTB.7
'DATA0 -> PORTB.6
Const Cmmc_soft = 0 'SPI Sprzętowe
' Podanie pinu wyboru układu
Config Pinb.4 = Output 'wskazanie, który Pin jest CS karty MMC/SD
Mmc_cs Alias Portb.4
Set Mmc_cs
' Definiowanie Pinu układu HW-SPI, który ma sygnał SS
Config Pinb.7 = Output ' definowanie Pin'u sygnału SPI SS
Spi_ss Alias Portb.7
Set Spi_ss ' Set SPI-SS to Output and High por Proper work of
' SPI as Master
' HW-SPI konfigurowane dla szybszej pracy
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1 'Config Spi = Soft , Din = Pinb.3 , Dout = Portb.2 , Ss = Portb.0 , Clock = Portb.1
Spsr.0 = 1 ' Podwójna prędkość na ATMega128
Spiinit ' Inicjowanie SPI
'Spiinit
' Błędy
Const Cperrdrivereset = 225 ' Error response Byte at Reset command
Const Cperrdriveinit = 226 ' Error response Byte at Init Command
Const Cperrdrivereadcommand = 227 ' Error response Byte at Read Command
Const Cperrdrivewritecommand = 228 ' Error response Byte at Write Command
Const Cperrdrivereadresponse = 229 ' No Data response Byte from MMC at Read
Const Cperrdrivewriteresponse = 230 ' No Data response Byte from MMC at Write
Const Cperrdrive = 231
Const Cperrdrivenotsupported = 232 ' return code for DriveGetIdentity, not supported yet
Waitms 700
Dim Gbdriveerror As Byte ' General Driver Error register
Dim Gbdriveerrorreg As Byte ' Driver load Error-Register of HD in case of error
Dim Gbdrivestatusreg As Byte ' Driver load Status-Register of HD on case of error
Dim Gbdrivedebug As Byte
$lib "MMC.LIB" ' link do biblioteki drivera
$external _mmc
'********************* Wartości początkowe
Zapisano = 0
Blad_sd = 0
Ot1 = 0
Ot2 = 0
T = 300
*********************** Obsługa zapisu na SD
Sub Write_to_sd()
Local Errorcode As Byte ''()
Gbdriveerror = Driveinit()
If Gbdriveerror = 0 Then
Errorcode = Initfilesystem(1)
If Errorcode <> 0 Then
Blad_sd = 1
Else
Reset Sd_dioda 'Zapala diodę LED
Open "pomiar.txt" For Append As #2 'otwórz plik pomiar.txt aby dopisać dane
Write #2 , Data_pcf , "," , Czas_pcf , "," , "Pokoj" , Ss1 , "," , "Kaloryfer" , Ss2 , "," , "Zewnatrz" , Ss3 'zapisz dane: data, czas , odczyt temperatury
Flush #2 'zapisz bufor pliku na karcie SD
Close #2 'zamknij kanał transmisji sprzętowego urządzenia
Blad_sd = 0 'ustaw zmienna na 0
Set Sd_dioda 'zgaś diodę LED
End If
Else
Reset Sd_dioda 'zapala diodę LED
Blad_sd = 1
End If
End Sub ' Write_to_sd()
'*********************** Podprogram określający kiedy dokonać pomiarów oraz zapisu na SD
Sub Pomiar
If S = 0 Or S = 30 Then 'jeśli sekundy wynoszą 0 lub 30
Reset Dioda 'Zapala diodę LED
Call Gettime() 'Skocz do podprogramu pobierania czasu z pcf8583
Call Ds_odczyt1 'Skocz do podprogramu odczytu temperatury z DS18b20
Call Ds_odczyt2 'Skocz do podprogramu odczytu temperatury z DS18b20
Call Ds_odczyt3 'Skocz do podprogramu odczytu temperatury z DS18b20
If M = 0 Or M = 5 Or M = 10 Or M = 15 Or M = 20 Or M = 25 Or M = 30 Or M = 35 Or M = 40 Or M = 45 Or M = 50 Or M = 55 Then 'Jeśli minuty = np. 10 to idzie zapisać wynik na SD
If S = 0 Then
If Zapisano = 0 Then
Call Write_to_sd() 'Idzie zapisać wyniki
Zapisano = 1 'Ustawia flaga zapisania na SD
End If
End If
End If
Set Dioda 'Gasi diodę LED
End If
If S = 10 Then 'jeśli sekundy wynoszą 10
If Zapisano = 1 Then 'Jeśli zmienna zapisano (na SD) wynosi 1
Zapisano = 0 'Wtedy ustaw 0
End If
End If
End Sub
---------------------------data I godzina
Dim S As Byte 'sekunda
Dim M As Byte 'minuta
Dim K As Byte 'pomocnicza
Dim G As Byte 'godzina
Dim P As Bit 'chyba pomocnicza :D
Dim R As Integer ' rok
Dim Mi As Byte 'miesiac
Dim D As Byte 'dzien
Dim Y As Byte 'yogi i bubu :D nie mam zielonego pojecia po co tego uzylem
Dim Dd As String * 3 , Md As String * 3 'dzien slownie
Dim Dmax As Byte 'dlugosc miesiaca
Dim Dl As Integer ' chyba pomocnicza
Dim A As Byte , B As Byte , C As Byte ' pomocnicze zmienne
Dim Z As Integer
Dim Dz As Integer
Dim Dy As Single
Dim Ddd As Byte
Config Pind.7 = Input
Config Pinb.0 = Input
Portd.7 = 1
Portb.0 = 1
Zmien Alias Pind.7
Nastepny Alias Pinb.0
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Timer1 = Timer , Prescale = 256
Enable Interrupts
Enable Timer1
On Timer1 Mierzymy
Cursor Off
Start:
K = 0
G = 0
M = 0
S = 0
R = 2005
D = 1
Mi = 1
-------------------------------
Cls
Lcd " Ustawienia "
Lowerline
Lcd " zegara "
Wait 2
'---------------------wpisywanie roku
Petla:
Cls
Lcd "Rok "
Lcd R
Waitms 500
Debounce Nastepny , 0 , Petla1
If Zmien = 0 Then
R = R + 1
End If
Goto Petla
'-----------------------------wpisywanie miesiaca
Petla1:
Cls
Lcd "Miesiac "
Lcd Mi
Waitms 500
Debounce Nastepny , 0 , Petla2
If Zmien = 0 Then
Mi = Mi + 1
If Mi > 12 Then
Mi = 1
End If
End If
Goto Petla1
'-------------------------- wpisywanie dni
Petla2:
Gosub Iledni
Cls
Lcd "Dzien "
Lcd D
Waitms 500
Debounce Nastepny , 0 , Petla3
If Zmien = 0 Then
D = D + 1
If D > Dmax Then
D = 1
End If
End If
Goto Petla2
'-------------------godzina
Petla3:
Cls
Lcd "Godzina "
Lcd G
Waitms 500
Debounce Nastepny , 0 , Petla4
If Zmien = 0 Then
G = G + 1
If G > 23 Then
G = 0
End If
End If
Goto Petla3
'-------------------minuty
Petla4:
Cls
Lcd "Minuty "
Lcd M
Waitms 500
Debounce Nastepny , 0 , Dalej
If Zmien = 0 Then
M = M + 1
If M > 59 Then
G = 0
End If
End If
Goto Petla4
Dalej:
Cls
Lcd " Koniec "
Lowerline
Lcd " ustawien "
Wait 3
Cls
Start Timer1
'------------------koniec ustawiania
Do
Upperline
Lcd " "
Gosub Jakidzien
If G < 10 Then
Lcd "0"
End If
Lcd G
Lcd ":"
If M < 10 Then
Lcd "0"
End If
Lcd M
Lcd ":"
If S < 10 Then
Lcd "0"
End If
Lcd S
Lcd " "
'+--------------------dolna linijka
Lowerline
Gosub Jakimiesiac
Lcd Dd
Lcd " "
If D < 10 Then
Lcd " "
End If
Lcd D
Lcd " "
Lcd Md
Lcd " "
Lcd R
Lcd " "
Gosub Jakirok
Waitms 400
Loop
'-------------------------------
Mierzymy:
Timer1 = 36735
Incr S
If S = 60 Then
S = 0
Incr M
If M = 60 Then
M = 0
Incr G
If G = 24 Then
S = 00
M = 00
G = 00
Incr D
Incr Ddd
If D > Dmax Then
D = 1
Incr Mi
Ddd = 0
If Mi > 12 Then
Mi = 1
Incr R
End If
End If
End If
End If
End If
Return
'---------------------------------
Iledni:
Gosub Jakirok
Select Case Mi
Case 1 : Dmax = 31
Case 3 : Dmax = 31
Case 5 : Dmax = 31
Case 7 : Dmax = 31
Case 8 : Dmax = 31
Case 10 : Dmax = 31
Case 12 : Dmax = 31
Case 2 : Dmax = 28 + Dl
Case Else : Dmax = 30
End Select
Return
'--------------------------------------nazwa miesiaca
Jakimiesiac:
Select Case Mi
Case 1 : Md = "Sty"
Case 2 : Md = "Lut"
Case 3 : Md = "Mar"
Case 4 : Md = "Kwi"
Case 5 : Md = "Maj"
Case 6 : Md = "Cze"
Case 7 : Md = "Lip"
Case 8 : Md = "Sie"
Case 9 : Md = "Wrz"
Case 10 : Md = "Paz"
Case 11 : Md = "Lis"
Case 12 : Md = "Gru"
End Select
Return
Jakirok:
A = R Mod 4
B = R Mod 100
C = R Mod 400
If A = 0 And B <> 0 Or C = 0 Then
Dl = 1
Else
Dl = 0
End If
Return
Jakidzien:
Dz = 0
Dy = 0
Z = 0
If Mi < 3 Then
Z = R - 1
Else
Z = R
End If
If Mi >= 3 Then
C = 2
Else
C = 0
End If
Dz = 23 * Mi
Dy = Dz / 9
Dz = Int(dy)
Dz = Dz + D
Dz = Dz + 4
Dz = Dz + R
Dy = Z / 4
Dz = Dz + Int(dy)
Dy = Z / 100
Dz = Dz - Int(dy)
Dy = Z / 400
Dz = Dz + Int(dy)
Dz = Dz - C
Z = Dz
Ddd = Z Mod 7
Select Case Ddd
Case 0 : Dd = "Czw"
Case 1 : Dd = "Pia"
Case 2 : Dd = "Sob"
Case 3 : Dd = "Nie"
Case 4 : Dd = "Pon"
Case 5 : Dd = "Wto"
Case 6 : Dd = "Sro"
End Select
Return
End
-------------------------czujniki temp
Dim I1 As Integer , Ss As String * 6
Dim I2 As Integer
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte 'deklaracja zmiennej do odczytu kodów ID
Dim Dsid3(8) As Byte
Dim Dsid4(8) As Byte
Dim Dsid5(8) As Byte
Dim W As Byte
Dim B As Byte 'deklaracja zmiennej do odczytu ilośc czujników
W = 1wirecount()
Cls
Locate 1 , 1
Lcd W
Wait 1
Cls
Curssor off
cls
lcd "growbox 2013"
wait 5
cls
lcd "Welcome"
lcd "ilość czujników:"
waitms 500
cld w
wait 3
cls
Dsid1(1) = 1wsearchfirst() 'Znajdź kolejny czujnik podpięty do portu
Dsid2(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
Dsid3(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
Dsid4(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32 'znak stopnia Celsjusza
1wreset
1wwrite &H55
1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika
1wwrite &HBE
I1 = 1wread(5)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid2(1) 'wysylam adres drugiego czujnika
1wwrite &HBE
I2 = 1wread(5)
1wreset
1wwrite &H55
1wverify Dsid3(1) 'wysylam adres drugiego czujnika
1wwrite &HBE
I2 = 1wread(5)
1wreset
1wwrite &H55
1wverify Dsid4(1) 'wysylam adres drugiego czujnika
1wwrite &HBE
I2 = 1wread(5)
------------------------------czujnik wilgotności
Dim I As Byte , Tmp As Byte
Dim J As Byte
Dim Mybyte As Byte
Dim Wenshi As String * 40
Dim Tmp_str8 As String * 8
Dim Count As Byte
Enable Interrupts
Set Dht_io_set
Set Dht_put
Sub Get_wenshidu(wendu As Byte , Shidu As Byte)
Count = 0
Wenshi = ""
Set Dht_io_set
Reset Dht_put
Waitms 20
Set Dht_put
Waitus 40
Reset Dht_io_set
Waitus 40
If Dht_get = 1 Then
Shidu = 255
Exit Sub
End If
Waitus 80
If Dht_get = 0 Then
Shidu = 255
Exit Sub
End If
While Dht_get = 1 : Wend
Do
While Dht_get = 0 : Wend
Waitus 30
If Dht_get = 1 Then
Wenshi = Wenshi + "1"
While Dht_get = 1 : Wend
Else
Wenshi = Wenshi + "0"
End If
Incr Count
Loop Until Count = 40
Set Dht_io_set
Set Dht_put
Tmp_str8 = Left(wenshi , 8)
Shidu = Binval(tmp_str8)
Tmp_str8 = Mid(wenshi , 17 , 8)
Wendu = Binval(tmp_str8)
Tmp_str8 = Right(wenshi , 8)
Tmp = Binval(tmp_str8)
Mybyte = Wendu + Shidu
If Mybyte <> Tmp Then
Shidu = 255
End If
End Sub
---------------------------grzałki
If grzałka1 = 35>38
Reset grzałka1
Else
If grzałka1=30
Set grzałka
End if
If grzałka2=35>38
Reset grzałka2
Else
If grzałka2=30
Set grzałka2
End if
If grzała3=30>34
Reset grzała
Else
If grzała3=26
Set grzałka3
End if
If Grzała4=20>25
Reset grzałka4
Else
If Grzała4=15
Set grzałka4
End if
---------------------pomopa2
If wilgotnosc >45-55 (65-80%)
Reset pompa1
Else
If wilgotność >42
Set pompa2
End if
Else
If Wilgotność <55
Reset pompa2
--------------Podlewanie pompa1