Guest User

Untitled

a guest
Oct 7th, 2014
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.90 KB | None | 0 0
  1. #include "LowPower.h"
  2. #include <RFM69.h>
  3. #include <SPI.h>
  4. #include <SPIFlash.h>
  5. #include <dht.h>
  6.  
  7. #include <SFE_BMP180.h>
  8. #include <Wire.h>
  9.  
  10.  
  11. #define NODEID      103
  12. #define NETWORKID   100
  13. #define GATEWAYID   1
  14. #define FREQUENCY   RF69_433MHZ // (others: RF69_433MHZ, RF69_868MHZ)
  15. #define KEY         "thisIsEncryptKey"
  16. #define SERIAL_BAUD 115200
  17. #define ACK_TIME    30  // of ms to wait for an ack
  18.  
  19. #define LED_PIN     9
  20. #define DHT_PIN     6
  21.  
  22. #define ALTITUDE  218.0
  23.  
  24.  
  25. SFE_BMP180 pressure;
  26.  
  27.  
  28.  
  29. dht DHT;
  30. RFM69 radio;
  31.  
  32. int series = 1;
  33.  
  34. typedef struct {      
  35.      int           sensorId;
  36.      int           series;
  37.      int           volts;
  38.      int           values[4];
  39. } Payload;
  40. Payload data;
  41.  
  42.  
  43. void setup() {
  44.   Serial.begin(SERIAL_BAUD);
  45.  
  46.   pinMode(4, OUTPUT);
  47.   digitalWrite(4, HIGH);
  48.   delay(1000);
  49.  
  50.   pinMode(3, INPUT);
  51.  
  52.   radio.initialize(FREQUENCY,NODEID,NETWORKID);
  53.   radio.setHighPower(); //uncomment only for RFM69HW!
  54.   radio.encrypt(KEY);
  55.  
  56.   pressure.begin();
  57.  
  58.  
  59. }
  60.  
  61.  
  62.  
  63. void loop() {  
  64.  
  65.     digitalWrite(4, HIGH);
  66.     delay(1000);
  67.    
  68.     if(series > 1000) {
  69.         series = 1;
  70.     }
  71.  
  72.    
  73.     data.sensorId = NODEID;
  74.     data.series = series;
  75.     data.volts = readVcc();
  76.    
  77.     //setSensorValues();
  78.     setSensorValuePressure();
  79.    
  80.     data.values[1] = analogRead(3)/16;
  81.    
  82.    
  83.  
  84.     if (radio.sendWithRetry(GATEWAYID, (const void*)(&data), sizeof(data))) {
  85.           Serial.print("ok");      
  86.     } else {
  87.           Serial.print("nothing");
  88.     }
  89.    
  90.     Serial.println();
  91.     Serial.println(data.values[1]);
  92.     Serial.println();
  93.  
  94.     series++;
  95.    
  96.     Blink(LED_PIN, 3);
  97.    
  98.     Serial.flush();
  99.    
  100.    
  101.     digitalWrite(4, LOW);
  102.     radio.sleep();
  103.     for (int i=0; i <= 37; i++) { // 37 - 5min
  104.         LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
  105.     }
  106.  
  107. }
  108.  
  109. void setSensorValues() {
  110.  
  111.     int chk = DHT.read22(DHT_PIN);
  112.  
  113.     data.values[0] = DHT.temperature * 100;
  114.     data.values[1] = DHT.humidity * 100;
  115. }
  116.  
  117. void setSensorValuePressure()
  118. {
  119.   char status;
  120.   double T,P,p0,a;
  121.   int pressureTemp = 0;
  122.   int pressurePress = 0;
  123.  
  124.  
  125.  
  126.   status = pressure.startTemperature();
  127.   if (status != 0)
  128.   {
  129.     delay(status);
  130.  
  131.  
  132.  
  133.     status = pressure.getTemperature(T);
  134.     if (status != 0)
  135.     {
  136.       // Print out the measurement:
  137.       Serial.print("temperature: ");
  138.       Serial.print(T,2);
  139.       Serial.print(" deg C, ");
  140.      
  141.  
  142.       status = pressure.startPressure(0);
  143.       if (status != 0)
  144.       {
  145.        
  146.         delay(status);
  147.  
  148.        
  149.         status = pressure.getPressure(P,T);
  150.         if (status != 0)
  151.         {
  152.          
  153.          
  154.           p0 = pressure.sealevel(P,ALTITUDE);
  155.           Serial.print("relative (sea-level) pressure: ");
  156.           Serial.print(p0,2);
  157.           Serial.print(" mb, ");
  158.          
  159.           Serial.println("");
  160.          
  161.           //int pressureTemp = T * 100;
  162.           //int pressurePress = p0;
  163.          
  164.           data.values[2] = T * 100;
  165.           data.values[3] = p0;
  166.  
  167.          
  168.         }
  169.         else Serial.println("error retrieving pressure measurement\n");
  170.       }
  171.       else Serial.println("error starting pressure measurement\n");
  172.     }
  173.     else Serial.println("error retrieving temperature measurement\n");
  174.   }
  175.   else Serial.println("error starting temperature measurement\n");
  176.  
  177. }
  178.  
  179.  
  180. long readVcc() {
  181.     long result;
  182.     // Read 1.1V reference against AVcc
  183.     ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  184.     delay(2); // Wait for Vref to settle
  185.     ADCSRA |= _BV(ADSC); // Convert
  186.     while (bit_is_set(ADCSRA,ADSC));
  187.     result = ADCL;
  188.     result |= ADCH<<8;
  189.     result = 1126400L / result; // Back-calculate AVcc in mV
  190.     return result;
  191. }
  192.  
  193.  
  194. void Blink(byte PIN, int DELAY_MS)
  195. {
  196.   pinMode(PIN, OUTPUT);
  197.   digitalWrite(PIN,HIGH);
  198.   delay(DELAY_MS);
  199.   digitalWrite(PIN,LOW);
  200. }
Advertisement
Add Comment
Please, Sign In to add comment