Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "LowPower.h"
- #include <RFM69.h>
- #include <SPI.h>
- #include <SPIFlash.h>
- #include <dht.h>
- #include <SFE_BMP180.h>
- #include <Wire.h>
- #define NODEID 103
- #define NETWORKID 100
- #define GATEWAYID 1
- #define FREQUENCY RF69_433MHZ // (others: RF69_433MHZ, RF69_868MHZ)
- #define KEY "thisIsEncryptKey"
- #define SERIAL_BAUD 115200
- #define ACK_TIME 30 // of ms to wait for an ack
- #define LED_PIN 9
- #define DHT_PIN 6
- #define ALTITUDE 218.0
- SFE_BMP180 pressure;
- dht DHT;
- RFM69 radio;
- int series = 1;
- typedef struct {
- int sensorId;
- int series;
- int volts;
- int values[4];
- } Payload;
- Payload data;
- void setup() {
- Serial.begin(SERIAL_BAUD);
- pinMode(4, OUTPUT);
- digitalWrite(4, HIGH);
- delay(1000);
- pinMode(3, INPUT);
- radio.initialize(FREQUENCY,NODEID,NETWORKID);
- radio.setHighPower(); //uncomment only for RFM69HW!
- radio.encrypt(KEY);
- pressure.begin();
- }
- void loop() {
- digitalWrite(4, HIGH);
- delay(1000);
- if(series > 1000) {
- series = 1;
- }
- data.sensorId = NODEID;
- data.series = series;
- data.volts = readVcc();
- //setSensorValues();
- setSensorValuePressure();
- data.values[1] = analogRead(3)/16;
- if (radio.sendWithRetry(GATEWAYID, (const void*)(&data), sizeof(data))) {
- Serial.print("ok");
- } else {
- Serial.print("nothing");
- }
- Serial.println();
- Serial.println(data.values[1]);
- Serial.println();
- series++;
- Blink(LED_PIN, 3);
- Serial.flush();
- digitalWrite(4, LOW);
- radio.sleep();
- for (int i=0; i <= 37; i++) { // 37 - 5min
- LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
- }
- }
- void setSensorValues() {
- int chk = DHT.read22(DHT_PIN);
- data.values[0] = DHT.temperature * 100;
- data.values[1] = DHT.humidity * 100;
- }
- void setSensorValuePressure()
- {
- char status;
- double T,P,p0,a;
- int pressureTemp = 0;
- int pressurePress = 0;
- status = pressure.startTemperature();
- if (status != 0)
- {
- delay(status);
- status = pressure.getTemperature(T);
- if (status != 0)
- {
- // Print out the measurement:
- Serial.print("temperature: ");
- Serial.print(T,2);
- Serial.print(" deg C, ");
- status = pressure.startPressure(0);
- if (status != 0)
- {
- delay(status);
- status = pressure.getPressure(P,T);
- if (status != 0)
- {
- p0 = pressure.sealevel(P,ALTITUDE);
- Serial.print("relative (sea-level) pressure: ");
- Serial.print(p0,2);
- Serial.print(" mb, ");
- Serial.println("");
- //int pressureTemp = T * 100;
- //int pressurePress = p0;
- data.values[2] = T * 100;
- data.values[3] = p0;
- }
- else Serial.println("error retrieving pressure measurement\n");
- }
- else Serial.println("error starting pressure measurement\n");
- }
- else Serial.println("error retrieving temperature measurement\n");
- }
- else Serial.println("error starting temperature measurement\n");
- }
- long readVcc() {
- long result;
- // Read 1.1V reference against AVcc
- ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
- delay(2); // Wait for Vref to settle
- ADCSRA |= _BV(ADSC); // Convert
- while (bit_is_set(ADCSRA,ADSC));
- result = ADCL;
- result |= ADCH<<8;
- result = 1126400L / result; // Back-calculate AVcc in mV
- return result;
- }
- void Blink(byte PIN, int DELAY_MS)
- {
- pinMode(PIN, OUTPUT);
- digitalWrite(PIN,HIGH);
- delay(DELAY_MS);
- digitalWrite(PIN,LOW);
- }
Advertisement
Add Comment
Please, Sign In to add comment