188 lines
4.1 KiB
C++
Executable File
188 lines
4.1 KiB
C++
Executable File
#include "LowPower.h"
|
|
|
|
#define PLAY 11
|
|
#define VUP A1
|
|
#define VDOWN A0
|
|
#define NEXT 13
|
|
#define PREV 12
|
|
#define PWR 6
|
|
#define IN A7 /*ANALOG*/
|
|
#define MULTIPLIER 0.0048875855 //Arbitrary value to determine voltage
|
|
//#define PULSE 500 //How long the soc presses the bluetooth buttons for
|
|
#define WAIT 500 //How long it waits for single/double/triple click
|
|
#define SAMPLE A6 //Pin to read connected/disconnected status
|
|
#define PULSE 10 //Pin that sends pulse to determine conected/disconnected state
|
|
#define BAT A5
|
|
boolean STATUS = false;
|
|
float VAL;
|
|
unsigned long startTime = 0;
|
|
unsigned long endTime = 0;
|
|
unsigned long Started = 0;
|
|
unsigned long Ended = 0;
|
|
boolean CLOSED = false;
|
|
int CHANGED = 0;
|
|
|
|
void setup() {
|
|
pinMode(PLAY, OUTPUT);
|
|
pinMode(VUP, OUTPUT);
|
|
pinMode(VDOWN, OUTPUT);
|
|
pinMode(NEXT, OUTPUT);
|
|
pinMode(PREV, OUTPUT);
|
|
pinMode(PWR, OUTPUT);
|
|
pinMode(IN, INPUT);
|
|
pinMode(SAMPLE, INPUT);
|
|
pinMode(PULSE, INPUT);
|
|
pinMode(BAT, INPUT);
|
|
pinMode(PWR, OUTPUT);
|
|
digitalWrite(PWR, HIGH);
|
|
//Serial.begin(9600); //-----DEBUG
|
|
Started = millis();
|
|
}
|
|
|
|
void loop() {
|
|
scanPins();
|
|
|
|
|
|
Ended = millis() - Started;
|
|
|
|
|
|
if(Ended > 2000){checkStatus();}
|
|
|
|
//testVoltage();
|
|
|
|
}
|
|
|
|
void scanPins(){VAL = (MULTIPLIER*(analogRead(IN)));
|
|
if (VAL < 1.90){
|
|
delay(1);
|
|
VAL = (MULTIPLIER*(analogRead(IN)));
|
|
if((VAL > 1.75) && (VAL < 1.80)){
|
|
volUp();
|
|
}
|
|
if((VAL > 1.65) && (VAL < 1.73)){
|
|
volDown();
|
|
}
|
|
if(VAL < 0.6){
|
|
Functions();
|
|
}}}
|
|
void volUp(){
|
|
analogWrite(VUP, 1023);
|
|
delay(500);
|
|
// Serial.println("UP"); //-----DEBUG
|
|
analogWrite(VUP, 0);
|
|
}
|
|
void volDown(){
|
|
analogWrite(VDOWN, 1023);
|
|
delay(500);
|
|
// Serial.println("DOWN"); //-----DEBUG
|
|
analogWrite(VDOWN, 0);
|
|
}
|
|
void PlPa(){
|
|
digitalWrite(PLAY, HIGH);
|
|
delay(500);
|
|
// Serial.println("PLAY/PAUSE"); //-----DEBUG
|
|
digitalWrite(PLAY, LOW);
|
|
}
|
|
void Next(){
|
|
digitalWrite(NEXT, HIGH);
|
|
delay(500);
|
|
// Serial.println("NEXT"); //-----DEBUG
|
|
digitalWrite(NEXT, LOW);
|
|
}
|
|
void Prev(){
|
|
digitalWrite(PREV, HIGH);
|
|
// Serial.println("PREV"); //-----DEBUG
|
|
delay(500);
|
|
digitalWrite(PREV, LOW);
|
|
}
|
|
void Functions(){
|
|
CLOSED = true;
|
|
CHANGED = 1;
|
|
startTime = millis();
|
|
endTime = millis() - startTime;
|
|
while(endTime < WAIT){
|
|
|
|
if(CLOSED == true){
|
|
VAL = (MULTIPLIER*(analogRead(IN)));
|
|
if(VAL > 0.6){
|
|
|
|
CLOSED = false;
|
|
CHANGED++;
|
|
}
|
|
}
|
|
if(CLOSED == false){
|
|
VAL = (MULTIPLIER*(analogRead(IN)));
|
|
if(VAL < 0.6){
|
|
CLOSED = true;
|
|
CHANGED++;
|
|
}}
|
|
|
|
endTime = millis() - startTime;
|
|
delay(1);
|
|
}
|
|
|
|
if(CHANGED == 2){PlPa();}
|
|
if(CHANGED == 4){Next();}
|
|
if(CHANGED == 6){Prev();}
|
|
releaseVal();
|
|
}
|
|
void releaseVal(){
|
|
CHANGED = 0;
|
|
startTime = 0;
|
|
endTime = 0;
|
|
CLOSED = false;
|
|
}
|
|
void checkStatus(){
|
|
if(MULTIPLIER*(analogRead(SAMPLE)) > 0.01){
|
|
STATUS = true;}
|
|
else{
|
|
// Serial.println("Can't identify music, sending pulse..."); //-----DEBUG
|
|
pinMode(PULSE, OUTPUT);
|
|
digitalWrite(PULSE, HIGH);
|
|
if(MULTIPLIER*(analogRead(SAMPLE)) > 0.01){STATUS = true;}
|
|
else{STATUS = false;}
|
|
}
|
|
digitalWrite(PULSE, LOW);
|
|
pinMode(PULSE, INPUT);
|
|
|
|
//-----DEBUG
|
|
//if(STATUS == true){Serial.println("CONNECTED");}
|
|
//if(STATUS == false){Serial.println("DIS--CONNECTED");}
|
|
//-----DEBUG
|
|
|
|
if(STATUS == false){delay(50); CheckAgain();}
|
|
|
|
Ended = 0;
|
|
Started = millis();
|
|
}
|
|
|
|
void CheckAgain(){
|
|
|
|
if(MULTIPLIER*(analogRead(SAMPLE)) > 0.01){
|
|
STATUS = true;}
|
|
else{
|
|
// Serial.println("Can't identify music, sending pulse..."); //-----DEBUG
|
|
pinMode(PULSE, OUTPUT);
|
|
digitalWrite(PULSE, HIGH);
|
|
if(MULTIPLIER*(analogRead(SAMPLE)) > 0.01){STATUS = true;}
|
|
else{STATUS = false;}
|
|
}
|
|
digitalWrite(PULSE, LOW);
|
|
pinMode(PULSE, INPUT);
|
|
if(STATUS == false){ToggleLP();}
|
|
}
|
|
|
|
void ToggleLP(){
|
|
// Serial.println("SLEEPING"); //-----DEBUG
|
|
digitalWrite(PWR, LOW);
|
|
LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF);
|
|
digitalWrite(PWR, HIGH);
|
|
}
|
|
|
|
|
|
void testVoltage(){
|
|
if(analogRead(BAT) < 530){digitalWrite(PWR, LOW);
|
|
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); }
|
|
else{digitalWrite(PWR, HIGH);}
|
|
}
|