Skip to content

Instantly share code, notes, and snippets.

@dewomser
Created October 13, 2020 15:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dewomser/1fd11c2362b1062225b5a3a0f083d556 to your computer and use it in GitHub Desktop.
Save dewomser/1fd11c2362b1062225b5a3a0f083d556 to your computer and use it in GitHub Desktop.
Parametrierbarer 2-Punktregler mit Hysterese. Test mit Arduino duemill… und Feuchtefühler
/*
Analog input, analog output, serial output
2 Punktregler mit Hysterese
*/
// These constants won't change. They're used to give names
// to the pins used:
const int analogInPin = A0; // Analog input pin that the poti is attached to
const int digitalOutPin = 9; // Digital output pin that the buzzer is attached to
int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (analog out)
String inputString = ""; // a String to hold incoming data
bool stringComplete = false; // whether the string is complete
String isdauer = "0";
int hysterese = 5;
void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
pinMode (analogOutPin, OUTPUT);
inputString.reserve(200);
}
void loop() {
// read the analog in value:
sensorValue = analogRead(analogInPin);
// map it to the range of the analog out:
outputValue = map(sensorValue, 0, 1023, 0, 255);
// change the analog out v if (outputValue < inputString )
if ( outputValue < isdauer.toInt() ) {
digitalWrite(analogOutPin, HIGH);
}
else if ( outputValue > isdauer.toInt() + hysterese ) {
digitalWrite(digitalOutPin, LOW);
}
// else {
// digitalWrite(analogOutPin, LOW); }
// print the results to the serial monitor:
Serial.print("sensor = " );
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);
// wait 2 milliseconds before the next loop
// for the analog-to-digital converter to settle
// after the last reading
// print the string when a newline arrives:
if (stringComplete) {
Serial.println(inputString);
isdauer = inputString;
// clear the string:
inputString = "";
stringComplete = false;
}
delay(1000);
}
/*
SerialEvent occurs whenever a new data comes in the hardware serial RX. This
routine is run between each time loop() runs, so using delay inside loop can
delay response. Multiple bytes of data may be available.
*/
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag so the main loop can
// do something about it:
if (inChar == '\n') {
stringComplete = true;
}
}
}
@dewomser
Copy link
Author

Neu ist die Hysterese default Wert 5

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment