#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define GRAPH_HEIGHT 30
#define GRAPH_WIDTH SCREEN_WIDTH
#define GRAPH_X 0
#define GRAPH_Y (SCREEN_HEIGHT - GRAPH_HEIGHT - 20)
#define DATA_POINTS 1440 // Количество точек за сутки
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified();
float pressureData[DATA_POINTS]; // Массив для хранения данных о давлении
int index = 0; // Индекс для заполнения массива
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
if (!bmp.begin()) {
Serial.println("Не удалось найти датчик BMP180!");
while (1);
}
}
void loop() {
sensors_event_t event;
bmp.getEvent(&event);
if (event.pressure) {
display.clearDisplay();
// Конвертируем давление в мм рт. ст.
float pressureInMmHg = event.pressure * 0.750062;
pressureData[index] = pressureInMmHg; // Сохраняем данные о давлении в массив
index = (index + 1) % DATA_POINTS; // Циклический индекс
// Рисуем график
drawGraph(pressureData, GRAPH_Y, SSD1306_WHITE);
// Выводим текстовые данные
display.setCursor(40, 0);
//display.print("Давл.: ");
display.print((int) pressureInMmHg);
display.println(" mmHg");
display.display();
}
delay(60000); // Обновляем данные каждую минуту
}
void drawGraph(float* data, int y, uint16_t color) {
// Очищаем предыдущий график
display.fillRect(GRAPH_X, y, GRAPH_WIDTH, GRAPH_HEIGHT, SSD1306_BLACK);
for (int x = 0; x < DATA_POINTS - 1; x++) {
// Нормализуем данные в диапазоне 730-770 мм рт. ст.
int y1 = map(data[x], 730, 770, y + GRAPH_HEIGHT, y);
int y2 = map(data[x + 1], 730, 770, y + GRAPH_HEIGHT, y);
// Проверяем, чтобы y1 и y2 были в допустимых границах
if (y1 >= y && y1 <= y + GRAPH_HEIGHT && y2 >= y && y2 <= y + GRAPH_HEIGHT) {
display.drawLine(x, y1, x + 1, y2, color);
}
}
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
chip1:VCC
chip1:GND
chip1:SCL
chip1:SDA
oled1:GND
oled1:VCC
oled1:SCL
oled1:SDA