La librería wiringPi tiene funciones para leer voltajes usando un ADC mcp3002, para esto basta hacer una llamada a la función mcp3002Setup al inicio del programa y llamar analogRead para obtener las lecturas de los sensores conectados al mcp3002.
Pero en la ultima versión publicada antes de ser declarado obsoleto (2.50), se le agrego un error al código que ejecuta corrimiento hacia la izquierda 8 bits, siendo que anteriormente recorría 7 bits que era lo correcto.
Este error ocasiona lecturas erróneas, por ejemplo usando un potenciometro entre el mínimo y la mitad varia entre 3 y ~890 al pasa la mitad parece que regresa a 0 y vuelve a subir.
Ya publique la corrección en github y envié un pull request a el github de wiringPi, aquí comparto el enlace.
https://github.com/WiringPi/WiringPi/pull/78 La otra alternativa es crear una función equivalente para no tener que re-compilar wiringPi, por ejemplo:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <wiringPiSPI.h> | |
#include <iostream> | |
using namespace std; | |
int customAnalogRead(int spiPort) | |
{ | |
unsigned char spiData[2]; | |
spiData[0] = 0b11110000; | |
spiData[1] = 0; | |
wiringPiSPIDataRW(spiPort,spiData,2); | |
return ((spiData[0] << 7) | (spiData[1] >> 1)) & 0x3FF; | |
} | |
int main() | |
{ | |
const auto port = 0; | |
wiringPiSPISetup (port, 1000000); | |
cout << customAnalogRead(port); | |
return 0; | |
} |