Components and supplies
16x2 LCD display with I²C interface
Distance Sensor
Arduino UNO
Apps and platforms
Arduino IDE 2.0 (beta)
Project description
Code
Here is the full code
cpp
live distance code
1#include <Wire.h> 2#include <DFRobot_RGBLCD1602.h> 3#include <Ultrasonic.h> 4 5// Αρχικοποίηση της οθόνης LCD 6DFRobot_RGBLCD1602 lcd(16, 2); 7 8// Παράμετροι για τον αισθητήρα υπερήχων 9const int trigPin = 9; 10const int echoPin = 10; 11Ultrasonic ultrasonic(trigPin, echoPin); 12 13const int buttonPin = 2; // Ο ακροδέκτης που συνδέεται με το κουμπί 14const int resetButtonPin = 3; // Ο ακροδέκτης που συνδέεται με το κουμπί reset 15 16bool buttonState = LOW; // Η τρέχουσα κατάσταση του κουμπιού 17bool lastButtonState = LOW; // Η τελευταία κατάσταση του κουμπιού 18unsigned long lastDebounceTime = 0; // Ο χρόνος τελευταίας αναστάτωσης του κουμπιού 19unsigned long debounceDelay = 50; // Χρονική καθυστέρηση αναστάτωσης 20 21const int maxStoredValues = 4; // Ο μέγιστος αριθμός αποθηκευμένων τιμών 22int storedValues[maxStoredValues]; // Ο πίνακας με τις αποθηκευμένες τιμές 23int storedCount = 0; // Ο τρέχων αριθμός αποθηκευμένων τιμών 24int currentIndex = 0; // Ο τρέχων δείκτης για τον πίνακα 25 26bool resetButtonState = LOW; // Η τρέχουσα κατάσταση του κουμπιού reset 27bool lastResetButtonState = LOW; // Η τελευταία κατάσταση του κουμπιού reset 28 29void setup() { 30 // Ενεργοποίηση της οθόνης LCD 31 lcd.init(); 32 33 // Αρχικοποίηση του αισθητήρα υπερήχων 34 pinMode(trigPin, OUTPUT); 35 pinMode(echoPin, INPUT); 36 37 // Αρχικοποίηση του κουμπιού 38 pinMode(buttonPin, INPUT_PULLUP); 39 40 // Αρχικοποίηση του κουμπιού reset 41 pinMode(resetButtonPin, INPUT_PULLUP); 42 43 // Εμφάνιση αρχικού μηνύματος 44 lcd.setCursor(0, 0); 45 lcd.print("Distance: "); 46 47 lcd.setCursor(0, 1); 48 lcd.print("SV:"); 49} 50 51void loop() { 52 // Μέτρηση της απόστασης από τον αισθητήρα υπερήχων 53 float distanceCm = ultrasonic.read(); 54 55 // Διαχείριση του κουμπιού 56 int reading = digitalRead(buttonPin); 57 if (reading != lastButtonState) { 58 lastDebounceTime = millis(); 59 } 60 if ((millis() - lastDebounceTime) > debounceDelay) { 61 if (reading != buttonState) { 62 buttonState = reading; 63 if (buttonState == LOW) { 64 // Αποθηκεύουμε την τρέχουσα τιμή απόστασης 65 if (storedCount < maxStoredValues) { 66 storedValues[currentIndex] = int(distanceCm); 67 storedCount++; 68 currentIndex = (currentIndex + 1) % maxStoredValues; // Κυκλική λίστα 69 } 70 } 71 } 72 } 73 lastButtonState = reading; 74 75 // Διαχείριση του κουμπιού reset 76 int resetReading = digitalRead(resetButtonPin); 77 if (resetReading != lastResetButtonState) { 78 if (resetReading == LOW) { 79 // Επαναφορά των αποθηκευμένων τιμών 80 storedCount = 0; 81 currentIndex = 0; 82 } 83 } 84 lastResetButtonState = resetReading; 85 86 // Εμφάνιση της απόστασης στην οθόνη LCD 87 lcd.setCursor(10, 0); 88 89 if (distanceCm > 45) { 90 lcd.print("--"); 91 } else { 92 if (distanceCm < 10) { 93 lcd.print(" "); 94 } 95 lcd.print(int(distanceCm)); 96 } 97 98 // Εμφάνιση των αποθηκευμένων τιμών στην κάτω σειρά 99 lcd.setCursor(0, 1); 100 lcd.print("SV:"); 101 for (int i = 0; i < storedCount; i++) { 102 lcd.print(" "); 103 lcd.print(storedValues[i]); 104 } 105 106 delay(100); // Καθυστέρηση για σταθερή ενημέρωση της οθόνης 107}
Comments
Only logged in users can leave comments
petros_mpla
0 Followers
•0 Projects
0