Remote I/O Sensor bus with AT&T flow and M2X cloud

Dependencies:   DHT11 FXOS8700CQ MODSERIAL mbed

Fork of Avnet_ATT_Cellular_IOT by Avnet

Revision:
82:4e608375910a
Parent:
77:c65eae5b9958
--- a/sensors.cpp	Thu Nov 17 18:21:52 2016 +0000
+++ b/sensors.cpp	Tue Apr 17 21:29:20 2018 +0000
@@ -23,11 +23,42 @@
 #include "HTS221.h"
 #include "xadow_gps.h"
 #include <string>
+#include "DHT.h"
+#include<stdio.h>
+#include<math.h>
 
 //I2C for pmod sensors:
 #define Si1145_PMOD_I2C_ADDR   0xC0 //this is for 7-bit addr 0x60 for the Si7020
 #define Si7020_PMOD_I2C_ADDR   0x80 //this is for 7-bit addr 0x4 for the Si7020
 
+//for light code
+I2C akash(PTE25,PTE24);
+const int addr = 0x88;
+ // light code end
+ 
+//DHT code  
+DHT sensor(PTC10,DHT11);
+
+
+//For Ammeter and Voltmeter
+SPI SPI_Bus(PTC6,PTC7,PTC5); // (MOSI MISO CLK)setup SPI interface
+DigitalOut SPI_CS_AMM(PTC8);
+DigitalOut SPI_CS_VOLT(PTC9);
+
+
+
+float Amm_Out = 0;
+float Volt_Out = 0;
+int SPI_High_byte = 0;
+int SPI_Low_byte = 0; 
+float Temp_f_1 = 0.00;
+float Temp_f_2 = 0.00;
+int Temp_i_1 = 0;
+int Temp_i_2 = 0;
+int Temp_i_3 = 0;
+int Temp_i_4 = 0;
+char I2C_Cmd[3];
+
 // Storage for the data from the motion sensor
 SRAWDATA accel_data;
 SRAWDATA magn_data;
@@ -412,13 +443,184 @@
     }
 } //Init_HTS221()
 
+void Read_temp_humid()
+{
+int error = 0;
+    float h = 0.0f, c = 0.0f, f = 0.0f, k = 0.0f, dp = 0.0f, dpf = 0.0f;
+
+    
+        wait(2.0f);
+        error = sensor.readData();
+        PRINTF("Error: %d\n", error);
+        if (0 == error) {
+            c   = sensor.ReadTemperature(CELCIUS);
+            f   = sensor.ReadTemperature(FARENHEIT);
+            k   = sensor.ReadTemperature(KELVIN);
+            h   = sensor.ReadHumidity();
+            dp  = sensor.CalcdewPoint(c, h);
+            dpf = sensor.CalcdewPointFast(c, h);
+            PRINTF("Temperature in Celcius is %4.2f \n\r", c);
+            PRINTF("Humidity is %4.2f\n\r", h);
+            
+            sprintf(SENSOR_DATA.Temperature, "%.2f", f);
+            sprintf(SENSOR_DATA.Humidity, "%.2f", h);
+            
+       } else {
+            PRINTF("Error: %d\n", error);
+        }
+    
+}
+
+
+//Read_Ammeter
+
+void Read_Ammeter()
+{
+        SPI_High_byte = 0;
+        SPI_Low_byte = 0; 
+        Temp_f_1 = 0.00;
+        Temp_f_2 = 0.00;
+        Temp_i_1 = 0;
+        Temp_i_2 = 0;
+        Temp_i_3 = 0;
+        I2C_Cmd[0] = 0;
+        I2C_Cmd[1] = 0;
+        I2C_Cmd[2] = 0;
+      
+        
+        SPI_CS_AMM = 0;
+        
+        SPI_High_byte = SPI_Bus.write(0);
+        SPI_Low_byte = SPI_Bus.write(0);
+        
+        SPI_CS_AMM = 1;
+        
+        Temp_f_1 = (( SPI_High_byte & 0x1F ) << 7 ) | (( SPI_Low_byte >> 1 ));
+            
+        Temp_f_2= (float)(( Temp_f_1 * 1.00 ) / 4096.00 ); // Converting to volts
+        
+        Amm_Out = (float)(( Temp_f_2 - 0.50 ) * 1000.00);
+        
+       
+            //FRDM_UART_Debug.printf("Current value = %f mA\r\n", Amm_Out);
+            PRINTF("Current value = %f mA\r\n", Amm_Out);
+            sprintf(SENSOR_DATA.Ammeter, "%0.2f", Amm_Out);
+            
+        wait_ms(100);
+}
+
+
+
+void Read_Voltmeter()
+{
+     /*SPI_High_byte = 0;
+        SPI_Low_byte = 0; 
+        Temp_f_1 = 0.00;
+        Temp_f_2 = 0.00;
+        Temp_i_1 = 0;
+        Temp_i_2 = 0;
+        Temp_i_3 = 0;
+        I2C_Cmd[0] = 0;
+        I2C_Cmd[1] = 0;
+        I2C_Cmd[2] = 0;
+       
+        
+        SPI_CS_VOLT = 0;
+
+        SPI_High_byte = SPI_Bus.write(0);
+        SPI_Low_byte = SPI_Bus.write(0);
+        
+        SPI_CS_VOLT = 1;
+        
+        Temp_f_1 = ((SPI_High_byte & 0x1f) << 7) | ((SPI_Low_byte >> 1));
+        
+        Temp_f_2 = (float)((Temp_f_1 * 33.3405) / 4096); // show value in volts.
+        
+        Volt_Out = (float)(Temp_f_2 - 16.5)*2;
+        
+       
+            PRINTF("Voltage value = %f V\r\n", Volt_Out);
+            sprintf(SENSOR_DATA.Voltmeter, "%0.2f", Volt_Out);
+        wait_ms(100);  */
+        
+ 
+    
+        SPI_CS_VOLT=0;
+        //spi.write();
+        //pc.printf("%d\r\n",k);
+        int high_byte = SPI_Bus.write(0);
+        int low_byte = SPI_Bus.write(0);
+        SPI_CS_VOLT=1;
+        
+        float x = ((high_byte & 0x1f) << 7) | ((low_byte >> 1));
+        pc.printf("x= %f \r\n", x);
+        
+        float r= (float)((x * 33.3405) / 4096); // show value in volts.
+        float Volt_Out = (float)(r - 16.5)*2; 
+ 
+                PRINTF("Voltage value = %f V\r\n", Volt_Out);
+            sprintf(SENSOR_DATA.Voltmeter, "%0.2f", Volt_Out);
+     
+       
+    
+        
+         
+}
+
+
+
+//Read_light Code Start 
+
+void Read_light()
+{
+    
+// light code
+int exp,exp1,l=1;
+float z;
+float x;
+  
+    akash.frequency(100000); // set required i2c frequency
+    //pc.baud(9600); //set baud rate
+   // pc.printf("I2C started!\r\n");
+    char cmd[3]; //for byte transfer
+    
+//ambient light sensor code
+   cmd[0] = 0x01;   //configuration register
+   cmd[1]= 0xCC;    //configuration data
+    cmd[2]= 0x01;   //configuration data
+  akash.write(addr, cmd, 3);
+         cmd[0] = 0x00; // data register
+    akash.write(addr, cmd, 1);
+       wait(0.5);
+       akash.read(addr, cmd, 2);
+ 
+        exp= cmd[0]>>4;
+        exp1= (cmd[0]-(exp<<4))*256+cmd[1];
+        l=1;
+        for(int r=0;r<exp;r++){l=l*2;};
+        z= (exp1*l)/100;
+        //pc.printf("Lux = %.2f\n\r", z);  // printing LUX value
+        
+sprintf(SENSOR_DATA.Light, "%.2f", z);
+  
+  /*
+  
+        //sprintf(SENSOR_DATA.Temperature, "%0.2f", CTOF(hts221.readTemperature()));
+        sprintf(SENSOR_DATA.Temperature, "36.33");
+        //sprintf(SENSOR_DATA.Humidity, "%02d", hts221.readHumidity());
+        sprintf(SENSOR_DATA.Humidity, "99");
+    */    
+        
+} //Read_light()
+
+
+//Read_light Code Start 
+
+
 void Read_HTS221()
 {
-    if (bHTS221_present)
-    {
-        sprintf(SENSOR_DATA.Temperature, "%0.2f", CTOF(hts221.readTemperature()));
-        sprintf(SENSOR_DATA.Humidity, "%02d", hts221.readHumidity());
-    } //bHTS221_present
+
+
 } //Read_HTS221()
 
 bool bGPS_present = false;
@@ -652,18 +854,23 @@
 #ifdef USE_VIRTUAL_SENSORS
    pc.attach(&UsbUartRxCallback, MODSERIAL::RxIrq);
 #endif
-    Init_HTS221();
-    Init_Si7020();
-    Init_Si1145();
-    Init_motion_sensor();
-    Init_GPS();
+    //Init_HTS221();
+    //Init_Si7020();
+   // Init_Si1145();
+    //Init_motion_sensor();
+   // Init_GPS();
 } //sensors_init
 
 void read_sensors(void)
 {
-    Read_HTS221();
-    Read_Si7020();
-    Read_Si1145();
-    Read_motion_sensor();
-    Read_GPS();
+    Read_light();
+    Read_temp_humid();
+    Read_Ammeter();
+    Read_Voltmeter();
+    
+    //Read_HTS221();
+    //Read_Si7020();
+    //Read_Si1145();
+    //Read_motion_sensor();
+    //Read_GPS();
 } //read_sensors