aboutsummaryrefslogtreecommitdiff
path: root/Detector-Building.ino
diff options
context:
space:
mode:
authorAnthony Wang2022-02-11 15:25:16 -0600
committerAnthony Wang2022-02-11 15:25:16 -0600
commit0f1a894cfb90257f767a76417072243be8c20243 (patch)
treea92467a25ab75ba621332726e0da138c2f917140 /Detector-Building.ino
parent6a32a6ec293ebdefab104d24bd4b0a0c764c7d8a (diff)
Get code to actually compile
Diffstat (limited to 'Detector-Building.ino')
-rw-r--r--Detector-Building.ino64
1 files changed, 64 insertions, 0 deletions
diff --git a/Detector-Building.ino b/Detector-Building.ino
new file mode 100644
index 0000000..5a50dde
--- /dev/null
+++ b/Detector-Building.ino
@@ -0,0 +1,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);
+}