Check af kode (beregning)
Hej Eksperter.Jeg har sammen med min datter lavet et lille Basic program til en Atmel AVR, vi skal se hvor langt og hvor hurtigt deres hamster løber i hamsterhjulet, og samtidig prøve at give hende lidt forståelse for hvordan man programmerer.
Programmet virker sådan set, jeg er dog MEGET i tvivl om jeg laver en fejl da hun i nat har løbet urealistisk meget for en hamster.
Data: Hamsterhjul er 13 cm i diameter.
Vi har en reedkontakt på buret og en magnet op hjulet, den trigges én gang pr omgang.
Koden er her:
***************************************************
Dim X As Long
dim S as Single
Dim Taeller As Long
Dim Taeller_last As Long
Dim Mem1 As Bit
Dim mem As Bit
Dim Sek As Byte
Dim Meter As Long
Dim Taeller_eprom As Eram Long
Dim Seconds As Byte
Dim Minutes As Byte
Dim Tid As Long
Dim Tid_eprom As Eram Long
Dim Cm5 As Single
Dim Sidste5 As Long
Dim Kmt As Single
Dim Kmtmax_eprom As Eram Single
Dim Mmin As Single
Dim S_meter As String * 10
Dim S_mmin As String * 10
Dim S_kmt As String * 10
Dim S_kmtmax As String * 10
Dim S_cm5 As String * 10
Dim S_min As String * 10
Tx = "start"
print Tx
Taeller = Taeller_eprom
Tid = Tid_eprom
Kmt = Kmtmax_eprom
S_kmtmax = Fusing(kmt , "#.##")
Do
If Pina.1 = 0 Then ' reset tællere mm
Tx = "reset"
Debg
Taeller = 0
Kmtmax_eprom = 0
Tid = 0
Tid_eprom = 0
End If
If Pina.0 = 0 Then '
If mem = 0 Then ' memory flag = 0 ? Sikrer at vi kun tæller på faldende flanke
Taeller = Taeller + 1 ' tæl på total tæller
Sidste5 = Sidste5 + 1 ' tæl på 5 sek tæller
End If
mem = 1 ' sæt memory flag
Else
mem = 0 ' reset memory flag
End If
Loop
Tmr_int: ' trigges hvert sekund
Seconds = Seconds + 1
If Seconds > 59 Then
Seconds = 0
Minutes = Minutes + 1
X = Minutes Mod 5
If X = 0 Then ' gem i eprom hvert 5. minut
Taeller_eprom = Taeller
Tid_eprom = Tid
End If
If Minutes > 59 Then
Minutes = 0
End If
End If
Sek = Sek + 1
If Taeller <> Taeller_last Then ' tæl tid i bevægelse, hvis der er kommet pulser indenfor sidste sekund er der bevægelse
Taeller_last = Taeller ' husk sidste værdi
Tid = Tid + 1
End If
If Sek >= 5 Then ' hvert 5. sekund skriver vi til konsol (seriel udgang)
' hjulet er 13 cm i indvendig diameter 13*3,14..... = 40,84 cm
Cm5 = Sidste5 * 40.84 ' de sidste 5 cm er der løbet XX cm
S = Taeller * 0.4084 ' total metertæller = totaltæller * 0.4088 meter
Meter = S
Mmin = Cm5 * 0.12 ' beregn meter/minut
Kmt = Mmin * 0.060 ' beregn km/t
' formater data til output
S_meter = Str(meter)
S_mmin = Fusing(mmin , "#.##")
S_kmt = Fusing(kmt , "#.##")
S_cm5 = Fusing(cm5 , "#.##")
S = Tid / 60
S_min = Fusing(s , "#.#")
' check om der er slået ny hastighedsrekord
S = Kmtmax_eprom
If Kmt > S Then
Kmtmax_eprom = Kmt ' gem ny max hastighed
S_kmtmax = Fusing(kmt , "#.##") ' formater til output
End If
Tx = "Omgange:" + Str(sidste5) + " cm/5sek:" + S_cm5 + " Meter ialt: " + S_meter + " m/min: " + S_mmin + " km/t: " + S_kmt + " max: " + S_kmtmax + " min: " + S_min
Print Tx
Sidste5 = 0 ' nulstil 5 sek tæller
sek = 0 ' vent 5 sek igen.
End If
Return
***************************************************
Har jeg lavet en bøf af rang eller er beregningerne ok ?
//akj