commit 9c7f050f11e8187fb5d8e6ee374896482fe194d5
Author: Starbeamrainbowlabs <sbrl@starbeamrainbowlabs.com>
Date:   Sat Nov 20 15:17:23 2021 +0000

    It works...... we think.
    
    "Simple problems require complex solutions" --Brothgar, on YouTube

diff --git a/analog_channel_scanner/analog_channel_scanner.ino b/analog_channel_scanner/analog_channel_scanner.ino
new file mode 100644
index 0000000..2b3b880
--- /dev/null
+++ b/analog_channel_scanner/analog_channel_scanner.ino
@@ -0,0 +1,110 @@
+#include <bitset>
+#include <string>
+
+#define MULTIPLEX_PINA	D5
+#define MULTIPLEX_PINB	D6
+#define MULTIPLEX_PINC	D7
+
+#define ANALOG_PIN		A0
+
+/*
+000	0
+001	1
+010	2
+011	3
+100	4
+101	5
+110	6
+111	7
+*/
+
+#define SOIL_A			4
+#define SOIL_B			6
+#define WATER_LEVEL_A	0
+#define WATER_LEVEL_B	1
+
+
+// Ref https://stackoverflow.com/a/523737/1460422
+#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
+
+int soilPin = D3;
+
+float referenceVoltage = 3.3;
+
+
+
+void read_analog(int channel) {
+	
+	const char* bin = std::bitset<8>(channel).to_string().c_str();
+	
+	bool b0 = bin[7] == u'1';
+	bool b1 = bin[6] == u'1';
+	bool b2 = bin[5] == u'1';
+	
+	Serial.print(" binary ");
+	Serial.print(bin);
+	Serial.print(" b2 ");
+	Serial.print(b2);
+	Serial.print(" b1 ");
+	Serial.print(b1);
+	Serial.print(" b0 ");
+	Serial.print(b0);
+	Serial.print(" ");
+	
+	digitalWrite(MULTIPLEX_PINA, b2);
+	digitalWrite(MULTIPLEX_PINB, b1);
+	digitalWrite(MULTIPLEX_PINC, b0);
+	
+	int rawValue = analogRead(ANALOG_PIN);
+	float parsedValue = ((float)rawValue) / 1024.0 * referenceVoltage;
+	
+	Serial.print(" channel ");
+	Serial.print(channel);
+	Serial.print(" raw value ");
+	Serial.print(rawValue);
+	Serial.print(" parsed value: ");
+	Serial.print(parsedValue);
+	Serial.println("V");
+}
+
+void setup() {
+	Serial.begin(9600);
+	Serial.println("Analogue Soil Sensor Test");
+	Serial.println("=========================");
+	pinMode(MULTIPLEX_PINA, OUTPUT);
+	pinMode(MULTIPLEX_PINB, OUTPUT);
+	pinMode(MULTIPLEX_PINC, OUTPUT);
+}
+
+void loop() {
+	Serial.print("C0");
+	read_analog(0);
+	Serial.print("C1");
+	read_analog(1);
+	Serial.print("C2");
+	read_analog(2);
+	Serial.print("C3");
+	read_analog(3);
+	Serial.print("C4");
+	read_analog(4);
+	Serial.print("C5");
+	read_analog(5);
+	Serial.print("C6");
+	read_analog(6);
+	Serial.print("C7");
+	read_analog(7);
+	
+	
+	// Serial.print("SOIL A: ");
+	// read_analog(SOIL_A);
+	// Serial.print("SOIL B: ");
+	// read_analog(SOIL_B);
+	// Serial.print("WATER LEVEL A: ");
+	// read_analog(WATER_LEVEL_A);
+	// Serial.print("WATER LEVEL B: ");
+	// read_analog(WATER_LEVEL_B);
+	
+	Serial.println("\n\n\n\n\n");
+	
+	delay(5000);
+}
diff --git a/autoplant/autoplant.ino b/autoplant/autoplant.ino
new file mode 100644
index 0000000..b8b8a32
--- /dev/null
+++ b/autoplant/autoplant.ino
@@ -0,0 +1,76 @@
+#include <bitset>
+#include <string>
+
+#define MULTIPLEX_PINA	D5
+#define MULTIPLEX_PINB	D6
+#define MULTIPLEX_PINC	D7
+
+#define ANALOG_PIN		A0
+
+/*
+000	0
+001	1
+010	2
+011	3
+100	4
+101	5
+110	6
+111	7
+*/
+
+#define SOIL_A			0
+#define SOIL_B			6
+#define WATER_LEVEL_A	2
+#define WATER_LEVEL_B	4
+
+
+// Ref https://stackoverflow.com/a/523737/1460422
+#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
+
+int soilPin = D3;
+
+float referenceVoltage = 3.3;
+
+
+
+float read_analog(int channel) {
+	
+	const char* bin = std::bitset<8>(channel).to_string().c_str();
+	
+	bool b0 = bin[7] == u'1';
+	bool b1 = bin[6] == u'1';
+	bool b2 = bin[5] == u'1';
+	
+	digitalWrite(MULTIPLEX_PINA, b2);
+	digitalWrite(MULTIPLEX_PINB, b1);
+	digitalWrite(MULTIPLEX_PINC, b0);
+	
+	int rawValue = analogRead(ANALOG_PIN);
+	float parsedValue = ((float)rawValue) / 1024.0 * referenceVoltage;
+		
+	return parsedValue;
+}
+
+void setup() {
+	Serial.begin(9600);
+	Serial.println("Analogue Soil Sensor Test");
+	Serial.println("=========================");
+	pinMode(MULTIPLEX_PINA, OUTPUT);
+	pinMode(MULTIPLEX_PINB, OUTPUT);
+	pinMode(MULTIPLEX_PINC, OUTPUT);
+}
+
+void loop() {
+	Serial.print("SOIL_A\t");
+	Serial.println(read_analog(SOIL_A));
+	Serial.print("SOIL_B\t");
+	Serial.println(read_analog(SOIL_B));
+	Serial.print("WATER_LEVEL_A\t");
+	Serial.println(read_analog(WATER_LEVEL_A));
+	Serial.print("WATER_LEVEL_B\t");
+	Serial.println(read_analog(WATER_LEVEL_B));
+	
+	Serial.println("\n\n\n\n\n");
+	
+	delay(5000);
+}
