rpirena/pressure.awk

39 lines
833 B
Awk
Raw Permalink Normal View History

#! /usr/bin/awk -f
BEGIN {
maxP = 1050
minP = -100
}
/^H/{ t=$2 }
/^P/ {
Word1 = strtonum($2)
Word2 = strtonum($3)
Word3 = strtonum($4)
Word4 = strtonum($5)
D1 = strtonum($6)
D2 = strtonum($7)
if (D2<10) next
C1 = rshift(Word1, 1)
C2 = or(lshift(and(Word3, 0x3f), 6), and(Word4, 0x3f))
C3 = rshift(Word4, 6)
C4 = rshift(Word3, 6)
C5 = or(lshift(and(Word1, 1), 10), rshift(Word2, 6))
C6 = and(Word2, 0x3f)
UT1 = 8*C5+20224
dT = D2 - UT1
Temperature = 0.1*(200 + dT*(C6+50)/1024)
OFF = C2*4 + ((C4-512)*dT)/4096
SENS = C1 + (C3*dT)/1024 + 24576
X = (SENS * (D1-7168))/16384 - OFF
Pressure = 0.1*(X*10/32 + 2500)
if (Pressure >= minP && Pressure <= maxP) {
printf "P%s %u %6.2f %7.2f\n", $1, t, Temperature, Pressure
}
}