#define TRIG_PIN 4 // ESP32 pin GIOP26 connected to Ultrasonic Sensor's TRIG pin
#define ECHO_PIN 2 // ESP32 pin GIOP25 connected to Ultrasonic Sensor's ECHO pin
#define LED_PIN 13 // ESP32 pin GIOP17 connected to LED's pin
#define BUZZER_PIN 12 // ESP32 pin GIOP17 connected to Piezo Buzzer's pin
#define DISTANCE_THRESHOLD 100 // centimeters
// variables will change:
float duration_us, distance_cm;
unsigned long startTime, stopTime, cpuTime;
void loop(){
}
void setup() {
Serial.begin (9600); // initialize serial port
pinMode(TRIG_PIN, OUTPUT); // set ESP32 pin to output mode
pinMode(ECHO_PIN, INPUT); // set ESP32 pin to input mode
pinMode(BUZZER_PIN, OUTPUT); // set ESP32 pin to output mode
pinMode(LED_PIN, OUTPUT); // set ESP32 pin to output mode
xTaskCreatePinnedToCore (TaskA, "TaskA" , 1024 , NULL , 1, NULL , 1);
xTaskCreatePinnedToCore (TaskB, "TaskB" , 1024 , NULL , 2, NULL , 1);
xTaskCreatePinnedToCore (TaskC, "TaskC" , 1024 , NULL , 3, NULL , 1);
}
void TaskA(void*pt){
while(1){
startTime = micros();
// generate 10-microsecond pulse to TRIG pin
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// measure duration of pulse from ECHO pin
duration_us = pulseIn(ECHO_PIN, HIGH);
// calculate the distance
distance_cm = 0.017 * duration_us;
stopTime = micros();
//delay ();
if (distance_cm < DISTANCE_THRESHOLD)
digitalWrite(LED_PIN, HIGH); // turn on LED
else
digitalWrite(LED_PIN, LOW); // turn off LED
// print the value to Serial Monitor
Serial.print("distance: ");
Serial.print(distance_cm);
Serial.println(" cm");
delay(500);
cpuTime = stopTime-startTime;
Serial.print("CPU Time(us):");
Serial.println(cpuTime);
Serial.println("---");
delay(1000);
}
}
void TaskB(void*pt) {
while(1){
startTime = micros();
// generate 10-microsecond pulse to TRIG pin
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// measure duration of pulse from ECHO pin
duration_us = pulseIn(ECHO_PIN, HIGH);
// calculate the distance
distance_cm = 0.017 * duration_us;
stopTime = micros();
if (distance_cm < DISTANCE_THRESHOLD){
digitalWrite(BUZZER_PIN, HIGH); // turn on Piezo Buzzer
tone(13, 262, 0.250);
}
else if (distance_cm > DISTANCE_THRESHOLD) {
digitalWrite(BUZZER_PIN, LOW); // turn off Piezo Buzzer
noTone(13);
}
// print the value to Serial Monitor
//Serial.print("distance: ");
//Serial.print(distance_cm);
//Serial.println(" cm");
delay(700);
cpuTime = stopTime-startTime;
Serial.print("CPU Time(us):");
Serial.println(cpuTime);
Serial.println("---");
delay(1000);
}
}
void TaskC( void*pt) {
startTime = micros();
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Warning!: You are too close with this machine.");
delay(1000);
stopTime = micros();
cpuTime = stopTime-startTime;
Serial.print("CPU Time(btn):");
Serial.println(cpuTime);
Serial.println("---");
delay(1000);
}