Я новичок в Arduino, а также в C ++. Хочу сделать систему полива растений. Я нашел этот учебник по измерению влажности почвы . Он на чешском, но вы можете найти код для работы с датчиком влажности. Эта программа работает без проблем. Я решил включить этот алгоритм в класс, чтобы он был более читабельным для меня. Я следил за учебником arduinos, чтобы создать собственную библиотеку .
MoistSensor.h
#ifndef MoistSensor_h
#define MoistSensor_h
#include "Arduino.h"
class MoistSensor {
public:
MoistSensor(int analogPin, int digitalPin, int vccPin);
void measure();
int getMoisture();
void setup();
private:
int _analogPin;
int _digitalPin;
int _vccPin;
int _moisture;
void convertMoisture(int analogValue);
};
#endif
MoistSensor. cpp
#include "MoistSensor.h"
#include "Arduino.h"
MoistSensor::MoistSensor(int analogPin, int digitalPin, int vccPin) {
_analogPin = analogPin;
_digitalPin = digitalPin;
_vccPin = vccPin;
Serial.println("constructor ok: " + analogPin);
Serial.println("constructor ok: " + digitalPin);
Serial.println("constructor ok: " + vccPin);
};
int MoistSensor::getMoisture() {
return _moisture;
};
void MoistSensor::measure() {
digitalWrite(_vccPin, HIGH);
delay(100);
Serial.println("Value: " + analogRead(_analogPin));
digitalWrite(_vccPin, LOW);
};
void MoistSensor::convertMoisture(int analogValue) {
if (analogValue <= 230) {
_moisture = 100;
}
else if (analogValue >= 650) {
_moisture = 0;
}
else {
_moisture = 100 - ((analogValue - 230 ) / 4.2);
}
};
void MoistSensor::setup() {
pinMode(_analogPin, INPUT);
pinMode(_digitalPin, INPUT);
pinMode(_vccPin, OUTPUT);
digitalWrite(_vccPin, LOW);
};
Исходный код Arduino :
#include <MoistSensor.h>
#define analogPin A0
#define digitalPin 3
#define vccPin 4
unsigned long time = 0;
MoistSensor sensor(analogPin, digitalPin, vccPin);
void setup() {
Serial.begin(9600);
sensor.setup();
}
void loop() {
if (millis() - time > 3000) {
sensor.measure();
time = millis();
}
}
Результат моей программы выглядит так: введите описание изображения здесь
Я использую Arduino NANO на процессоре ATmega328P (старый загрузчик).
Понятия не имею, что может быть не так.