Working weather station
Dependencies: DHT MS5637 NRF2401P mbed
main.cpp
- Committer:
- ree5yd
- Date:
- 2015-06-12
- Revision:
- 0:47c7fddba92c
File content as of revision 0:47c7fddba92c:
#include "mbed.h" #include "ms5637.h" #include "DHT.h" #include "NRF2401P.h" #include "nRF24l01.h" ms5637 ms(PTC9,PTC8); // i2c pins used Serial pc(USBTX, USBRX); // local terminal interface AnalogIn ldr(PTB3); DHT sensor(PTE5,SEN11301P); Serial myarduino(PTE0, PTE1); int main (void) { //pc.baud(921600); // set up USB serial speed // set up the ms5637 pc.printf("\n\nInitializing the MS5637..\n"); ms.cmd_reset(); pc.printf("Ready\n"); float Vo; // float R = 10000; // 10k // float Vin = 3.3; // input from 3V3 int err; printf("\r\n Test program"); printf("\r\n******************\r\n"); //NRF long long addr1=0xAB01CD; // setup address - any 5 byte number - same as RX int channel =0x10; // [0-126] setup channel, must be same as RX bool txOK; char msg[32]; char ackData[32]; char len; // Setup NRF2401P nrf1(PTD2,PTD3, PTD1,PTD5, PTD0); //mosi, miso, sclk, csn, ce) nrf1.quickTxSetup(channel, addr1); // sets nrf24l01+ as transmitter printf("set up complete \n\r"); // //initialise data to be sent char bufferL[50]; char bufferT[50]; char bufferP[50]; char bufferH[50]; int nL; int nT; int nP; int nH; myarduino.baud(9600); wait(1); // wait 1 second for device stable status while(1) { // Humidity and temperature DHT11 sensor err = sensor.readData(); if (err == 0) { printf("\n\r\n\rHumidity is %4.2f \r\n",sensor.ReadHumidity()); printf("Temperature is %4.2f C \r\n",sensor.ReadTemperature(CELCIUS)); } else { while ( err != 0 ) { err = sensor.readData(); } printf("\n\r\n\rHumidity is %4.2f \r\n",sensor.ReadHumidity()); printf("Temperature is %4.2f C \r\n",sensor.ReadTemperature(CELCIUS)); } // Temperature and pressure sensor ms double Temp2 = ms.calcTemp(); //calculate press and temp, then returns current temperature in degC double Press = ms.calcPressure(); //calculate press and temp, then returns current pressure in mb double GetPress = ms.getPressure(); //returns current pressure in mb. Does no calculations. Ususally done after calcTemp() pc.printf("Temp: %.2f degC\n\r", Temp2); pc.printf("Barometer: %.1f mB %.3f in/Hg\n\r", Press, Press * 0.0295301); // Light Sensor LDR Vo = ldr.read(); // float Rt = (Vo*R)/(Vin - Vo); // float FTC = (powf(10,5.57644))*(powf(Rt,-1.211743)); // float Lux = FTC*10.76; // FAULTY:float pd = (-3.4099 *10000000)*(Vo)*Vo + (3.1612e5)*(Vo) - 266.5672; float pd = 1.7833/Vo; printf("Sensor reading (Vo): %f V\r\n", Vo); printf("Sensor reading (power density): %f W/m^2\r\n\r\n", pd); // printf("FTC: %f\r\n",FTC); // printf("Lux: %f\r\n\r\n",Lux); wait(2); //Light sprintf(msg, "l%0.3fL\n\r",pd); txOK= nrf1.transmitData(msg,strlen(msg)); printf("L sent \n\r"); // read ack data if available if (nrf1.isAckData()) { len= nrf1.getRxData(ackData); // len is number of bytes in ackData ackData[len]=0; printf("%s\n\r\n\r",ackData); } //Temperature sprintf(msg, "t%0.3fT\n\r",Temp2); txOK= nrf1.transmitData(msg,strlen(msg)); printf("T sent \n\r"); // read ack data if available if (nrf1.isAckData()) { len= nrf1.getRxData(ackData); // len is number of bytes in ackData ackData[len]=0; printf("%s\n\r\n\r",ackData); } //Pressure sprintf(msg, "p%0.3fP\n\r",Press); txOK= nrf1.transmitData(msg,strlen(msg)); printf("P sent \n\r"); // read ack data if available if (nrf1.isAckData()) { len= nrf1.getRxData(ackData); // len is number of bytes in ackData ackData[len]=0; printf("%s\n\r\n\r",ackData); } //Humidity sprintf(msg, "h%0.3fH\n\r",sensor.ReadHumidity()); txOK= nrf1.transmitData(msg,strlen(msg)); printf("H sent \n\r\n\r"); // read ack data if available if (nrf1.isAckData()) { len= nrf1.getRxData(ackData); // len is number of bytes in ackData ackData[len]=0; printf("%s\n\r\n\r",ackData); } } }