Advertisement
Ae_Mc

Lamp.ino

Nov 22nd, 2022
1,103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <NewPing.h>
  2. #define ECHO_PIN DD5
  3. #define TRIG_PIN DD4
  4. #define RELAY_PIN LED_BUILTIN
  5. #define SENSOR_MIN_DISTANCE 10  // cm
  6. #define DEBUG
  7.  
  8. class UltrasonicSensor {
  9.    private:
  10.     uint8_t trig_pin;
  11.     uint8_t echo_pin;
  12.     unsigned long _duration;
  13.  
  14.    public:
  15.     UltrasonicSensor(uint8_t trig_pin, uint8_t echo_pin) {
  16.         this->trig_pin = trig_pin;
  17.         this->echo_pin = echo_pin;
  18.         pinMode(trig_pin, OUTPUT);
  19.         pinMode(echo_pin, INPUT);
  20.         digitalWrite(trig_pin, LOW);
  21.     }
  22.  
  23.     static double durationToCentimeters(unsigned long duration) {
  24.         return duration * 0.017;
  25.     }
  26.  
  27.     double getCentimetersDistance() {
  28.         digitalWrite(TRIG_PIN, LOW);
  29.         delayMicroseconds(2);
  30.         digitalWrite(TRIG_PIN, HIGH);
  31.         delayMicroseconds(10);
  32.         digitalWrite(TRIG_PIN, LOW);
  33.         // Microseconds
  34.         _duration = pulseIn(ECHO_PIN, HIGH);
  35.         // Centimeters
  36.         return _duration * 0.017;
  37.     }
  38.  
  39.     unsigned long lastDuration() const { return _duration; }
  40. };
  41.  
  42. void setup() {
  43.     pinMode(RELAY_PIN, OUTPUT);
  44. #ifdef DEBUG
  45.     Serial.begin(9600);
  46. #endif
  47. }
  48.  
  49. void loop() {
  50.     static NewPing sonar(TRIG_PIN, ECHO_PIN, SENSOR_MIN_DISTANCE + 30);
  51.     static unsigned long previous_turn = millis();
  52.     unsigned long distance;
  53.     if (millis() - previous_turn > 1000 &&
  54.         (distance = sonar.convert_cm(sonar.ping_median())) <
  55.             SENSOR_MIN_DISTANCE &&
  56.         distance > 0) {
  57.         digitalWrite(RELAY_PIN, digitalRead(RELAY_PIN) == HIGH ? LOW : HIGH);
  58.         previous_turn = millis();
  59. #ifdef DEBUG
  60.         Serial.println("-------------------\nDistance = " + String(distance) +
  61.                        " см");
  62. #endif
  63.     }
  64. #ifdef DEBUG
  65.     Serial.println("Distance = " + String(distance) + " см");
  66. #endif
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement