Working weather station

Dependencies:   DHT MS5637 NRF2401P mbed

Committer:
ree5yd
Date:
Fri Jun 12 14:18:48 2015 +0000
Revision:
0:47c7fddba92c
Working weather station!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ree5yd 0:47c7fddba92c 1 #include "mbed.h"
ree5yd 0:47c7fddba92c 2 #include "ms5637.h"
ree5yd 0:47c7fddba92c 3 #include "DHT.h"
ree5yd 0:47c7fddba92c 4 #include "NRF2401P.h"
ree5yd 0:47c7fddba92c 5 #include "nRF24l01.h"
ree5yd 0:47c7fddba92c 6
ree5yd 0:47c7fddba92c 7 ms5637 ms(PTC9,PTC8); // i2c pins used
ree5yd 0:47c7fddba92c 8 Serial pc(USBTX, USBRX); // local terminal interface
ree5yd 0:47c7fddba92c 9 AnalogIn ldr(PTB3);
ree5yd 0:47c7fddba92c 10 DHT sensor(PTE5,SEN11301P);
ree5yd 0:47c7fddba92c 11 Serial myarduino(PTE0, PTE1);
ree5yd 0:47c7fddba92c 12
ree5yd 0:47c7fddba92c 13 int main (void) {
ree5yd 0:47c7fddba92c 14 //pc.baud(921600); // set up USB serial speed
ree5yd 0:47c7fddba92c 15
ree5yd 0:47c7fddba92c 16 // set up the ms5637
ree5yd 0:47c7fddba92c 17 pc.printf("\n\nInitializing the MS5637..\n");
ree5yd 0:47c7fddba92c 18 ms.cmd_reset();
ree5yd 0:47c7fddba92c 19 pc.printf("Ready\n");
ree5yd 0:47c7fddba92c 20
ree5yd 0:47c7fddba92c 21 float Vo;
ree5yd 0:47c7fddba92c 22 // float R = 10000; // 10k
ree5yd 0:47c7fddba92c 23 // float Vin = 3.3; // input from 3V3
ree5yd 0:47c7fddba92c 24
ree5yd 0:47c7fddba92c 25 int err;
ree5yd 0:47c7fddba92c 26 printf("\r\n Test program");
ree5yd 0:47c7fddba92c 27 printf("\r\n******************\r\n");
ree5yd 0:47c7fddba92c 28
ree5yd 0:47c7fddba92c 29 //NRF
ree5yd 0:47c7fddba92c 30 long long addr1=0xAB01CD; // setup address - any 5 byte number - same as RX
ree5yd 0:47c7fddba92c 31 int channel =0x10; // [0-126] setup channel, must be same as RX
ree5yd 0:47c7fddba92c 32 bool txOK;
ree5yd 0:47c7fddba92c 33 char msg[32];
ree5yd 0:47c7fddba92c 34 char ackData[32];
ree5yd 0:47c7fddba92c 35 char len;
ree5yd 0:47c7fddba92c 36
ree5yd 0:47c7fddba92c 37 // Setup
ree5yd 0:47c7fddba92c 38 NRF2401P nrf1(PTD2,PTD3, PTD1,PTD5, PTD0); //mosi, miso, sclk, csn, ce)
ree5yd 0:47c7fddba92c 39 nrf1.quickTxSetup(channel, addr1); // sets nrf24l01+ as transmitter
ree5yd 0:47c7fddba92c 40 printf("set up complete \n\r");
ree5yd 0:47c7fddba92c 41 //
ree5yd 0:47c7fddba92c 42
ree5yd 0:47c7fddba92c 43 //initialise data to be sent
ree5yd 0:47c7fddba92c 44 char bufferL[50];
ree5yd 0:47c7fddba92c 45 char bufferT[50];
ree5yd 0:47c7fddba92c 46 char bufferP[50];
ree5yd 0:47c7fddba92c 47 char bufferH[50];
ree5yd 0:47c7fddba92c 48
ree5yd 0:47c7fddba92c 49 int nL;
ree5yd 0:47c7fddba92c 50 int nT;
ree5yd 0:47c7fddba92c 51 int nP;
ree5yd 0:47c7fddba92c 52 int nH;
ree5yd 0:47c7fddba92c 53
ree5yd 0:47c7fddba92c 54 myarduino.baud(9600);
ree5yd 0:47c7fddba92c 55
ree5yd 0:47c7fddba92c 56 wait(1); // wait 1 second for device stable status
ree5yd 0:47c7fddba92c 57
ree5yd 0:47c7fddba92c 58 while(1) {
ree5yd 0:47c7fddba92c 59 // Humidity and temperature DHT11 sensor
ree5yd 0:47c7fddba92c 60 err = sensor.readData();
ree5yd 0:47c7fddba92c 61 if (err == 0) {
ree5yd 0:47c7fddba92c 62 printf("\n\r\n\rHumidity is %4.2f \r\n",sensor.ReadHumidity());
ree5yd 0:47c7fddba92c 63 printf("Temperature is %4.2f C \r\n",sensor.ReadTemperature(CELCIUS));
ree5yd 0:47c7fddba92c 64 } else {
ree5yd 0:47c7fddba92c 65 while ( err != 0 ) {
ree5yd 0:47c7fddba92c 66 err = sensor.readData();
ree5yd 0:47c7fddba92c 67 }
ree5yd 0:47c7fddba92c 68 printf("\n\r\n\rHumidity is %4.2f \r\n",sensor.ReadHumidity());
ree5yd 0:47c7fddba92c 69 printf("Temperature is %4.2f C \r\n",sensor.ReadTemperature(CELCIUS));
ree5yd 0:47c7fddba92c 70 }
ree5yd 0:47c7fddba92c 71
ree5yd 0:47c7fddba92c 72 // Temperature and pressure sensor ms
ree5yd 0:47c7fddba92c 73 double Temp2 = ms.calcTemp(); //calculate press and temp, then returns current temperature in degC
ree5yd 0:47c7fddba92c 74 double Press = ms.calcPressure(); //calculate press and temp, then returns current pressure in mb
ree5yd 0:47c7fddba92c 75 double GetPress = ms.getPressure(); //returns current pressure in mb. Does no calculations. Ususally done after calcTemp()
ree5yd 0:47c7fddba92c 76
ree5yd 0:47c7fddba92c 77 pc.printf("Temp: %.2f degC\n\r", Temp2);
ree5yd 0:47c7fddba92c 78 pc.printf("Barometer: %.1f mB %.3f in/Hg\n\r", Press, Press * 0.0295301);
ree5yd 0:47c7fddba92c 79
ree5yd 0:47c7fddba92c 80 // Light Sensor LDR
ree5yd 0:47c7fddba92c 81 Vo = ldr.read();
ree5yd 0:47c7fddba92c 82 // float Rt = (Vo*R)/(Vin - Vo);
ree5yd 0:47c7fddba92c 83 // float FTC = (powf(10,5.57644))*(powf(Rt,-1.211743));
ree5yd 0:47c7fddba92c 84 // float Lux = FTC*10.76;
ree5yd 0:47c7fddba92c 85 // FAULTY:float pd = (-3.4099 *10000000)*(Vo)*Vo + (3.1612e5)*(Vo) - 266.5672;
ree5yd 0:47c7fddba92c 86 float pd = 1.7833/Vo;
ree5yd 0:47c7fddba92c 87 printf("Sensor reading (Vo): %f V\r\n", Vo);
ree5yd 0:47c7fddba92c 88 printf("Sensor reading (power density): %f W/m^2\r\n\r\n", pd);
ree5yd 0:47c7fddba92c 89
ree5yd 0:47c7fddba92c 90 // printf("FTC: %f\r\n",FTC);
ree5yd 0:47c7fddba92c 91 // printf("Lux: %f\r\n\r\n",Lux);
ree5yd 0:47c7fddba92c 92
ree5yd 0:47c7fddba92c 93 wait(2);
ree5yd 0:47c7fddba92c 94
ree5yd 0:47c7fddba92c 95
ree5yd 0:47c7fddba92c 96 //Light
ree5yd 0:47c7fddba92c 97 sprintf(msg, "l%0.3fL\n\r",pd);
ree5yd 0:47c7fddba92c 98 txOK= nrf1.transmitData(msg,strlen(msg));
ree5yd 0:47c7fddba92c 99 printf("L sent \n\r");
ree5yd 0:47c7fddba92c 100
ree5yd 0:47c7fddba92c 101 // read ack data if available
ree5yd 0:47c7fddba92c 102 if (nrf1.isAckData()) {
ree5yd 0:47c7fddba92c 103 len= nrf1.getRxData(ackData); // len is number of bytes in ackData
ree5yd 0:47c7fddba92c 104 ackData[len]=0;
ree5yd 0:47c7fddba92c 105 printf("%s\n\r\n\r",ackData);
ree5yd 0:47c7fddba92c 106 }
ree5yd 0:47c7fddba92c 107 //Temperature
ree5yd 0:47c7fddba92c 108 sprintf(msg, "t%0.3fT\n\r",Temp2);
ree5yd 0:47c7fddba92c 109 txOK= nrf1.transmitData(msg,strlen(msg));
ree5yd 0:47c7fddba92c 110 printf("T sent \n\r");
ree5yd 0:47c7fddba92c 111
ree5yd 0:47c7fddba92c 112 // read ack data if available
ree5yd 0:47c7fddba92c 113 if (nrf1.isAckData()) {
ree5yd 0:47c7fddba92c 114 len= nrf1.getRxData(ackData); // len is number of bytes in ackData
ree5yd 0:47c7fddba92c 115 ackData[len]=0;
ree5yd 0:47c7fddba92c 116 printf("%s\n\r\n\r",ackData);
ree5yd 0:47c7fddba92c 117 }
ree5yd 0:47c7fddba92c 118 //Pressure
ree5yd 0:47c7fddba92c 119 sprintf(msg, "p%0.3fP\n\r",Press);
ree5yd 0:47c7fddba92c 120 txOK= nrf1.transmitData(msg,strlen(msg));
ree5yd 0:47c7fddba92c 121 printf("P sent \n\r");
ree5yd 0:47c7fddba92c 122
ree5yd 0:47c7fddba92c 123 // read ack data if available
ree5yd 0:47c7fddba92c 124 if (nrf1.isAckData()) {
ree5yd 0:47c7fddba92c 125 len= nrf1.getRxData(ackData); // len is number of bytes in ackData
ree5yd 0:47c7fddba92c 126 ackData[len]=0;
ree5yd 0:47c7fddba92c 127 printf("%s\n\r\n\r",ackData);
ree5yd 0:47c7fddba92c 128 }
ree5yd 0:47c7fddba92c 129 //Humidity
ree5yd 0:47c7fddba92c 130 sprintf(msg, "h%0.3fH\n\r",sensor.ReadHumidity());
ree5yd 0:47c7fddba92c 131 txOK= nrf1.transmitData(msg,strlen(msg));
ree5yd 0:47c7fddba92c 132 printf("H sent \n\r\n\r");
ree5yd 0:47c7fddba92c 133
ree5yd 0:47c7fddba92c 134 // read ack data if available
ree5yd 0:47c7fddba92c 135 if (nrf1.isAckData()) {
ree5yd 0:47c7fddba92c 136 len= nrf1.getRxData(ackData); // len is number of bytes in ackData
ree5yd 0:47c7fddba92c 137 ackData[len]=0;
ree5yd 0:47c7fddba92c 138 printf("%s\n\r\n\r",ackData);
ree5yd 0:47c7fddba92c 139 }
ree5yd 0:47c7fddba92c 140 }
ree5yd 0:47c7fddba92c 141 }