Merge branch 'master' of mjesec.ffzg.hr:/git/GroveSensor
[GroveSensor] / GroveSensor.ino
1 #include <Arduino.h>
2 #include <U8x8lib.h>
3
4 #include "DHT.h"
5
6 #include <Adafruit_BMP280.h>
7
8 U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
9
10 // U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // OLEDs without Reset of the Display
11  
12
13 #define DHTPIN 3     // what pin we're connected to
14 #define DHTTYPE DHT11   // DHT 11 
15
16 DHT dht(DHTPIN, DHTTYPE);
17
18
19 Adafruit_BMP280 bmp; // I2C
20
21
22 #define BUTTON_PIN 6 
23
24 #define SOUND_PIN A2
25 #define LIGHT_PIN A6
26  
27 void setup(void) {
28   //u8x8.setBusClock(100000);  // If you breakout other modules, please enable this line
29   u8x8.begin();
30   u8x8.setPowerSave(0);
31   u8x8.setFlipMode(1);
32
33   Serial.begin(115200);
34
35   dht.begin();
36
37   if (!bmp.begin()) {
38     Serial.println(F("Could not find a valid BMP280 sensor!"));
39   }
40
41   /* Default settings from datasheet. */
42   bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
43                   Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
44                   Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
45                   Adafruit_BMP280::FILTER_X16,      /* Filtering. */
46                   Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
47
48   pinMode(BUTTON_PIN, OUTPUT);
49   pinMode(SOUND_PIN, INPUT);
50   pinMode(LIGHT_PIN, INPUT);
51
52 }
53
54 unsigned long t;
55  
56 void loop(void) {
57
58   t = millis();
59
60   int oled_active = ! digitalRead(BUTTON_PIN);
61   u8x8.setPowerSave( oled_active );
62
63   float temp, humi;
64   temp = dht.readTemperature();
65   humi = dht.readHumidity();
66
67   u8x8.setFont(u8x8_font_chroma48medium8_r);
68   u8x8.setCursor(0, 0);
69   //u8x8.print("Temp:");
70   u8x8.print(temp);
71   u8x8.print("C ");
72   Serial.print("dht_temp=");
73   Serial.print(temp);
74
75   temp = bmp.readTemperature();
76   u8x8.print( temp );
77   Serial.print(",bmp_temp=");
78   Serial.print(temp);
79
80   u8x8.print(" ");
81
82   u8x8.setCursor(0,1 * 9);
83   u8x8.print("Humidity:");
84   u8x8.print(humi);
85   u8x8.print("%");
86   Serial.print(",dht_humidity=");
87   Serial.print(humi);
88
89   float pressure;
90   pressure = bmp.readPressure();
91
92   u8x8.setCursor(0,2 * 9);
93   u8x8.print( pressure );
94   Serial.print(",bmp_pressure=");
95   Serial.print(pressure);
96
97   unsigned long sumSquare;
98   for(int i=0; i++; i<1000) {
99     int sound = analogRead(SOUND_PIN);
100     sumSquare += sound * sound;
101   }
102   int rms_sound = sqrt(sumSquare / 1000);
103   Serial.print(",rms_sound=");
104   Serial.print(rms_sound);
105
106   int sound = analogRead(SOUND_PIN);
107   u8x8.setCursor(0,3 * 9);
108   u8x8.print( sound );
109   Serial.print(",sound=");
110   Serial.print(sound);
111
112   int light = analogRead(LIGHT_PIN);
113   u8x8.setCursor(0,3 * 9);
114   u8x8.print( light );
115   Serial.print(",light=");
116   Serial.print(light);
117   Serial.println();
118
119   u8x8.refreshDisplay();
120
121   // next loop in 1000ms from start
122   t = t + 1000 - millis();
123   delay(t);
124
125 }
126