-
Notifications
You must be signed in to change notification settings - Fork 5
/
HCSR04.h
94 lines (76 loc) · 3.59 KB
/
HCSR04.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
HCSR04 - Library for arduino, for HC-SR04 ultrasonic distance sensor.
Created by Dirk Sarodnick, 2020.
*/
#ifndef HCSR04_H
#define HCSR04_H
#include "Arduino.h"
#define HCSR04_INVALID_RESULT -1;
#define HCSR04_NO_TRIGGER -2;
#define HCSR04_NO_ECHO -3;
class HCSR04Sensor {
public:
HCSR04Sensor();
~HCSR04Sensor();
typedef enum eUltraSonicUnlock {
unlockSkip = 0,
unlockMaybe = 1,
unlockForced = 2
} eUltraSonicUnlock_t;
void begin(byte triggerPin, byte echoPin) { begin(triggerPin, new byte[1]{ echoPin }, 1); }
void begin(byte triggerPin, byte* echoPins, byte echoCount) { begin(triggerPin, echoPins, echoCount, 100000, eUltraSonicUnlock_t::unlockSkip); }
void begin(byte triggerPin, byte echoPin, int timeout, eUltraSonicUnlock_t unlock) { begin(triggerPin, new byte[1]{ echoPin }, 1, timeout, unlock); }
void begin(byte triggerPin, byte* echoPins, byte echoCount, int timeout, eUltraSonicUnlock_t unlock);
void end();
long* measureMicroseconds() { measureMicroseconds(lastMicroseconds); return lastMicroseconds; }
void measureMicroseconds(long* results);
double* measureDistanceMm() { measureDistanceMm(defaultTemperature, lastDistances); return lastDistances; }
void measureDistanceMm(double* results) { measureDistanceMm(defaultTemperature, results == NULL ? lastDistances : results); }
double* measureDistanceMm(float temperature) { measureDistanceMm(temperature, lastDistances); return lastDistances; }
void measureDistanceMm(float temperature, double* results);
double* measureDistanceCm() { measureDistanceCm(defaultTemperature, lastDistances); return lastDistances; }
void measureDistanceCm(double* results) { measureDistanceCm(defaultTemperature, results == NULL ? lastDistances : results); }
double* measureDistanceCm(float temperature) { measureDistanceCm(temperature, lastDistances); return lastDistances; }
void measureDistanceCm(float temperature, double* results);
double* measureDistanceIn() { measureDistanceIn(defaultTemperature, lastDistances); return lastDistances; }
void measureDistanceIn(double* results) { measureDistanceIn(defaultTemperature, results == NULL ? lastDistances : results); }
double* measureDistanceIn(float temperature) { measureDistanceIn(temperature, lastDistances); return lastDistances; }
void measureDistanceIn(float temperature, double* results);
static void triggerInterrupt0(void);
static void triggerInterrupt1(void);
static void triggerInterrupt2(void);
static void triggerInterrupt3(void);
static void triggerInterrupt4(void);
static void triggerInterrupt5(void);
static void triggerInterrupt6(void);
static void triggerInterrupt7(void);
static void triggerInterrupt8(void);
static void triggerInterrupt9(void);
static void echoInterrupt0(void);
static void echoInterrupt1(void);
static void echoInterrupt2(void);
static void echoInterrupt3(void);
static void echoInterrupt4(void);
static void echoInterrupt5(void);
static void echoInterrupt6(void);
static void echoInterrupt7(void);
static void echoInterrupt8(void);
static void echoInterrupt9(void);
private:
float defaultTemperature = 19.307;
long* lastMicroseconds;
double* lastDistances;
int timeout;
volatile byte triggerPin;
volatile unsigned long* volatile triggerTimes;
byte echoCount;
volatile short* volatile echoStages;
volatile short* volatile echoInts;
volatile short* volatile echoPorts;
volatile unsigned long* volatile echoTimes;
void triggerInterrupt(byte);
void echoInterrupt(byte);
void unlockSensors(eUltraSonicUnlock_t, byte*);
};
extern HCSR04Sensor HCSR04;
#endif // HCSR04_H