-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcode task3.3
More file actions
126 lines (108 loc) · 3.28 KB
/
code task3.3
File metadata and controls
126 lines (108 loc) · 3.28 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <WiFiNINA.h>
#include <ArduinoMqttClient.h>
// Wi-Fi Credentials
#define ssid "OPTUS_FF9A94L"
#define pass "hazel20212qv"
// MQTT Broker Details
const char broker[] = "broker.emqx.io";
int port = 1883;
const char topic[] = "SIT210/wave";
// Wi-Fi & MQTT Clients
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
// Ultrasonic Sensor Pins
const int trigPin = 2;
const int echoPin = 3;
// LED Pin
const int ledPin = 4;
// Last detection timestamp to prevent multiple triggers
unsigned long lastDetectionTime = 0;
const unsigned long debounceDelay = 3000; // 3 seconds debounce
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
// Connect to Wi-Fi
Serial.print("Connecting to Wi-Fi: ");
Serial.println(ssid);
while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
Serial.print(".");
delay(2000);
}
Serial.println("\nConnected to Wi-Fi");
// Connect to MQTT Broker
Serial.print("Connecting to MQTT Broker: ");
Serial.println(broker);
while (!mqttClient.connect(broker, port)) {
Serial.print("MQTT connection failed! Error code: ");
Serial.println(mqttClient.connectError());
delay(5000);
}
Serial.println("Connected to MQTT Broker");
// Set callback function for receiving messages
mqttClient.onMessage(onMqttMessage);
// Subscribe to the topic
mqttClient.subscribe(topic);
Serial.println("Subscribed to topic: " + String(topic));
}
void loop() {
mqttClient.poll(); // Check for new MQTT messages
float distance = getDistance();
// Debounce mechanism to prevent frequent triggers
unsigned long currentMillis = millis();
if (distance > 0 && distance <= 20 && (currentMillis - lastDetectionTime > debounceDelay)) {
lastDetectionTime = currentMillis;
if (distance > 10) {
// Wave detected
Serial.println("Wave detected!");
mqttClient.beginMessage(topic);
mqttClient.print("Ekamjot waved!");
mqttClient.endMessage();
} else {
// Pat detected
Serial.println("Pat detected!");
mqttClient.beginMessage(topic);
mqttClient.print("pat");
mqttClient.endMessage();
}
}
}
// Function to measure distance using Ultrasonic Sensor
float getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return (duration * 0.0343) / 2; // Convert time to distance in cm
}
// Function to handle received MQTT messages
void onMqttMessage(int messageSize) {
Serial.print("Received message on topic '");
Serial.print(mqttClient.messageTopic());
Serial.print("': ");
String message = "";
while (mqttClient.available()) {
char c = (char)mqttClient.read();
message += c;
Serial.print(c);
}
Serial.println();
// Determine action based on received message
if (message == "Ekamjot waved!") {
flashLed(3, 500); // Wave: Slow flash 3 times
} else if (message == "pat") {
flashLed(5, 200); // Pat: Fast flash 5 times
}
}
// Function to flash LED a given number of times with a specified delay
void flashLed(int times, int delayMs) {
for (int i = 0; i < times; i++) {
digitalWrite(ledPin, HIGH);
delay(delayMs);
digitalWrite(ledPin, LOW);
delay(delayMs);
}
}