/*
HC-SR04 Ultrasonic Sensor Example.
Turn the LED on when an object is within 100cm range.
Copyright (C) 2021, Uri Shaked
*/
int volume_up_button = 5;
int volume_down_button = 6;
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(volume_up_button, OUTPUT);
pinMode(volume_down_button, OUTPUT);
}
int ECHO_PIN, TRIG_PIN;
float readDistanceCM() {
ECHO_PIN = 2;
TRIG_PIN = 3;
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
float distance;
void loop() {
distance = readDistanceCM();
bool isNearby = distance < 100;
digitalWrite(LED_BUILTIN, isNearby);
Serial.print("Measured distance: ");
Serial.println(readDistanceCM());
delay(100);
//controlPlayback();
//controlVolume();
controlSong();
}
// Define states
const int PLAY = 1;
const int PAUSE = 2;
int state = PAUSE;
// Define thresholds
const float volumeThreshold = 10; // Distance threshold for volume control
// Function to control playback
void controlPlayback() {
int play_button = 4;
pinMode(play_button, OUTPUT);
if (distance < volumeThreshold) {
if (state == PAUSE) {
Serial.println("Playing");
state = PLAY;
digitalWrite(play_button,HIGH);
delay(2000);
} else {
Serial.println("Paused");
state = PAUSE;
digitalWrite(play_button,LOW);
delay(2000);
}
}
}
int count =50;
int volume;
// Function to control volume with 2 settings
void controlVolume() {
if (distance >= volumeThreshold) {
if (distance < 30) {
volume = 1; // 1st volume setting
Serial.println("Volume DOWN: " + String(volume));
count--;
digitalWrite(volume_down_button, HIGH);
Serial.println("Count"+String(count));
delay(500);
digitalWrite(volume_down_button, LOW);
delay(500);
} else if (distance > 30 && distance < 50) {
volume = 2; // 2nd volume setting
Serial.println("Volume UP: " + String(volume));
count++;
digitalWrite(volume_up_button, HIGH);
Serial.println("Count"+String(count));
delay(2000);
digitalWrite(volume_up_button, LOW);
delay(2000);
}
}
}
int lightValue1 = 8; // choose the input pin (for PIR sensor)
int lightValue2 = 9;
int pirState = LOW; // we start, assuming no motion detected
bool leftTriggered, rightTriggered;
// Function to control next/previous song based on sequence
void controlSong() {
pinMode(lightValue1, INPUT);
pinMode(lightValue2, INPUT);
if (digitalRead(lightValue1) == HIGH && rightTriggered == true) {
if(rightTriggered){
digitalWrite(volume_up_button, HIGH);
delay(50);
digitalWrite(volume_up_button, LOW);
Serial.println("Next song");
rightTriggered = false;
}
}
else if (digitalRead(lightValue1) == HIGH) {
// Left sensor triggered
leftTriggered = true;
}
if (digitalRead(lightValue2) == HIGH) {
// Right sensor triggered
if (leftTriggered) {
// Left triggered first, then right, so go to previous song
digitalWrite(volume_down_button, HIGH);
delay(50);
digitalWrite(volume_down_button, LOW);
Serial.println("Previous song");
leftTriggered = false; // Reset the flag
} else {
rightTriggered = true;
// Right triggered first, so go to next song
}
}
}