Go Down

Topic: Problemas con MAX6675 (Read 305 times) previous topic - next topic

Rodrigox14

Estimados.

Estoy haciendo un horno de medición de pt-100 y termocuplas tipo K, con una pantalla TFT de 4.3" y además con datalogger, pero tengo un problema con la termocupla.

Compre una interfaz MAX6675 de olimex, ya cargue la libreria max6675.h y estoy abriendo el ejemplo que trae la librería, y al verificar la correcta escritura en el programa me arroja el siguiente error:


no matching function for call to 'MAX6675::MAX6675(int&, int&, int&)'

In file included from olimexino_tc_serial.pde:4:
/Applications/Arduino.app/Contents/Resources/Java/libraries/MAX6675/max6675.h:9: error: expected `)' before 'SCLK'
/Applications/Arduino.app/Contents/Resources/Java/libraries/MAX6675/max6675.h:14: error: 'int8_t' does not name a type
/Applications/Arduino.app/Contents/Resources/Java/libraries/MAX6675/max6675.h:15: error: 'uint8_t' does not name a type
olimexino_tc_serial:11: error: no matching function for call to 'MAX6675::MAX6675(int&, int&, int&)'
/Applications/Arduino.app/Contents/Resources/Java/libraries/MAX6675/max6675.h:7: note: candidates are: MAX6675::MAX6675()
/Applications/Arduino.app/Contents/Resources/Java/libraries/MAX6675/max6675.h:7: note:                 MAX6675::MAX6675(const MAX6675&)


Este es el codigo que estoy usando (el ejemplo que viene con la librería)

Code: [Select]
#include "max6675.h"

//Pins for the Olimexino-328
int thermoDO = 12;
int thermoCS = 7;
int thermoCLK = 13;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

void setup() {
  Serial.begin(9600);

 
  Serial.println("MAX6675 test");
  // wait for MAX chip to stabilize
  delay(500);
}

void loop() {
  // basic readout test, just print the current temp
 
   Serial.print("C = ");
   Serial.println(thermocouple.readCelsius());
   Serial.print("F = ");
   Serial.println(thermocouple.readFarenheit());
 
   delay(1000);
}


Alguna idea del porque me pasa esto? he leído que es por la versión del arduino, y descargue la 1.0 y tampoco me corre.

Espero sus comentarios, gracias

surbyte

Podrías además haber puesto el enlace de la librería que mencionas asi facilitas las cosas y podemos reproducir tu error al 100%.

Rodrigox14

Disculpa, aqui esta el Enlace de descarga.

Es de descarga automatica

surbyte

Gracias rodrigo ahora lo veo.

Rodrigox14

Gracias espero tu respuesta.

surbyte

#5
Mar 10, 2015, 03:48 pm Last Edit: Mar 10, 2015, 03:49 pm by surbyte
Ningún problema tuve lo que demuestra que tienes mal cargada la librería

Code: [Select]
"C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-size"  "C:\Users\Ricardo\Documents\Arduino_Build\MAX6675/MAX6675.elf"
   text    data     bss     dec     hex filename
    466       0       9     475     1db C:\Users\Ricardo\Documents\Arduino_Build\MAX6675/MAX6675.elf
Binary sketch size: 466 bytes (of a 32256 byte maximum, 1.44 percent).
Estimated memory use: 9 bytes (of a 2048 byte maximum, 0.44 percent).


Esa ha sido mi respueta

Mira en arduino\libraries
Debe decir
MAX6675 en mayúsculas
y dentro solo esto


Rodrigox14

Gracias Surbyte, efectivamente, debí de tener alguna confusión con la librería, ahora me reconoce la librería, te lo agradezco... lo que si ahora me arroja un error de SerialUSB was not declares in this scope.

Traté de reemplazar Serial.USB.print por Serial.print y me arroja un error de compilación:

In file included from olimexinostm32_tc_serial.pde:4:
C:\Program Files (x86)\arduino-1.5.6-r2-windows\arduino-1.5.6-r2\libraries\MAX6675STM32/max6675.h:16: error: 'byte' does not name a type


Ahora no se si es problema de computador, porque utilizo un MAC y una maquina virtual de windows 7, en ambos realice la prueba, y me arroja el mismo resultado. Influye que utilice un MAC?

surbyte

#7
Mar 10, 2015, 05:51 pm Last Edit: Mar 10, 2015, 05:53 pm by surbyte
Pero en el sketch que publicaste en el post#1 eso no esta.
Cual es el código?
Intenta con
Code: [Select]
#include <Arduino.h>

Rodrigox14

mira inserta este código y luego verifica el programa, aparecerá error de compilación, lo he hecho en 2 computadores y me aparece lo mismo

Code: [Select]
#include "max6675.h"

//Pins for the Olimexino-328
int thermoDO = 12;
int thermoCS = 7;
int thermoCLK = 13;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

void setup() {
  Serial.begin(9600);

 
  Serial.println("MAX6675 test");
  // wait for MAX chip to stabilize
  delay(500);
}

void loop() {
  // basic readout test, just print the current temp
 
   Serial.print("C = ");
   Serial.println(thermocouple.readCelsius());
   Serial.print("F = ");
   Serial.println(thermocouple.readFarenheit());
 
   delay(1000);
}

Rodrigox14

Lo he probado con Arduino 1.0 y Arduino 0023 y nada, también con una versión BETA

surbyte

#10
Mar 10, 2015, 07:32 pm Last Edit: Mar 10, 2015, 08:21 pm by surbyte
Ahora me da problemas a mi.
Estoy revisando.

Ahora me sale tu error
Code: [Select]
D:/Dropbox/Arduino/Libraries/olimexinostm32_tc_serial/olimexinostm32_tc_serial.ino:15:3: error: 'SerialUSB' was not declared in this scope

pero fue cuando comenté #include "Arduino.h" porque ya había editado "Wprogram.h" aunque me sigue dando error como si estuviera. Muy raro!!!

Bueno encontré los problemas: Librería de la epoca de los dinosaurios.
Muchas cosas que hoy no se usan o cuyas librerías estas incorporadas al Arduino. Ejemplo byte, delay.h, etc.
Ajustando todo para que funcione.

surbyte

#11
Mar 10, 2015, 08:26 pm Last Edit: Mar 10, 2015, 08:28 pm by surbyte
Bien resultado final

Código principal

Code: [Select]
// this example is public domain.
// www.ladyada.net/learn/sensors/thermocouple

#include <MAX6675.h>

//Pins for the Olimexino-stm32
int thermoDO    = 12;
int thermoCS    =  4;
int thermoCLK   = 13;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

void setup() {
   
  Serial.begin(9600);
  Serial.println("MAX6675 test");
  // wait for MAX chip to stabilize
  delay(500);
}

void loop() {
  // basic readout test, just print the current temp
 
   Serial.print("C = ");
   Serial.println(thermocouple.readCelsius());
   Serial.print("F = ");
   Serial.println(thermocouple.readFarenheit());
 
   delay(1000);
}



Librería MAX6675.h

Code: [Select]
// this library is public domain. enjoy!
// www.ladyada.net/learn/sensors/thermocouple


#include <Arduino.h>
//#include <inttypes.h>

class MAX6675 {
 public:
  MAX6675(int8_t SCLK, int8_t CS, int8_t MISO);

  double readCelsius();
  double readFarenheit();
 private:
  int8_t sclk, miso, cs;
  byte spiread();
};


Librería MAX6675.cpp
Code: [Select]
// this library is public domain. enjoy!
// www.ladyada.net/learn/sensors/thermocouple

#include <Arduino.h>
//#include <inttypes.h>

#include "MAX6675.h"

MAX6675::MAX6675(int8_t SCLK, int8_t CS, int8_t MISO) {
  sclk = SCLK;
  cs = CS;
  miso = MISO;

  //define pin modes
  pinMode(cs, OUTPUT);
  pinMode(sclk, OUTPUT);
  pinMode(miso, INPUT);

  digitalWrite(cs, HIGH);
}
double MAX6675::readCelsius(void) {

  uint16_t v;

  digitalWrite(cs, LOW);
  delayMicroseconds(1000);

  v = spiread();
  v <<= 8;
  v |= spiread();

  digitalWrite(cs, HIGH);

  if (v & 0x4) {
    // uh oh, no thermocouple attached!
    return NAN;
    //return -100;
  }

  v >>= 3;

  return v*0.25;
}

double MAX6675::readFarenheit(void) {
  return readCelsius() * 9.0/5.0 + 32;
}

byte MAX6675::spiread(void) {
  int i;
  byte d = 0;

  for (i=7; i>=0; i--)
  {
    digitalWrite(sclk, LOW);
    delayMicroseconds(1000);
    if (digitalRead(miso)) {
      //set the bit to 0 no matter what
      d |= (1 << i);
    }

    digitalWrite(sclk, HIGH);
    delayMicroseconds(1000);
  }

  return d;
}


IMPORTANTE: todos los archivos con mayúscula. Directorio, .h y .cpp todos MAX6675

Go Up