Advertisement
SpidiAndi

Weather arduino uno project

Oct 23rd, 2024 (edited)
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 3.27 KB | Source Code | 0 0
  1. #include <Wire.h>
  2. #include <Adafruit_Sensor.h>
  3. #include <Adafruit_BMP085_U.h>
  4. #include <Adafruit_GFX.h>
  5. #include <Adafruit_SSD1306.h>
  6. #include <Servo.h>
  7.  
  8. #define SCREEN_WIDTH 128
  9. #define SCREEN_HEIGHT 64
  10. #define OLED_RESET    -1
  11. Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
  12.  
  13. Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
  14. Servo myServo;
  15.  
  16. void setup() {
  17.   Serial.begin(9600);
  18.   if(!bmp.begin()) {
  19.     Serial.print("Nie można znaleźć czujnika BMP180. Sprawdź połączenia.");
  20.     while(1);
  21.   }
  22.  
  23.   if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
  24.     Serial.println(F("SSD1306 allocation failed"));
  25.     for(;;);
  26.   }
  27.  
  28.   display.display();
  29.   delay(2000);
  30.   display.clearDisplay();
  31.  
  32.   myServo.attach(9); // Podłącz serwo mechanizm do pinu 9
  33.   myServo.write(0);  // Ustawienie serwo mechanizmu na początkową pozycję
  34. }
  35.  
  36. void loop() {
  37.   sensors_event_t event;
  38.   bmp.getEvent(&event);
  39.  
  40.   if (event.pressure) {
  41.     display.clearDisplay();
  42.    
  43.     float temperature;
  44.     bmp.getTemperature(&temperature);
  45.    
  46.     // Obliczanie wysokości
  47.     float seaLevelPressure = 1013.25; // Standardowe ciśnienie na poziomie morza w hPa
  48.     float altitude = bmp.pressureToAltitude(seaLevelPressure, event.pressure);
  49.  
  50.     // Dodanie tekstu nad wykresami słupkowymi
  51.     display.setTextSize(1);
  52.     display.setTextColor(SSD1306_WHITE);
  53.    
  54.     display.setCursor(8, 0);
  55.     display.print("CIS");                   //Pressure
  56.     display.setCursor(53, 0);
  57.     display.print("TEMP");                  //Tempterature
  58.     display.setCursor(95, 0);
  59.     display.print("WYS");                   //Height
  60.  
  61.     // Wykres słupkowy dla ciśnienia
  62.     display.fillRect(0, 10, 42, 54, SSD1306_BLACK);
  63.     display.drawRect(0, 10, 42, 54, SSD1306_WHITE);
  64.     int pressureHeight = map(event.pressure, 950, 1050, 0, 54);
  65.     display.fillRect(2, 64 - pressureHeight, 38, pressureHeight, SSD1306_WHITE);
  66.     display.setCursor(4, 54);
  67.     display.setTextSize(1);
  68.     display.setTextColor(SSD1306_BLACK);
  69.     display.print(event.pressure);
  70.     display.print(" hPa");
  71.    
  72.     // Wykres słupkowy dla temperatury
  73.     display.fillRect(43, 10, 42, 54, SSD1306_BLACK);
  74.     display.drawRect(43, 10, 42, 54, SSD1306_WHITE);
  75.     int temperatureHeight = map(temperature, -10, 40, 0, 54);
  76.     display.fillRect(45, 64 - temperatureHeight, 38, temperatureHeight, SSD1306_WHITE);
  77.     display.setCursor(47, 54);
  78.     display.setTextSize(1);
  79.     display.setTextColor(SSD1306_BLACK);
  80.     display.print(temperature);
  81.     display.print(" C");
  82.  
  83.     // Wykres słupkowy dla wysokości
  84.     display.fillRect(86, 10, 42, 54, SSD1306_BLACK);
  85.     display.drawRect(86, 10, 42, 54, SSD1306_WHITE);
  86.     int altitudeHeight = map(altitude, 0, 500, 0, 54); // Zakładam maksymalną wysokość 500 m dla lepszej skali
  87.     display.fillRect(88, 64 - altitudeHeight, 38, altitudeHeight, SSD1306_WHITE);
  88.     display.setCursor(90, 54);
  89.     display.setTextSize(1);
  90.     display.setTextColor(SSD1306_BLACK);
  91.     display.print(altitude);
  92.     display.print(" m");
  93.    
  94.     display.display();
  95.  
  96.     // Przeskalowanie ciśnienia do zakresu 0-180 stopni dla serwo mechanizmu
  97.     int servoAngle = map(event.pressure, 950, 1050, 0, 180);
  98.     myServo.write(servoAngle);
  99.   }
  100.  
  101.   delay(2000); // Opóźnienie między odczytami
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement