the program have one sensor acs712 and moduleds1302

Dependencies:   FATFileSystem mbed

Committer:
RUBENTEC
Date:
Thu Jun 08 20:17:34 2017 +0000
Revision:
0:b82abca089ac
ds1302-bluetooth-acs712

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RUBENTEC 0:b82abca089ac 1 #include <mbed.h>
RUBENTEC 0:b82abca089ac 2 /** A Hall-Effect sensor for measuring current levels in a given path
RUBENTEC 0:b82abca089ac 3 *
RUBENTEC 0:b82abca089ac 4 * Can be used as a current detector
RUBENTEC 0:b82abca089ac 5 *
RUBENTEC 0:b82abca089ac 6 * Example:
RUBENTEC 0:b82abca089ac 7 * @code
RUBENTEC 0:b82abca089ac 8 * // Periodically read current levels in a circuit and
RUBENTEC 0:b82abca089ac 9 * // send output to PC terminal
RUBENTEC 0:b82abca089ac 10 *
RUBENTEC 0:b82abca089ac 11 * #include "mbed.h"
RUBENTEC 0:b82abca089ac 12 * #include "ACS712.h"
RUBENTEC 0:b82abca089ac 13 *
RUBENTEC 0:b82abca089ac 14 * // Connect the sensor analog output pin to mbed's AnalogIn pin
RUBENTEC 0:b82abca089ac 15 * ACS712 dev(p18);
RUBENTEC 0:b82abca089ac 16 * // Connect mbed to pc's USB port
RUBENTEC 0:b82abca089ac 17 * Serial pc(USBTX, USBRX);
RUBENTEC 0:b82abca089ac 18 *
RUBENTEC 0:b82abca089ac 19 * int main() {
RUBENTEC 0:b82abca089ac 20 * pc.printf("Sensor Log: \n\n\r");
RUBENTEC 0:b82abca089ac 21 * while (1) {
RUBENTEC 0:b82abca089ac 22 * // Read current from sensor and output to pc terminal
RUBENTEC 0:b82abca089ac 23 * pc.printf("Sensor Value: %2.2f A\n\r", dev);
RUBENTEC 0:b82abca089ac 24 * wait(0.200);
RUBENTEC 0:b82abca089ac 25 * }
RUBENTEC 0:b82abca089ac 26 * }
RUBENTEC 0:b82abca089ac 27 * @endcode
RUBENTEC 0:b82abca089ac 28 */
RUBENTEC 0:b82abca089ac 29
RUBENTEC 0:b82abca089ac 30 class ACS712 {
RUBENTEC 0:b82abca089ac 31
RUBENTEC 0:b82abca089ac 32 public:
RUBENTEC 0:b82abca089ac 33 /** Create a hall-effect sensor of the specified type
RUBENTEC 0:b82abca089ac 34 *
RUBENTEC 0:b82abca089ac 35 * @param _pin mbed AnalogIn pin where the analog output of sensor is connected
RUBENTEC 0:b82abca089ac 36 * @param voltDivRatio resistor voltage division ratio at output of the sensor
RUBENTEC 0:b82abca089ac 37 * @param type type of ACS712 sensor used
RUBENTEC 0:b82abca089ac 38 *
RUBENTEC 0:b82abca089ac 39 * @note Supported types of sensors:
RUBENTEC 0:b82abca089ac 40 */
RUBENTEC 0:b82abca089ac 41 ACS712(PinName _pin, float voltDivRatio = 1, short type = 5);
RUBENTEC 0:b82abca089ac 42
RUBENTEC 0:b82abca089ac 43 /** Read the value of the measured current in amps
RUBENTEC 0:b82abca089ac 44 *
RUBENTEC 0:b82abca089ac 45 * @return current value in amps
RUBENTEC 0:b82abca089ac 46 */
RUBENTEC 0:b82abca089ac 47 float read();
RUBENTEC 0:b82abca089ac 48 ACS712& operator=(const ACS712&);
RUBENTEC 0:b82abca089ac 49
RUBENTEC 0:b82abca089ac 50 /** Read the value of the measured current in amps
RUBENTEC 0:b82abca089ac 51 * Allows the ACS712 object to be used in a float context
RUBENTEC 0:b82abca089ac 52 *
RUBENTEC 0:b82abca089ac 53 * @return current value in amps
RUBENTEC 0:b82abca089ac 54 */
RUBENTEC 0:b82abca089ac 55 operator float() { return read(); }
RUBENTEC 0:b82abca089ac 56
RUBENTEC 0:b82abca089ac 57 private:
RUBENTEC 0:b82abca089ac 58 AnalogIn sensor;
RUBENTEC 0:b82abca089ac 59 float translate(float);
RUBENTEC 0:b82abca089ac 60 float ratio;
RUBENTEC 0:b82abca089ac 61 short type;
RUBENTEC 0:b82abca089ac 62
RUBENTEC 0:b82abca089ac 63 };
RUBENTEC 0:b82abca089ac 64
RUBENTEC 0:b82abca089ac 65 ACS712::ACS712(PinName _pin, float voltDivRatio, short sensorType) : sensor(_pin){
RUBENTEC 0:b82abca089ac 66 ratio = voltDivRatio;
RUBENTEC 0:b82abca089ac 67 type = sensorType;
RUBENTEC 0:b82abca089ac 68 }
RUBENTEC 0:b82abca089ac 69
RUBENTEC 0:b82abca089ac 70 float ACS712::translate(float val){
RUBENTEC 0:b82abca089ac 71 switch(type){
RUBENTEC 0:b82abca089ac 72 case 5:
RUBENTEC 0:b82abca089ac 73 return (val*ratio - 2.46*ratio)/(.185*ratio);
RUBENTEC 0:b82abca089ac 74 case 20:
RUBENTEC 0:b82abca089ac 75 return (val*ratio - 2.46*ratio)/(.1*ratio);
RUBENTEC 0:b82abca089ac 76 case 30:
RUBENTEC 0:b82abca089ac 77 return (val*ratio - 2.46*ratio)/(.066*ratio);
RUBENTEC 0:b82abca089ac 78 default:
RUBENTEC 0:b82abca089ac 79 return 999;
RUBENTEC 0:b82abca089ac 80 }
RUBENTEC 0:b82abca089ac 81 }
RUBENTEC 0:b82abca089ac 82
RUBENTEC 0:b82abca089ac 83
RUBENTEC 0:b82abca089ac 84 float ACS712::read(){
RUBENTEC 0:b82abca089ac 85 return ACS712::translate(sensor * 3.3);
RUBENTEC 0:b82abca089ac 86 }
RUBENTEC 0:b82abca089ac 87
RUBENTEC 0:b82abca089ac 88 ACS712& ACS712::operator=(const ACS712& rhs){
RUBENTEC 0:b82abca089ac 89 sensor = rhs.sensor;
RUBENTEC 0:b82abca089ac 90 ratio = rhs.ratio;
RUBENTEC 0:b82abca089ac 91 type = rhs.type;
RUBENTEC 0:b82abca089ac 92 return *this;
RUBENTEC 0:b82abca089ac 93 }