Tachograph
Posted: Tue Oct 07, 2014 4:46 pm
				
				Merely a prototype, but functioning. Maybe someone has interest to beautify the graphics and add functionality
			Code: Select all
option base 1 ! option angle degrees
graphics ! graphics clear .8,.8,.8
fill color .8,.8,.8 ! draw color 0,0,0
draw font size 30 ! running=0
button "start" title "start" at 20,400 size 120,40
dt=0 ! nrec=0
iter: 
if not running then
  if not button_pressed("start") then iter
  button "start" set title "stop"
  if file_exists("abcd0") then file "abcd0" delete
  if file_exists("abcd1") then file "abcd1" delete
  running=1 ! set gps on
  do ! get gps lat y ! until y>0   ' get a gps fix
  ho=current_hour()
  ts=get_seconds(ho)
  end if
if button_pressed("start") then
  file "abcd0" print nrec
  button "start" delete
  set gps off
  tachograph(nrec)
  stop
  end if
t=get_seconds(ho)
if t<to+dt then goto iter
repeat: if not gps_count() then repeat  ' new gps message
while gps_count()>0 ! get gps spd v ! end while
if v<0 then repeat
to=t ! nrec+=1
file "abcd1" print t-ts,3.6*v
fill rect 50,100 to 600,200
draw text t-ts & "  " & 3.6*v at 50,100
goto iter
end
def tachograph(nrec)
                 
dim t(nrec),v(nrec)
vmax=0 ! m=160 ! lab=.8
for i=1 to nrec
  file "abcd1" input t(i),v(i)
  if vmax<v(i) then vmax=v(i)
  next i
draw color 0,0,.8 ! fill color .9,.9,.9
fill circle m,m size 150
fill color 0,0,.8
fill circle m,m size 3
draw size 3
draw circle m,m size 150
draw size 1
draw line 10,m to 310,m
draw line m,10 to m,310
draw size 2 ! draw dash 5
draw font size 10
if vmax<30 then
  fac=5
  draw color .2,.2,.2
  draw circle m,m size 50
  draw circle m,m size 100
  draw text "10" at 154,110
  draw text "20" at 154,60
  draw text "30" at 154,12
  else
  fac=1
  draw color 1,0,0
  draw circle m,m size 30
  draw circle m,m size 50
  draw color .5,0,0
  draw circle m,m size 80
  draw circle m,m size 120
  draw color .2,.2,.2
  draw text "30" at 154,130
  draw text "50" at 154,110
  draw text "80" at 154,80
  draw text "120" at 148,40
  draw text "150" at 148,12
end if
da=350/t(nrec) ! a=0 ! vgem=v(1)
draw color 0,0,0 ! draw size 1
draw dash 0
draw to m,m
for i=2 to nrec
  a+=da ! vgem=lab*v(i)+(1-lab)*vgem
  x=160+fac*vgem*sin(a)
  y=160-fac*vgem*cos(a)
  draw line to x,y
  next i
end def
def get_seconds(ho)
h=current_hour()-ho
m=current_minute()
s=current_second()
return 3600*h+60*m+s
end def