It works...... we think.
"Simple problems require complex solutions" --Brothgar, on YouTube
This commit is contained in:
commit
9c7f050f11
2 changed files with 186 additions and 0 deletions
110
analog_channel_scanner/analog_channel_scanner.ino
Normal file
110
analog_channel_scanner/analog_channel_scanner.ino
Normal file
|
@ -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);
|
||||
}
|
76
autoplant/autoplant.ino
Normal file
76
autoplant/autoplant.ino
Normal file
|
@ -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);
|
||||
}
|
Loading…
Reference in a new issue