Remote I/O Sensor bus with AT&T flow and M2X cloud
Dependencies: DHT11 FXOS8700CQ MODSERIAL mbed
Fork of Avnet_ATT_Cellular_IOT by
Diff: sensors.cpp
- 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