Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <Adafruit_Sensor.h>
- #include <Adafruit_BMP085_U.h>
- #include <Adafruit_GFX.h>
- #include <Adafruit_SSD1306.h>
- #include <Servo.h>
- #define SCREEN_WIDTH 128
- #define SCREEN_HEIGHT 64
- #define OLED_RESET -1
- Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
- Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
- Servo myServo;
- void setup() {
- Serial.begin(9600);
- if(!bmp.begin()) {
- Serial.print("Nie można znaleźć czujnika BMP180. Sprawdź połączenia.");
- while(1);
- }
- if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
- Serial.println(F("SSD1306 allocation failed"));
- for(;;);
- }
- display.display();
- delay(2000);
- display.clearDisplay();
- myServo.attach(9); // Podłącz serwo mechanizm do pinu 9
- myServo.write(0); // Ustawienie serwo mechanizmu na początkową pozycję
- }
- void loop() {
- sensors_event_t event;
- bmp.getEvent(&event);
- if (event.pressure) {
- display.clearDisplay();
- float temperature;
- bmp.getTemperature(&temperature);
- // Obliczanie wysokości
- float seaLevelPressure = 1013.25; // Standardowe ciśnienie na poziomie morza w hPa
- float altitude = bmp.pressureToAltitude(seaLevelPressure, event.pressure);
- // Dodanie tekstu nad wykresami słupkowymi
- display.setTextSize(1);
- display.setTextColor(SSD1306_WHITE);
- display.setCursor(8, 0);
- display.print("CIS"); //Pressure
- display.setCursor(53, 0);
- display.print("TEMP"); //Tempterature
- display.setCursor(95, 0);
- display.print("WYS"); //Height
- // Wykres słupkowy dla ciśnienia
- display.fillRect(0, 10, 42, 54, SSD1306_BLACK);
- display.drawRect(0, 10, 42, 54, SSD1306_WHITE);
- int pressureHeight = map(event.pressure, 950, 1050, 0, 54);
- display.fillRect(2, 64 - pressureHeight, 38, pressureHeight, SSD1306_WHITE);
- display.setCursor(4, 54);
- display.setTextSize(1);
- display.setTextColor(SSD1306_BLACK);
- display.print(event.pressure);
- display.print(" hPa");
- // Wykres słupkowy dla temperatury
- display.fillRect(43, 10, 42, 54, SSD1306_BLACK);
- display.drawRect(43, 10, 42, 54, SSD1306_WHITE);
- int temperatureHeight = map(temperature, -10, 40, 0, 54);
- display.fillRect(45, 64 - temperatureHeight, 38, temperatureHeight, SSD1306_WHITE);
- display.setCursor(47, 54);
- display.setTextSize(1);
- display.setTextColor(SSD1306_BLACK);
- display.print(temperature);
- display.print(" C");
- // Wykres słupkowy dla wysokości
- display.fillRect(86, 10, 42, 54, SSD1306_BLACK);
- display.drawRect(86, 10, 42, 54, SSD1306_WHITE);
- int altitudeHeight = map(altitude, 0, 500, 0, 54); // Zakładam maksymalną wysokość 500 m dla lepszej skali
- display.fillRect(88, 64 - altitudeHeight, 38, altitudeHeight, SSD1306_WHITE);
- display.setCursor(90, 54);
- display.setTextSize(1);
- display.setTextColor(SSD1306_BLACK);
- display.print(altitude);
- display.print(" m");
- display.display();
- // Przeskalowanie ciśnienia do zakresu 0-180 stopni dla serwo mechanizmu
- int servoAngle = map(event.pressure, 950, 1050, 0, 180);
- myServo.write(servoAngle);
- }
- delay(2000); // Opóźnienie między odczytami
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement