Resulta que le subi el codigo al arduino y eje ute el sof en el pc todo iva exelente me arojava buenas lecturas 22 grados ambas sondas al anbiente las toque con los dedos y me marcava 36 grados bastante presiso,
Pero al momento de activar la curva y volver a la pantalla principal la temperatura de mesddor de abajo ( precalentador ) entra en error y marca 001 y dice error probe cambiando fisocamente la conecion de cs0 y cs1 y igual aroja el mismo error
Como podria solucionar em problema gracias.
Uso las max6675 este es el codigo que estoy usando
Código: Seleccionar todo
//Arduino Rework Station 2.0 by Domingo
#include <MAX6675.h>
#include <PID_v1.h>
#define PreHeater 7
#define HotGun 8
#define FanHotGun 6
int CS0 =10; // CS pin on MAX6675
int CS1 = 11; // CS pin on MAX6675
int SO = 12; // SO pin of MAX6675
int SCK1 = 13; // SCK pin of MAX6675
int units = 1; // Units to readout temp (0 = ˚F, 1 = ˚C)
int var,var2;
float error1 = 0.0; // Temperature compensation error
float error2 = 0.0; // Temperature compensation error
float temp[2];
double varPid[5];
char* valPosition;
char delimiters[] = "!:,";
char StrPid[128];
unsigned long Time;
unsigned long TimeMax1;
unsigned long TimeMax2;
unsigned long TimeMotor;
unsigned long TimeLectura;
unsigned long TimeSerial;
unsigned long TimePidHorno;
MAX6675 temp0(CS0,SO,SCK1,units,error1);
MAX6675 temp1(CS1,SO,SCK1,units,error2);
static boolean StartPid=false;
char StrSP[3];
double Setpoint, Input, Output;
PID HotGunPid(&Input, &Output, &Setpoint, varPid[3], varPid[4],varPid[5], DIRECT);
int WindowSize = 1000;
unsigned long windowStartTime;
void setup() {
Time=millis();
TimeMax1=millis();
TimeMax2=millis();
TimeMotor=millis();
TimeLectura=millis();
TimeSerial=millis();
TimePidHorno=millis();
windowStartTime = millis();
pinMode(PreHeater, OUTPUT); //Preheater
pinMode(HotGun, OUTPUT); //HotGun
pinMode(FanHotGun, OUTPUT); //FanHotGun
HotGunPid.SetMode(MANUAL);
HotGunPid.SetOutputLimits(0, WindowSize);
Serial.begin(9600);
}
void readSerialString (char *strArray) {
int i = 0;
if(!Serial.available()) {
return;
}
while (Serial.available()) {
strArray[i] = Serial.read();
i++;
}
strArray[i] = 0; // indicate end of read string
}
void FanPwm()
{
if(Time>TimeMotor+30){ analogWrite(FanHotGun,int(var2)); TimeMotor=millis(); }
}
void loop() {
Time=millis();
if(Time>TimeMax1+420){ temp[0] = temp0.read_temp(1); TimeMax1=millis(); }
if(Time>TimeMax2+420){ temp[1] = temp1.read_temp(1); TimeMax2=millis(); }
if (Time>TimeSerial+30){
if(Serial.available()){
var = Serial.read();
switch (var) {
case 'P': // Precalentador ON
digitalWrite(PreHeater,HIGH);
break;
case 'p': // Precaletador OFF
digitalWrite(PreHeater,LOW);
break;
case 'H':
FanPwm(); //Motor Aire PWM
digitalWrite(HotGun,HIGH);
break;
case 'h':
digitalWrite(HotGun,LOW);
digitalWrite(FanHotGun,LOW);
break;
case 'F':
FanPwm();
break;
case 'f':
digitalWrite(FanHotGun,LOW);
break;
case 'l':
var2 = Serial.read();
break;
case 'N':
FanPwm();
StartPid=true;
HotGunPid.SetMode(AUTOMATIC);
break;
case 's':
StartPid=false;
HotGunPid.SetMode(MANUAL);
digitalWrite(HotGun,LOW);
break;
case 'T':
readSerialString(StrSP);
Setpoint=atoi(StrSP);
break;
case 'K':
readSerialString(StrPid);
valPosition = strtok(StrPid, delimiters);
for(int i = 0; i < 6; i++){
varPid[i] = atof(valPosition);
valPosition = strtok(NULL, delimiters);
}
break;
}
}
TimeSerial=millis();
}
if(StartPid==true){
if(Time>TimePidHorno+300){
Input = temp[0];
double gap = abs(Setpoint-Input);
if(gap<3)
{
HotGunPid.SetTunings(varPid[3], varPid[4], varPid[5]);
}
else
{
HotGunPid.SetTunings(varPid[0], varPid[1], varPid[2]);
}
HotGunPid.Compute();
TimePidHorno=millis();
}
unsigned long now = millis();
if(now - windowStartTime>WindowSize)
{
windowStartTime += WindowSize;
}
if(Output > (now - windowStartTime))
{
digitalWrite(HotGun,HIGH);
}
else
{
digitalWrite(HotGun,LOW);
}
}
if(Time>TimeLectura+1000){
Serial.print(temp[0] ,0);
Serial.print(":");
Serial.print(temp[1] ,0);
Serial.print(":");
Serial.print(Output,0);
Serial.println();
TimeLectura=millis();
}
}
