EIoT LoRa node 1 - Working ok

Dependencies:   BufferedSerial SX1276GenericLib-node1 mbed

Fork of DISCO-L072CZ-LRWAN1_LoRa_node by Santiago Gil

Committer:
sagilar
Date:
Mon Oct 08 16:10:55 2018 +0000
Revision:
13:289b91418e96
EIoT LoRa node 1

Who changed what in which revision?

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