Soy nueva en esto de las clases y las librerías y estoy intentado llamar desde el .cpp de una librería en la que creo la clase “daq” (es para una data adquisition shield para arduino UNO) a una función de la librería MCP3208, en concreto anaogRead.
Os subo el .h y el .cpp de la librería que estoy creando, donde en el .cpp tengo entre los comentarios “//THISSSSSSSS” la llamada a la función analogRead que creo que estoy haciendo mal porque no me funciona aunque no me de error al compilar el *ino, es decir, en el puerto serie no me salen las tensiones que meto en los pines.
Os adjunto tb la librería del MCP3208.
Pd. ya he puesto este problema en el foro de inglés pero no ha habido éxito :(, a ver si aquí hay suerte.
Gracias chicos!
Pero si resolviste el problema y antes preguntaste por el, no te parece oportuno 1) referiste en el idioma del foro donde estas respondiendo. Foro en Español y 2) contarnos de como lo resolviste?
Hola surbite, siento las molestias, soy nueva aquí y estoy un poco perdida sobre cómo moverse, ya cogeré agilidad.
He realizado varias modificaciones desde que hice el comentario, así que directamente subo el archivo para que podáis verlo, básicamente o que he hecho ha sido copiar a parte de la librería de MCP3208 donde hace la transferencia de datos por SPI a mi .cpp, y lo más importante y que no había caído, es indicar cuál es el chip select, y definirlo comoo output y como high en el begin().
Os adjunto el *h, *cpp, *ino para mayor claridad.
*h
class daq {
private:
//Private functions and variables here. They can only be accessed
//by functions within the class - todas las variables definidas aquí comienzan
//por barra baja para reconocerlas fácilmente
uint8_t _cs; //éste es el chip select,
//tipo de dato unsigned integer de 8 bit
void cycle_clock();
uint8_t spiTransfer(uint8_t i);
public:
//Public functions and variables here. These can be accessed from
//outside the class
daq(): _cs(9){} // función constructora a la que no se le pasa nada y la inicializo poniendo que el chip select es el pon 10
bool begin(void); //ya se hará
int analogRead(uint8_t pin); //IMPLEMENTADA
void analogWrite(uint8_t pin, int val); //IMPLEMENTAR
uint8_t analogReadResolution(void); //HECHA
uint8_t analogWriteResolution(void); //HECHA
float analogReference(void); //HEHCA
float analogReadVol(uint8_t pin); //HACER
void analogWriteVol(uint8_t pin, float val); //CUANDO SE IMPLEMENTE LA SUYA
float analogReadResolutionVol(void); //HECHA
float analogWriteResolutionVol(void); //HECHA
void setSampleRate(int val);
void setTrigger(uint8_t mode);
};
*cpp
bool daq::begin(void) {
return true;
}
uint8_t daq::spiTransfer(uint8_t i) {
uint8_t d;
d = SPI.transfer(i);
return d;
}
int daq::analogRead(uint8_t pin){ //aquí se hace lo qe hace el MCP3208
pinMode(_cs, OUTPUT);
digitalWrite(_cs, HIGH);
SPI.begin();
uint8_t addr = 0b01100000 | ((pin & 0b111) << 2);
digitalWrite(_cs, LOW);
(void) spiTransfer(addr);
uint8_t b1 = spiTransfer(0);
uint8_t b2 = spiTransfer(0);
digitalWrite(_cs, HIGH);
return (b1 << 4) | (b2 >> 4);
}
Muchas gracias @Epm12 por tu aporte y me da mas gusto que lo resolvieras por tu cuenta.
Respecto de las normas ya te llevas bastente bien y para eso estamos los moderadores para ajustar ycorregir los pequeños detalles.
Acá somos algo mas estrictos que en el foro en inglés,ya que todo lo que debe ir con etiquetas pedimos y exigimos que asi sea.