|
@@ -1,6 +1,7 @@
|
1
|
1
|
/*
|
2
|
2
|
* Author: Yevgeniy Kiveisha <yevgeniy.kiveisha@intel.com>
|
3
|
|
- * Copyright (c) 2014 Intel Corporation.
|
|
3
|
+ * Author: Rafael Neri <rafael.neri@gmail.com>
|
|
4
|
+ * Copyright (c) 2014-2015 Intel Corporation.
|
4
|
5
|
*
|
5
|
6
|
* Permission is hereby granted, free of charge, to any person obtaining
|
6
|
7
|
* a copy of this software and associated documentation files (the
|
|
@@ -42,13 +43,17 @@ HCSR04::HCSR04 (uint8_t triggerPin, uint8_t echoPin, void (*fptr)(void *)) {
|
42
|
43
|
mraa_result_t error = MRAA_SUCCESS;
|
43
|
44
|
m_name = "HCSR04";
|
44
|
45
|
|
45
|
|
- m_pwmTriggerCtx = mraa_pwm_init (triggerPin);
|
46
|
|
- if (m_pwmTriggerCtx == NULL) {
|
47
|
|
- std::cout << "PWM context is NULL" << std::endl;
|
|
46
|
+ mraa_init();
|
|
47
|
+
|
|
48
|
+ m_triggerPinCtx = mraa_gpio_init (triggerPin);
|
|
49
|
+ if (m_triggerPinCtx == NULL) {
|
|
50
|
+ fprintf (stderr, "Are you sure that pin%d you requested is valid on your platform?", triggerPin);
|
48
|
51
|
exit (1);
|
49
|
52
|
}
|
50
|
53
|
|
51
|
|
- mraa_init();
|
|
54
|
+ mraa_gpio_dir(m_triggerPinCtx, MRAA_GPIO_OUT);
|
|
55
|
+ mraa_gpio_write (m_triggerPinCtx, 0);
|
|
56
|
+
|
52
|
57
|
m_echoPinCtx = mraa_gpio_init(echoPin);
|
53
|
58
|
if (m_echoPinCtx == NULL) {
|
54
|
59
|
fprintf (stderr, "Are you sure that pin%d you requested is valid on your platform?", echoPin);
|
|
@@ -62,24 +67,27 @@ HCSR04::HCSR04 (uint8_t triggerPin, uint8_t echoPin, void (*fptr)(void *)) {
|
62
|
67
|
HCSR04::~HCSR04 () {
|
63
|
68
|
mraa_result_t error = MRAA_SUCCESS;
|
64
|
69
|
|
65
|
|
- mraa_pwm_close (m_pwmTriggerCtx);
|
|
70
|
+ error = mraa_gpio_close (m_triggerPinCtx);
|
|
71
|
+ if (error != MRAA_SUCCESS) {
|
|
72
|
+ mraa_result_print (error);
|
|
73
|
+ }
|
|
74
|
+
|
66
|
75
|
error = mraa_gpio_close (m_echoPinCtx);
|
67
|
76
|
if (error != MRAA_SUCCESS) {
|
68
|
77
|
mraa_result_print (error);
|
69
|
78
|
}
|
70
|
79
|
}
|
71
|
80
|
|
72
|
|
-int
|
73
|
|
-HCSR04::getDistance () {
|
74
|
|
- mraa_pwm_enable (m_pwmTriggerCtx, 1);
|
75
|
|
- mraa_pwm_period_us (m_pwmTriggerCtx, MAX_PERIOD);
|
76
|
|
- mraa_pwm_pulsewidth_us (m_pwmTriggerCtx, TRIGGER_PULSE);
|
77
|
|
- mraa_pwm_enable (m_pwmTriggerCtx, 0);
|
|
81
|
+double
|
|
82
|
+HCSR04::timing() {
|
|
83
|
+ mraa_gpio_write (m_triggerPinCtx, 1);
|
|
84
|
+ usleep(10);
|
|
85
|
+ mraa_gpio_write (m_triggerPinCtx, 0);
|
78
|
86
|
|
79
|
87
|
m_doWork = 0;
|
80
|
88
|
m_InterruptCounter = 0;
|
81
|
89
|
while (!m_doWork) {
|
82
|
|
- sleep (1);
|
|
90
|
+ usleep (5);
|
83
|
91
|
}
|
84
|
92
|
|
85
|
93
|
return m_FallingTimeStamp - m_RisingTimeStamp;
|
|
@@ -98,3 +106,15 @@ HCSR04::ackEdgeDetected () {
|
98
|
106
|
m_RisingTimeStamp = 1000000 * timer.tv_sec + timer.tv_usec;
|
99
|
107
|
}
|
100
|
108
|
}
|
|
109
|
+
|
|
110
|
+double
|
|
111
|
+HCSR04::getDistance(int sys)
|
|
112
|
+{
|
|
113
|
+ double _timing = timing();
|
|
114
|
+ if (sys)
|
|
115
|
+ {
|
|
116
|
+ return (_timing/2) / 29.1;
|
|
117
|
+ } else {
|
|
118
|
+ return (_timing/2) / 74.1;
|
|
119
|
+ }
|
|
120
|
+}
|