Avatar billede dk_akj Nybegynder
04. maj 2013 - 12:33 Der er 1 løsning

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
Avatar billede dk_akj Nybegynder
16. september 2013 - 08:37 #1
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester