-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparking_sensor.ino
More file actions
78 lines (71 loc) · 1.95 KB
/
Copy pathparking_sensor.ino
File metadata and controls
78 lines (71 loc) · 1.95 KB
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
#include <RH_ASK.h>
#include <SPI.h>
#define CHECK_VAL 3
uint8_t echoPin = 7;
uint8_t trigPin = 8;
uint8_t id = 1;
uint8_t distance;
uint8_t avg_dist = 0;
RH_ASK driver;
enum FSM {ACQUIRE, TRANSMIT} state;
uint8_t values[CHECK_VAL];
uint8_t num_vals = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
if(!driver.init()) {
Serial.println("Failed!");
}
state = ACQUIRE;
}
uint8_t* constructMessage() {
uint8_t* message = new uint8_t[2];
message[0] = avg_dist;
message[1] = id;
return message;
}
void tick() {
switch(state) {
case ACQUIRE:
Serial.print("Acquiring Distance: ");
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
distance = int(.017 * pulseIn(echoPin, HIGH));
Serial.println(distance);
values[num_vals % CHECK_VAL] = distance;
num_vals = num_vals + 1;
if(num_vals % CHECK_VAL == 0) {
state = TRANSMIT;
}
break;
case TRANSMIT:
uint16_t new_avg = 0;
for(uint8_t i = 0; i < CHECK_VAL; i++) {
new_avg += values[i];
}
new_avg /= CHECK_VAL;
Serial.print("Prev Average:");
Serial.println(avg_dist);
Serial.print("New Average:");
Serial.println(new_avg);
if(abs(avg_dist - new_avg) >= 5 || avg_dist == 0) {
avg_dist = new_avg;
Serial.print("Attempting Transmission..");
driver.send(constructMessage(), 2);
driver.waitPacketSent();
Serial.print("Sent from ID: ");
Serial.println(id);
}
state = ACQUIRE;
break;
default:
break;
}
}
void loop() {
delay(2000);
tick();
}