Witam. Buduję komputerek do samochodu, który mierzy temperaturę silnika, temperaturę zewnętrzną oraz poziom gazu w butli. Program do atmegi napisany, działa jednak chciał bym przełączać poszczególne parametry przyciskiem. W tej chwili przełączenie następuje automatycznie. Program przerobiony ze znalezionego w sieci.
Jako czujniki temperatury lm35.
$regfile = "m8def.dat"
$crystal = 12000000
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto ' ADC
Deflcdchar 1 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 2 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32
Declare Sub _temp1
Declare Sub _temp2
Declare Sub _temp3
Declare Sub _temp S
Dim Usrednianie As Byte
Dim Temp1 As Word
Dim Temp2 As Word
Dim Temp3 As Word
Dim B As Byte
Dim X As Byte
Dim Cx As Byte
Dim S As Byte
Dim Level As Byte
Dim Leve2 As Byte
Dim T1 As Word
Dim T2 As Word
Dim T3 As Bit
Enable Adcc
Start Adc
Cursor Off
Cls
Locate 1 , 4
Lcd "Halo Szymon"
Home L : Lcd "Renault 19"
Wait 3
For B = 1 To 16 Step 1
Shiftlcd Right , 1
Waitms 150
Next : Cls : Waitms 200
Home : Lcd " Renault 19 "
Home L : Lcd " 1.7 "
Wait 3
For B = 1 To 16 Step 1
Shiftlcd Right , 1
Waitms 150
Next : Cls : Waitms 200
Do
For Level = 1 To 10
Call _temp1
Locate 1 , 1
Lcd "T siln: " : Lcd Temp1
Locate 1 , 12
Lcd "'C"
If Temp1 > 15 And Temp1 < 80 Then
Locate 2 , 6 : Lcd "niska"
Elseif Temp1 >= 80 And Temp1 <= 88 Then
Locate 2 , 6 : Lcd "Normalna"
Elseif Temp1 >= 89 Then
Locate 2 , 6 : Lcd "za wysoka"
End If
Waitms 500
Next Level
For B = 1 To 16 Step 1
Shiftlcd Right , 1
Waitms 100
Next : Cls : Waitms 10
For Level = 1 To 10
Call _temp3
Locate 1 , 1
Lcd "T zewn.: " : Lcd Temp3
Locate 1 , 12
Lcd "'C"
If Temp3 > -30 And Temp3 < 3 Then
Locate 2 , 6 : Lcd "gololec"
Elseif Temp1 > 3 And Temp1 < 50 Then
Locate 2 , 6 : Lcd " "
End If
Waitms 500
Next Level
For B = 1 To 16 Step 1
Shiftlcd Right , 1
Waitms 100
Next : Cls : Waitms 10
For Level = 1 To 10
Call _temp2
Locate 1 , 1 : Lcd "rez.|"
Locate 1 , 6 : Lcd " 25|"
Locate 1 , 10 : Lcd "50|"
Locate 1 , 14 : Lcd "100"
Select Case Temp2
Case Is <= 1:
For X = 1 To 1
Locate 2 , X
Lcd Chr(1)
Next X
S = X + 1
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 6:
For X = 1 To 2
Locate 2 , X
Lcd Chr(1)
Next X
S = X + 1
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 18:
For X = 1 To 3
Locate 2 , X
Lcd Chr(1)
Next X
S = X + 1
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 25:
For X = 1 To 4
Locate 2 , X
Lcd Chr(1)
Next X
S = X + 1
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 31:
For X = 1 To 5
Locate 2 , X
Lcd Chr(1)
Next X
S = X + 1
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 37:
For X = 1 To 6
Locate 2 , X
Lcd Chr(1)
S = X + 1
Next X
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 43:
For X = 1 To 7
Locate 2 , X
Lcd Chr(1)
Next X
S = X + 1
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 50:
For X = 1 To 8
Locate 2 , X
Lcd Chr(1)
S = X + 1
Next X
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 56:
For X = 1 To 9
Locate 2 , X
Lcd Chr(1)
S = X + 1
Next X
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 62:
For X = 1 To 10
Locate 2 , X
Lcd Chr(1)
S = X + 1
Next X
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 68:
For X = 1 To 11
Locate 2 , X
Lcd Chr(1)
S = X + 1
Next X
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 75:
For X = 1 To 12
Locate 2 , X
Lcd Chr(1)
S = X + 1
Next X
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 81:
For X = 1 To 13
Locate 2 , X
Lcd Chr(1)
S = X + 1
Next X
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 87:
For X = 1 To 14
Locate 2 , X
Lcd Chr(1)
S = X + 1
Next X
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 90:
For X = 1 To 15
Locate 2 , X
Lcd Chr(1)
S = X + 1
Next X
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
Case Is <= 100:
For X = 1 To 16
Locate 2 , X
Lcd Chr(1)
S = X + 1
Next X
For Cx = 16 To S Step -1
Locate 2 , Cx
Lcd Chr(2)
Next Cx
End Select
Waitms 500
Next Level
For B = 1 To 16 Step 1
Shiftlcd Right , 1
Waitms 100
Next : Cls : Waitms 10
Loop 'koniec pętli Do...Loop
End
Sub _temp1
For B = 1 To 25 Step 1
Temp1 = Getadc(0)
Temp1 = Temp1 / 2
Waitms 10
Next
End Sub
Sub _temp2
For B = 1 To 25 Step 1
Temp2 = Getadc(1)
Temp2 = Temp2 / 2
Waitms 10
Next
End Sub
Sub _temp3
For B = 1 To 25 Step 1
Temp3 = Getadc(2)
Temp3 = Temp3 / 2
Waitms 10
Next
End Sub
Re: Mini komputer samochodowy
Ten kawałek:
odpowiada za wyświetlanie temperatury silnika. Jemu podobne za wyświetlanie innych temperatur. Najprostszy sposób to wsadź wszystko w główną pętlę do...loop i dodaj mniejsze. Wyglądało by to tak:
Moja strona w powijakach
petla w petli
A jakiś inny sposób? Nie jestem mistrzem w pisaniu programów jednak pętla w pętli chyba jest bardzo rzadko stosowana bo nie spotkałem się wcześniej z tak napisanym programem
Re: Mini komputer samochodowy
Nie wiem jak inni, ale ja często stosuję takie rozwiązania w postaci pętli w pętli, jesli oczywiście jest mi to potrzebne. wszystko działa jak złoto.
Moja strona w powijakach
zmiany
Zastosowałem wskazówki podane przez Ciebie. Działa jak chciałem. Teraz mam problemy z wyświetlaniem. Jak temperatura przekroczy 100 'c to po obniżeniu zostaje ostatnie zero, tak samo dzieje się poniżej 10' temperatura jaką pokazuje wyświetlacz to np 80 gdy powinien pokazywać 8
dodaj dwie spacje ,które
dodaj dwie spacje ,które nadpiszą te zera