MatrixMiniR4 1.1.5
Matrix Mini R4 Arduino Library API Documentation
Loading...
Searching...
No Matches
MiniR4_Grove_US.h
Go to the documentation of this file.
1
16#ifndef MINIR4_Grove_US_H
17#define MINIR4_Grove_US_H
18
19#include <stdio.h>
20#include <string.h>
21#include <inttypes.h>
22#include <Arduino.h>
23
24#ifdef ARDUINO_ARCH_STM32F4
25
26static uint32_t MicrosDiff(uint32_t begin, uint32_t end) {
27 return end - begin;
28}
29
30static uint32_t pulseIn(uint32_t pin, uint32_t state, uint32_t timeout = 1000000 L) {
31 uint32_t begin = micros();
32
33 // wait for any previous pulse to end
34 while (digitalRead(pin))
35 if (MicrosDiff(begin, micros()) >= timeout) {
36 return 0;
37 }
38
39 // wait for the pulse to start
40 while (!digitalRead(pin))
41 if (MicrosDiff(begin, micros()) >= timeout) {
42 return 0;
43 }
44 uint32_t pulseBegin = micros();
45
46 // wait for the pulse to stop
47 while (digitalRead(pin))
48 if (MicrosDiff(begin, micros()) >= timeout) {
49 return 0;
50 }
51 uint32_t pulseEnd = micros();
52
53 return MicrosDiff(pulseBegin, pulseEnd);
54}
55
56#endif // ARDUINO_ARCH_STM32F4
57
69template <uint8_t PIN1, uint8_t PIN2> class MiniR4_Grove_US {
70 public:
71
73 _pin = PIN2; //目前在DI R,未來可改成DI_L與MATRIX Sensor系統同步
74 }
75
82 long MeasureInCentimeters(uint32_t timeout = 1000000L) {
83 long RangeInCentimeters;
84 RangeInCentimeters = duration(timeout) / 29 / 2;
85 return RangeInCentimeters;
86 }
87
94 long MeasureInMillimeters(uint32_t timeout = 1000000L) {
95 long RangeInMillimeters;
96 RangeInMillimeters = duration(timeout) * (10 / 2) / 29;
97 return RangeInMillimeters;
98 }
99
106 long MeasureInInches(uint32_t timeout = 1000000L) {
107 long RangeInInches;
108 RangeInInches = duration(timeout) / 74 / 2;
109 return RangeInInches;
110 }
111
112 private:
113 int _pin; //pin number of Arduino that is connected with SIG pin of Ultrasonic Ranger.
114 long duration(uint32_t timeout = 1000000L) {
115 pinMode(_pin, OUTPUT);
116 digitalWrite(_pin, LOW);
117 delayMicroseconds(2);
118 digitalWrite(_pin, HIGH);
119 delayMicroseconds(5);
120 digitalWrite(_pin, LOW);
121 pinMode(_pin, INPUT);
122 long duration;
123 duration = pulseIn(_pin, HIGH, timeout);
124 return duration;
125 }
126};
127
128#endif // MINIR4_Grove_US_H
A class for interfacing with Grove Ultrasonic Ranger.
long MeasureInCentimeters(uint32_t timeout=1000000L)
Measures the distance in centimeters.
long MeasureInMillimeters(uint32_t timeout=1000000L)
Measures the distance in millimeters.
long MeasureInInches(uint32_t timeout=1000000L)
Measures the distance in inches.