Hallo Leute,
wie ich die Google Suche auch drehe und wende, ich komme leider auf keinen grünen Zweig.
Darum wende ich mich nun an euch, in der Hoffnung auf Hilfe.
Ich kämpfe momentan mit der OneButton Library.
Über zwei Taster (Sollwert auf und ab) wird die Solltemperatur eingestellt.
Bei einmaligem drücken eines Tasters (cklick), soll der Sollwert um 0,1°C auf bzw. ab springen.
Bei gedrücktem Taster (longpress) springt der sollwert in 1°C Schritten auf und ab.
Das funktioniert soweit auch, nur die Klickfunktion ist extrem langsam.
Es dauert ca. 2 Sekunden bis sich der sollwert von z.B. 20.00°C auf 20.10°C ändert.
Man könnte natürlich auch damit leben... aber mir gefällt es nicht.
Bin für jede Hilfe dankbar! =)
Hier mein Code
#include <PID_v1.h>
#include <Wire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <OneButton.h>
#define output_pwm_h 6 // pwm output heating
#define output_pwm_c 5 // pwm output cooling
#define ONE_WIRE_BUS 7 // Define the OneWire bus (DS18b20) to pin 7
#define output_fan_cool 8
#define output_fan_cool_heatsink 9
#define output_fan_heat 10
/*******************************************************************
/ Connecting OneButton io's *
/******************************************************************/
OneButton buttonset_up(12, true); // setpoint "up" to pin 12
OneButton buttonset_down(11, true); // setpoint "down" to pin 11
/*******************************************************************
/ Set the LCD address to 0x27 for a 16 chars and 2 line display *
/******************************************************************/
LiquidCrystal_I2C lcd(0x27, 16, 2);
/*******************************************************************
/ Connect Temperature Sensor to OneWire bus *
/******************************************************************/
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
/*******************************************************************
/Define Variables we'll be connecting to *
/******************************************************************/
double Setpoint=22, Input, Output_h, Output_c;
/*******************************************************************
* Specify the links and initial tuning parameters *
/******************************************************************/
double Kph=2, Kih=5, Kdh=1; // heating
double Kpc=2, Kic=6, Kdc=1; // cooling
PID myPID_h(&Input, &Output_h, &Setpoint, Kph, Kih, Kdh, DIRECT); // heating
PID myPID_c(&Input, &Output_c, &Setpoint, Kpc, Kic, Kdc, REVERSE); // cooling
//==================================================================================================================//
void setup()
{
/*******************************************************************
* Set default output state *
/******************************************************************/
digitalWrite(output_fan_cool,LOW);
digitalWrite(output_fan_cool_heatsink,LOW);
digitalWrite(output_fan_heat,LOW);
/******************************************************************
/ turn the PID on *
/*****************************************************************/
myPID_h.SetMode(AUTOMATIC); // heating
myPID_c.SetMode(AUTOMATIC); // cooling
sensors.begin();
lcd.begin();
lcd.backlight();
lcd.print("PID control");
lcd.setCursor(0,1);
lcd.print("v 1.0");
delay(3000);
lcd.clear();
lcd.print("ph:2 ih:5 dh:1");
lcd.setCursor(0,1);
lcd.print("pc:2 ic:6 dc:1");
delay(4000);
//Serial.begin(9600); // uncomment for debugging in serial monitor
lcd.clear();
// link the button 1 functions.
buttonset_up.attachClick(clickup);
buttonset_up.attachDuringLongPress(longPressup);
// link the button 2 functions.
buttonset_down.attachClick(clickdown);
buttonset_down.attachDuringLongPress(longPressdown);
}
void loop()
{
/******************************************************************
/ keep watching the ObeButtonpush buttons *
/*****************************************************************/
buttonset_up.tick();
buttonset_down.tick();
/******************************************************************
/ read sensor input *
/*****************************************************************/
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
/******************************************************************
/ Display sensor input on LCD *
/*****************************************************************/
lcd.setCursor(0, 0);
lcd.print("Ist :");
lcd.setCursor(6, 0);
lcd.print(sensors.getTempCByIndex(0));
lcd.print("\337C");
/******************************************************************
/ Display setpoint on LCD *
/*****************************************************************/
lcd.setCursor(0,1);
lcd.print("Soll:");
lcd.setCursor(6,1);
lcd.print(Setpoint);
lcd.print("\337C");
/******************************************************************
/ get controller output (pwm) *
/*****************************************************************/
Input = temperature;
myPID_h.Compute(); // heating controller
analogWrite(output_pwm_h, Output_h);
myPID_c.Compute(); // cooling controller
analogWrite(output_pwm_c, Output_c);
/******************************************************************
/ fan controller *
/*****************************************************************/
if (Output_c > 0) digitalWrite(output_fan_cool, HIGH);
else digitalWrite(output_fan_cool, LOW);
if (Output_h > 0) digitalWrite(output_fan_heat, HIGH);
else digitalWrite(output_fan_heat, LOW);
/******************************************************************
/ Display setpoint and act. temperature on serial monitor *
/ (uncomment for debugging in serial monitor) *
/*****************************************************************/
/*
Serial.print("Soll: ");
Serial.print(Setpoint);
Serial.println("°C");
Serial.print("Ist : ");
Serial.print(temperature);
Serial.println("°C");
Serial.print("y_h : ");
Serial.println(Output_h);
Serial.print("y_c : ");
Serial.println(Output_c);
Serial.println("");
Serial.println("===================");
Serial.println("");
*/
}
/******************************************************************
/ Get user input for setpoints *
/*****************************************************************/
void clickup() {
Setpoint+=0.1;
}
void longPressup() {
Setpoint++;
}
void clickdown() {
Setpoint-=0.1;
}
void longPressdown() {
Setpoint--;
}