77 lines
1.4 KiB
Arduino
77 lines
1.4 KiB
Arduino
|
#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);
|
||
|
}
|