blob: 5a50dde052d12d208f1a0fcc3a586d9195ebc609 (
plain)
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
|
/*
____ __________________________________ ____
/ __ \/ ____/_ __/ ____/ ____/_ __/ __ \/ __ \
/ / / / __/ / / / __/ / / / / / / / / /_/ /
/ /_/ / /___ / / / /___/ /___ / / / /_/ / _, _/
/___________/ __________/\____/ _____\__________|
/ __ )/ / / / _/ / / __ \/ _/ | / / ____/
/ __ / / / // // / / / / // // |/ / / __
/ /_/ / /_/ // // /___/ /_/ // // /| / /_/ /
/_____/\____/___/_____/_____/___/_/ |_/\____/
Ladue Horton Watkins High School Science Olympiad
Licensed under the Parity Public License
*/
#include <curveFitting.h>
const int LED_R = 8, LED_G = 10, LED_B = 12, THERM = 0; // Device component pins
const double R_k = 10000, V_in = 5, analog_max = 1023; // Device constants
// Analog to digital conversion
double a2d(int a) { return V_in * a / analog_max; }
int d2a(double d) { return d * analog_max / V_in; }
// Voltage to resistance conversion
double v2r(double V_out) { return R_k * (V_in / V_out - 1); }
double vol[100];
int con[100];
const int order = 2;
double coeff[order + 1];
void setup() {
Serial.begin(9600);
Serial.setTimeout(1000000);
Serial.println("Starting calibration");
Serial.println("Place sensor in water and enter the concentration into the console");
Serial.println("When you are finished, type c to continue");
int n = 0;
while (1) {
String s = Serial.readStringUntil('\n');
if (s == "c") break;
vol[n] = a2d(analogRead(THERM));
con[n] = s.toInt();
Serial.println(n);
Serial.println((double)vol[n]);
Serial.println(con[n]);
++n;
}
fitCurve(order, n, vol, con, coeff);
}
void loop() {
double v = a2d(analogRead(THERM));
double c = 0;
for (int i = order; i >= 0; --i) c = v*c + coeff[i];
Serial.println((double)c);
}
|