Moin.
Ich schreibe gerade an einem Code von einer Wetterstation. Im laufe der Zeit bin ich jedoch darauf gestoßen, dass man doch bitte C-strings anstatt die string klasse und pointer verwenden soll, etc. .
Hier seht ihr einen Ausschnitt, bei dem ich die Inputs engegen nehme. Ich würde den Code gerne so effizient wie möglich machen, also schönen Code schreiben bzw. möglichst viel Speicher und RAM sparen.
const int magnet_pin = 2; //digital
const int voltage_pin = 2; //analog
const unsigned long package_frequency = 10000;
class Windrad {
float _voltage;
int _measure_times;
unsigned long _prev_millisVoltage;
int _revolutions;
bool _cooldown = false;
unsigned long _prev_millisPackage;
public:
bool package_available;
String package;
Windrad();
void checkInputs();
};
Windrad::Windrad() {
pinMode(magnet_pin, INPUT);
}
void Windrad::checkInputs() {
if (millis() - _prev_millisVoltage > 100) {
_voltage += analogRead(voltage_pin);
_measure_times++;
_prev_millisVoltage = millis();
}
if (digitalRead(magnet_pin) and _cooldown == false) {
_revolutions++;
_cooldown = true;
}
else if (!digitalRead(magnet_pin) and _cooldown == true){
_cooldown = false;
}
if (millis() - _prev_millisPackage >= package_frequency) {
package_available = true;
package = String(_voltage/_measure_times) + "," + String(_revolutions);
_voltage = 0;
_measure_times = 0;
_revolutions = 0;
_prev_millisPackage = millis();
}
}
Windrad windrad;
void setup() {
Serial.begin(9600);
Serial.println("\nWetterstation");
}
void loop() {
windrad.checkInputs();
if (windrad.package_available) {
Serial.println(windrad.package);
windrad.package_available = false;
}
}
wenn noch unklarheiten sind würde ich den Code noch kurz erläutern. Verbesserungen erwünscht!
LG
Johann