3 * @purpose Implementation of Pressure reading functions
7 #include "../bbb_pin.h"
8 #include "../log.h" // For Fatal()
10 #define PSI_TO_KPA 6.89475729
13 * Get the ADC number of a Pressure sensor
14 * @param id - Id of the sensor
15 * @returns ADC as defined in bbb_pin_defines.h
17 static int Pressure_GetADC(int id)
28 Fatal("Unknown Pressure id %d", id);
29 return -1; // Should never happen
34 * Convert an ADC voltage into a Pressure reading
35 * @param id - Sensor ID
36 * @param adc - ADC reading
37 * @returns Pressure in kPa
39 double Pressure_Callibrate(int id, int adc)
41 //double voltage = ADC_TO_VOLTS(adc); // convert reading to voltage
48 static const double Vs = 5e3; // In mVs
49 static const double Pmin = 0.0;
50 static const double Pmax = 150.0 * PSI_TO_KPA;
51 double Vout = ADC_TO_MVOLTS(adc);
52 return ((Vout - 0.1*Vs)/(0.8*Vs))*(Pmax - Pmin) + Pmin;
55 return (200.0 * (adc / ADC_RAW_MAX));
57 Fatal("Unknown Pressure id %d", id);
58 return -1; // Should never happen
64 * Initialise a Pressure sensor
65 * @param name - Ignored
66 * @param id - The id of the Pressure sensor
67 * @returns true on success, false on error
69 bool Pressure_Init(const char * name, int id)
71 return ADC_Export(Pressure_GetADC(id));
75 * Cleanup a Pressure Sensor
76 * @param id - The id of the sensor to cleanup
77 * @returns true on success, false on failure
79 bool Pressure_Cleanup(int id)
81 ADC_Unexport(Pressure_GetADC(id));
86 * Read a Pressure Sensor
87 * @param id - id of the sensor to read
88 * @param value - Where the value will be stored on a successful read
89 * @returns true on success, false on failure
91 bool Pressure_Read(int id, double * value)
93 //static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
94 //pthread_mutex_lock(&mutex);
96 if (ADC_Read(Pressure_GetADC(id), value))
98 *value = Pressure_Callibrate(id, *value);
101 //pthread_mutex_unlock(&mutex);