Advertisement
Tywais

Water Level System New

Jul 4th, 2025
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.25 KB | Source Code | 0 0
  1. //GOOD JUNE 29, 2025
  2. //Changed to HCSR04 library June 30
  3.  
  4. #include <Adafruit_GFX.h>
  5. #include <Adafruit_SSD1331.h>
  6. #include <SPI.h>
  7. #include <OneButton.h>
  8. #include <Fonts\Seven_Segment7pt7b.h>
  9. #include <HCSR04.h>
  10.  
  11. // --- Pin Definitions ---
  12. #define TRIG_PIN    0
  13. #define ECHO_PIN    1
  14. #define BUTTON_PIN  2
  15. HCSR04 hc(TRIG_PIN,ECHO_PIN);
  16.  
  17. #define OLED_CS     7
  18. #define OLED_DC     10
  19. #define OLED_RST    3
  20.  
  21. #define BLACK 0x0000
  22. #define BLUE 0x001F
  23. #define RED 0xF800
  24. #define GREEN 0x07E0
  25. #define CYAN 0x07FF
  26. #define MAGENTA 0xF81F
  27. #define YELLOW 0xFFE0
  28. #define WHITE 0xFFFF
  29. // --- Display: SSD1331 96x64 SPI OLED ---
  30. Adafruit_SSD1331 display = Adafruit_SSD1331(&SPI, OLED_CS, OLED_DC, OLED_RST);
  31.  
  32. // --- OneButton setup ---
  33. OneButton button(BUTTON_PIN, true, true);
  34.  
  35. // --- Constants ---
  36. const float CYLINDER_DIAMETER = 93.15;  // mm
  37. const float CYLINDER_RADIUS = CYLINDER_DIAMETER / 2.0;
  38. const int SAMPLE_COUNT = 10;
  39.  
  40. float baseDistance = 0;
  41.  
  42. void setup() {
  43.   Serial.begin(115200);
  44.  
  45.   pinMode(TRIG_PIN, OUTPUT);
  46.   pinMode(ECHO_PIN, INPUT);
  47.  
  48.   // Initialize display
  49.   display.begin();
  50.   display.fillScreen(BLACK);
  51.   display.setRotation(0);
  52.  
  53.   // Initialize button
  54.   button.attachClick(onButtonClick);
  55.  
  56.   // Draw static layout
  57.   drawLayout();
  58.  
  59.   // Read baseline distance
  60.   delay(30);
  61.   baseDistance = hc.dist();  //averageDistance();
  62.   baseDistance = baseDistance * 10;  //cm to mm
  63.   Serial.print("Base Distance (mm): ");
  64.   Serial.println(baseDistance,2);
  65. }
  66.  
  67. void loop() {
  68.   button.tick();
  69. }
  70.  
  71. // --- Draw static UI elements ---
  72. void drawLayout() {
  73.   display.fillScreen(BLACK);
  74.  
  75.   // Top green rectangle (distance)
  76.   display.drawRoundRect(0, 0, 96, 30, 3, GREEN);
  77.  
  78.   // Bottom yellow rectangle (volume)
  79.   display.drawRoundRect(0, 34, 96, 30, 3, YELLOW);
  80. }
  81.  
  82. // --- Handle button press ---
  83. void onButtonClick() {
  84.   float measured = hc.dist(); //averageDistance();
  85.   measured = measured * 10;  //cm to mm
  86.   float corrected = baseDistance - measured;
  87.   if (corrected < 0) corrected = 0;
  88.  
  89.   float height_mm = (float)corrected;
  90.   float volume_mm3 = PI * CYLINDER_RADIUS * CYLINDER_RADIUS * height_mm;
  91.   float volume_mL = volume_mm3 / 1000.0;
  92.  
  93.   updateDisplay(corrected, volume_mL);
  94. }
  95.  
  96. // --- Display updated values ---
  97. void updateDisplay(float corrected_mm, float volume_mL) {
  98.   // Clear inner rectangles
  99.   display.fillRect(2, 2, 92, 26, BLACK);
  100.   display.fillRect(2, 36, 92, 26, BLACK);
  101.  
  102.   // Distance (top area)
  103.   display.setCursor(4, 6);
  104.   display.setTextColor(GREEN);
  105.   display.setFont(&Seven_Segment7pt7b);
  106.   //display.setTextSize(1);
  107.   display.print(corrected_mm,1);
  108. //  display.print(" mm");
  109.  
  110.   // Volume (bottom area)
  111.   display.setCursor(4, 47);
  112.   display.setTextColor(YELLOW);
  113.   display.setFont(&Seven_Segment7pt7b);
  114. //  display.setTextSize(1);
  115.   display.print(volume_mL, 2);
  116. //  display.print(" mL");
  117.   Serial.print("$");  //for serial plotter
  118.   Serial.print(volume_mL, 2);
  119.   Serial.print(";");
  120.  
  121. // Bottom labels
  122.   display.setCursor(12, 60);
  123.   display.setTextColor(WHITE);
  124.   display.setFont();
  125.   display.setTextSize(1);
  126.   display.print("  Volume mL");
  127.  
  128.   display.setCursor(6, 20);
  129.   display.setTextColor(WHITE);
  130.   display.setFont();
  131.   display.setTextSize(1);
  132.   display.print("Water Level mm");
  133.  
  134.  
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement