EIoT LoRa node 3 - Working ok

Dependencies:   BufferedSerial SX1276GenericLib-node1 mbed

Fork of DISCO-L072CZ-LRWAN1_LoRa_node by Santiago Gil

Committer:
sagilar
Date:
Mon Oct 08 16:11:17 2018 +0000
Revision:
13:671d602e700e
EIoT LoRa node 3

Who changed what in which revision?

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