Hola comunidad tengo el siguiente codigo que es un control pid, el cual controla las rpm de un cooler para enfriar al ds1820.
Tengo dos botones los cuales quiero usar para subir o bajar el setpoint, pero al armar todo y pulsar los botones lo pasa nada ni baja ni sube el setpoint, no se en que le estoy errando si me echan una mano se lo agradeceria. Desde ya mucchas gracias.
El codigo:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <PID_v1.h>
#include <LiquidCrystal.h>
//Definitions
#define FAN 9
#define ONE_WIRE_BUS 8
#define CRITICAL 50.00
LiquidCrystal lcd(12, 11, 13, 5,6,7);
const int SetTempUp = 4;
const int SetTempDown = 2;
int TempButtonUpState = 0;
int TempButtonDownState = 0;
int lastTempButtonState = 0;
int TemButtonCounter = 0;
//Setup Temperature Sensor
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//Setup PID
double Setpoint, Input, Output;
double aggKp=40, aggKi=2, aggKd=10;
double consKp=20, consKi=1, consKd=5;
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, REVERSE);
int timeCounter;
void setup()
{
Serial.begin(9600);
Serial.println("Start");
//Temperature Setup
sensors.begin();
sensors.requestTemperatures();
Input = sensors.getTempCByIndex(0);
Setpoint = 01;
pinMode(SetTempUp, INPUT);
pinMode(SetTempDown, INPUT);
//PID Setup
myPID.SetMode(AUTOMATIC);
//TCCR2B = TCCR2B & 0b11111000 | 0x01;
//Setup Pins
pinMode(FAN, OUTPUT);
//Set up Interupts
attachInterrupt(0, pulls, CHANGE);
//interface
timeCounter=0;
lcd.begin(16, 2);
}
void loop()
{
timeCounter++;
sensors.requestTemperatures();
Input=sensors.getTempCByIndex(0);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Temp:");
lcd.print((int)Input);
lcd.setCursor(9,0);
lcd.print("RPM:");
lcd.print((int)Output*4.7059);
lcd.setCursor(1,1);
lcd.print("Set:");
lcd.print((int)Setpoint);
double gap = abs(Setpoint-Input);
if(gap<1)
{
myPID.SetTunings(consKp, consKi, consKd);
}
else
{
myPID.SetTunings(aggKp, aggKi, aggKd);
}
myPID.Compute();
Serial.print(timeCounter);
Serial.print(" ");
Serial.print(Input);
Serial.print(" ");
Serial.println(Output);
analogWrite(FAN,255);
if (Input<CRITICAL)
analogWrite(FAN,Output);
else
analogWrite(FAN,255);
}
void pulls()
{
TempButtonUpState = digitalRead(SetTempUp);
if (TempButtonUpState != lastTempButtonState) {
if (TempButtonUpState == HIGH)
{
TemButtonCounter++;
}
}
lastTempButtonState = TempButtonUpState;
Setpoint=TemButtonCounter;
TempButtonDownState = digitalRead(SetTempDown);
if (SetTempDown != lastTempButtonState) {
if (SetTempDown == HIGH)
{
TemButtonCounter--;
}
}
lastTempButtonState = SetTempDown;
Setpoint=TemButtonCounter;
}