blob: 18c6079d01d84ea245c78a55b8f2e2bf28553ced (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
/*
* Copyright © 2010 Keith Packard <keithp@keithp.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
package altosui;
import java.lang.*;
import java.text.*;
import java.util.HashMap;
import java.io.*;
import altosui.AltosConvert;
import altosui.AltosGPS;
public class AltosRecord {
int version;
String callsign;
int serial;
int flight;
int rssi;
int status;
int state;
int tick;
int accel;
int pres;
int temp;
int batt;
int drogue;
int main;
int flight_accel;
int ground_accel;
int flight_vel;
int flight_pres;
int ground_pres;
int accel_plus_g;
int accel_minus_g;
AltosGPS gps;
double time; /* seconds since boost */
/*
* Values for our MP3H6115A pressure sensor
*
* From the data sheet:
*
* Pressure range: 15-115 kPa
* Voltage at 115kPa: 2.82
* Output scale: 27mV/kPa
*
*
* 27 mV/kPa * 2047 / 3300 counts/mV = 16.75 counts/kPa
* 2.82V * 2047 / 3.3 counts/V = 1749 counts/115 kPa
*/
static final double counts_per_kPa = 27 * 2047 / 3300;
static final double counts_at_101_3kPa = 1674.0;
static double
barometer_to_pressure(double count)
{
return ((count / 16.0) / 2047.0 + 0.095) / 0.009 * 1000.0;
}
public double raw_pressure() {
return barometer_to_pressure(pres);
}
public double filtered_pressure() {
return barometer_to_pressure(flight_pres);
}
public double ground_pressure() {
return barometer_to_pressure(ground_pres);
}
public double filtered_altitude() {
return AltosConvert.pressure_to_altitude(filtered_pressure());
}
public double raw_altitude() {
return AltosConvert.pressure_to_altitude(raw_pressure());
}
public double ground_altitude() {
return AltosConvert.pressure_to_altitude(ground_pressure());
}
public double filtered_height() {
return filtered_altitude() - ground_altitude();
}
public double raw_height() {
return raw_altitude() - ground_altitude();
}
public double battery_voltage() {
return AltosConvert.cc_battery_to_voltage(batt);
}
public double main_voltage() {
return AltosConvert.cc_ignitor_to_voltage(main);
}
public double drogue_voltage() {
return AltosConvert.cc_ignitor_to_voltage(drogue);
}
/* Value for the CC1111 built-in temperature sensor
* Output voltage at 0°C = 0.755V
* Coefficient = 0.00247V/°C
* Reference voltage = 1.25V
*
* temp = ((value / 32767) * 1.25 - 0.755) / 0.00247
* = (value - 19791.268) / 32768 * 1.25 / 0.00247
*/
static double
thermometer_to_temperature(double thermo)
{
return (thermo - 19791.268) / 32728.0 * 1.25 / 0.00247;
}
public double temperature() {
return thermometer_to_temperature(temp);
}
double accel_counts_per_mss() {
double counts_per_g = Math.abs(accel_minus_g - accel_plus_g) / 2;
return counts_per_g / 9.80665;
}
public double acceleration() {
return (accel_plus_g - accel) / accel_counts_per_mss();
}
public double accel_speed() {
double speed = flight_vel / (accel_counts_per_mss() * 100.0);
return speed;
}
public String state() {
return Altos.state_name(state);
}
public static String gets(FileInputStream s) throws IOException {
int c;
String line = "";
while ((c = s.read()) != -1) {
if (c == '\r')
continue;
if (c == '\n') {
return line;
}
line = line + (char) c;
}
return null;
}
public AltosRecord(AltosRecord old) {
version = old.version;
callsign = old.callsign;
serial = old.serial;
flight = old.flight;
rssi = old.rssi;
status = old.status;
state = old.state;
tick = old.tick;
accel = old.accel;
pres = old.pres;
temp = old.temp;
batt = old.batt;
drogue = old.drogue;
main = old.main;
flight_accel = old.flight_accel;
ground_accel = old.ground_accel;
flight_vel = old.flight_vel;
flight_pres = old.flight_pres;
ground_pres = old.ground_pres;
accel_plus_g = old.accel_plus_g;
accel_minus_g = old.accel_minus_g;
gps = new AltosGPS(old.gps);
}
public AltosRecord() {
version = 0;
callsign = "N0CALL";
serial = 0;
flight = 0;
rssi = 0;
status = 0;
state = Altos.ao_flight_startup;
tick = 0;
accel = 0;
pres = 0;
temp = 0;
batt = 0;
drogue = 0;
main = 0;
flight_accel = 0;
ground_accel = 0;
flight_vel = 0;
flight_pres = 0;
ground_pres = 0;
accel_plus_g = 0;
accel_minus_g = 0;
gps = new AltosGPS();
}
}
|